【问题标题】:Train a model with 2 stacked models in it keras训练一个模型,其中包含 2 个堆叠模型 keras
【发布时间】:2021-05-24 12:59:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: python tensorflow keras model


    【解决方案1】:

    我可以将它合并到一个大模型中吗?

    是的!

    如何在 Keras 中同时训练这 3 个模型?

    我给你指点:

    1. 使用功能性 API。想知道它与顺序有什么不同吗?看here
    2. 使用连接层 - Reference

    【讨论】:

    • 我如何将模型 A 和 B 的输入分成 2?
    • 既然你在图中提到了“前10”和“后10”,你可以简单地使用list/ndarray/tensor切片操作吗?
    • 我刚刚在这里找到了一个方法medium.datadriveninvestor.com/… 非常感谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多