Keras 顺序模型的多个输入
Multiple inputs to Keras Sequential model
我正在尝试合并两个模型的输出,并使用 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 是相应的目标。
这给我错误,因为 'list' object has no attribute 'shape' 据了解,这是我们为模型提供多个输入的方式,但这个错误是什么?我该如何解决?
您不能使用顺序 API 执行此操作。这是因为两个原因:
序列模型,顾名思义,是一系列层,其中每一层都直接连接到它的前一层,因此它们不能有分支(例如合并层,多个 input/output层、跳过连接等)。
Sequential API 的 add()
方法接受 Layer
实例作为其参数,而不是 Tensor
实例。在你的例子中 merged
是张量(即连接层的输出)。
另外,Concatenate
图层的正确使用方法是这样的:
merged = Concatenate()([x, y])
不过,你也可以使用concatenate
(注意小写"c"),它的等效函数接口,像这样:
merged = concatenate([x, y])
最后,为了能够构建第三个模型,您还需要使用 functional API。
我正在尝试合并两个模型的输出,并使用 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 是相应的目标。
这给我错误,因为 'list' object has no attribute 'shape' 据了解,这是我们为模型提供多个输入的方式,但这个错误是什么?我该如何解决?
您不能使用顺序 API 执行此操作。这是因为两个原因:
序列模型,顾名思义,是一系列层,其中每一层都直接连接到它的前一层,因此它们不能有分支(例如合并层,多个 input/output层、跳过连接等)。
Sequential API 的
add()
方法接受Layer
实例作为其参数,而不是Tensor
实例。在你的例子中merged
是张量(即连接层的输出)。
另外,Concatenate
图层的正确使用方法是这样的:
merged = Concatenate()([x, y])
不过,你也可以使用concatenate
(注意小写"c"),它的等效函数接口,像这样:
merged = concatenate([x, y])
最后,为了能够构建第三个模型,您还需要使用 functional API。