我有一个递归神经网络模型,该模型将(N,)
序列映射到(N,3)
长度序列。我的目标输出实际上是(N,N)
矩阵。但是,我有一个以numpy实现的确定性函数,该函数以我想要的特定方式将(N,3)
转换为这些(N,N)
矩阵。如何在训练中使用此操作?即目前我的神经网络正在发出(N,3)
序列,如何在调用 之前在上执行这些函数将其转换为(N,N)
?
编辑:我还应该指出,从keras.fit
到(N,N)
的反向功能要困难得多,因此仅将目标输出转换为(N,3)
并不是可行的选择输出表示形式。
答案 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(...)