在 keras 中训练一个包含 2 个堆叠模型的模型

Train a model with 2 stacked models in it keras

我有以下想要训练的模型(见下图):

模型输入20,模型A输入10(初始输入的前10个元素),模型B输入10(初始输入的后10个元素)最后,模型 C 的输入是模型 A 和 B 的输出的串联。

如何在 Keras 中同时训练这 3 个模型?我可以将它合并到一个大模型中吗? (我只有训练大模型的数据)

Can I merge it in one big model?

是的!

How can I train this 3 models at the same time in Keras?

我给大家指点一下:

  1. 使用函数式 API。想知道它与顺序有何不同?看here
  2. 使用连接层 - Reference

假设您定义了三个模型,并将其命名为 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 函数将其分成两半并将其馈送到下一个网络。