训练转换后的输出

时间:2019-04-12 02:41:30

标签: python keras tf.keras

我有一个递归神经网络模型,该模型将(N,)序列映射到(N,3)长度序列。我的目标输出实际上是(N,N)矩阵。但是,我有一个以numpy实现的确定性函数,该函数以我想要的特定方式将(N,3)转换为这些(N,N)矩阵。如何在训练中使用此操作?即目前我的神经网络正在发出(N,3)序列,如何在调用 之前在上执行这些函数将其转换为(N,N)

编辑:我还应该指出,从keras.fit(N,N)的反向功能要困难得多,因此仅将目标输出转换为(N,3)并不是可行的选择输出表示形式。

1 个答案:

答案 0 :(得分:1)

您可以将Lambda层用作模型的最后一层:

def convert_to_n_times_n(x):
    # transform x from shape (N, 3) to (N, N)

transformation_layer = tf.keras.layers.Lambda(convert_to_n_times_n)

您可能希望在函数中尽可能使用“ tf本机方法”,以避免张量不必要地转换为numpy数组并返回。

如果您只想在训练过程中使用该图层,而不是在推理过程中使用,则可以使用功能性API来实现:

# create your original model (N,) -> (N, 3)
input_ = Input(shape=(N,))
x = SomeFancyLayer(...)(input_)
x = ...
...
inference_output = OtherFancyLayer(...)(x)

inference_model = Model(inputs=input_, outputs=inference_output)

# create & fit the training model
training_output = transformation_layer(inference_output)
training_model = Model(inputs=input_, outputs=training_output)

training_model.compile(...)
training_model.fit(X, Y)

# run inference using your original model
inference_model.predict(...)