Keras顺序模型的多个输入

时间:2018-10-26 22:48:44

标签: python tensorflow keras sequential

我正在尝试合并两个模型的输出,并使用keras顺序模型将它们作为第三模型的输入。 型号1:

inputs1 = Input(shape=(750,))
x = Dense(500, activation='relu')(inputs1)
x = Dense(100, activation='relu')(x)

Model1:

inputs2 = Input(shape=(750,))
y = Dense(500, activation='relu')(inputs2)
y = Dense(100, activation='relu')(y)

Model3:

merged = Concatenate([x, y])
final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(100, activation='relu'))
final_model.add(Dense(3, activation='softmax'))

直到这里,我的理解是,来自两个模型的输出x和y被合并并作为第三模型的输入。但是当我很喜欢这一切时,

module3.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
module3.fit([in1, in2], np_res_array)

in1和in2是尺寸为10000 * 750的两个numpy ndarray,其中包含我的训练数据,而np_res_array是相应的目标。
由于“列表”对象没有属性“ shape”,因此出现了错误< / strong>据我们所知,这就是我们如何为模型提供多个输入,但是这是什么错误呢?我该如何解决?

1 个答案:

答案 0 :(得分:2)

您不能使用顺序API来执行此操作。这是由于两个原因:

    顾名思义,
  1. 顺序模型是一系列的层,其中每个层都直接连接到其上一层,因此它们不能具有分支(例如合并层,多个输入/输出层,跳过连接等) )。

  2. Sequential API的add()方法接受一个Layer实例作为其参数,而不接受Tensor实例。在您的示例中,merged是张量(即连接层的输出)。

此外,使用Concatenate层的正确方法如下:

merged = Concatenate()([x, y])

但是,您也可以使用concatenate(注意小写的“ c”),它是等效的功能接口,如下所示:

merged = concatenate([x, y])

最后,要构建第三个模型,您还需要使用functional API