在转换后的输出上训练

Train on transformed output

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

编辑:我还应该注意到,执行从 (N,N)(N,3) 的反向函数要困难得多,因此将我的目标输出转换为 [=11 并不是一个可行的选择=] 输出表示。

您可以使用 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-native 方法”以避免不必要的张量与 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(...)