在转换后的输出上训练
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(...)
我有一个循环神经网络模型,可以将 (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(...)