【发布时间】:2021-05-24 12:59:25
【问题描述】:
我有以下想要训练的模型(见下图):
模型的输入为 20。模型 A 的输入为 10(初始输入的前 10 个元素),模型 B 的输入为 10(初始输入的后 10 个元素),最后模型 C 的输入是模型 A 和 B 的输出的串联。
如何在 Keras 中同时训练这 3 个模型?我可以将它合并到一个大模型中吗? (我只有训练大模型的数据)
【问题讨论】:
标签: python tensorflow keras model
我有以下想要训练的模型(见下图):
模型的输入为 20。模型 A 的输入为 10(初始输入的前 10 个元素),模型 B 的输入为 10(初始输入的后 10 个元素),最后模型 C 的输入是模型 A 和 B 的输出的串联。
如何在 Keras 中同时训练这 3 个模型?我可以将它合并到一个大模型中吗? (我只有训练大模型的数据)
【问题讨论】:
标签: python tensorflow keras model
【讨论】:
假设您定义了三个模型,并命名为 model_A、model_B 和 model_C。你现在可以像这样定义你的完整模型(我没有检查确切的代码):
def complete_model(model_A, model_B, model_C):
input_1 = layers.Input(shape=(10,))
input_2 = layers.Input(shape=(10,))
model_A_output = model_A(input_1)
model_B_output = model_B(input_2)
concatenated = tf.concat([model_A_output, model_B_output], axis=-1)
model_C_output = model_C(concatenated)
model = Model(inputs=[input_1, input_2], outputs=model_C_output)
model.compile(loss=losses.MSE)
model.summary()
return model
这需要您提供二维输入,因此您必须进行一些 numpy 切片来预处理您的输入。
如果您仍然需要一维输入,您可以定义一个形状为 (20,) 的输入层,然后使用 tf.split 函数将其分成两半并将其输入下一个网络。
【讨论】: