我正在尝试合并两个模型的输出,并使用keras顺序模型将它们作为第三模型的输入。型号1:
inputs1 = Input(shape=(750,)) x = Dense(500, activation='relu')(inputs1) x = Dense(100, activation='relu')(x)
型号1:
inputs2 = Input(shape=(750,)) y = Dense(500, activation='relu')(inputs2) y = Dense(100, activation='relu')(y)
型号3:
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是相应的目标。 这给了我错误,因为“列表”对象没有属性“形状” 据我们所知,这就是我们为模型提供多个输入的方式,但是这是什么错误呢?我该如何解决?
您无法使用顺序API来执行此操作。这是因为两个原因:
顺序模型,顾名思义,是一系列的层,其中每个层都直接连接到其上一层,因此它们不能具有分支(例如,合并层,多个输入/输出层,跳过连接等)。
add()顺序API的方法接受Layer实例作为其参数,而不接受Tensor实例。在您的示例中merged是张量(即连接层的输出)。
add()
Layer
Tensor
merged
此外,使用Concatenate图层的正确方法是这样的:
Concatenate
merged = Concatenate()([x, y])
但是,您也可以使用concatenate(注意小写的“ c”)等效功能接口,如下所示:
concatenate
merged = concatenate([x, y])
最后,要构建第三个模型,您还需要使用功能性API。