【发布时间】:2019-10-23 00:30:30
【问题描述】:
我想组合两个预训练模型(DenseNet169 和 InceptionV3),也可以是任意两个。按照以下链接中的步骤操作,但没有用。确实尝试了连接和连接,仍然出现错误。我可能在某个地方犯了一些错误。这是我的第一个 stackoverflow 问题,我们将不胜感激。 https://datascience.stackexchange.com/questions/39407/how-to-make-two-parallel-convolutional-neural-networks-in-keras 第一种情况:我尝试使用 NO pooling
model1 = DenseNet169(weights='imagenet', include_top=False, input_shape=(300,300,3))
out1 = model1.output
model2 = InceptionV3(weights='imagenet', include_top=False, input_shape=(300,300,3))
out2 = model2.output
from keras.layers import concatenate
from keras.layers import Concatenate
x = concatenate([out1, out2]) # merge the outputs of the two models
out = Dense(10, activation='softmax')(x) # final layer of the network
我收到了这个错误:
ValueError:Concatenate 层需要具有匹配形状的输入,但 concat 轴除外。得到输入形状:[(None, 9, 9, 1664), (None, 8, 8, 2048)]
第二种情况:尝试平均池化,能够连接但在训练过程中出错
model1 = DenseNet169(weights='imagenet', include_top=False, pooling='avg', input_shape=(300,300,3))
out1 = model1.output
model2 = InceptionV3(weights='imagenet', include_top=False, pooling='avg', input_shape=(300,300,3))
out2 = model2.output
x = concatenate([out1, out2]) # merge the outputs of the two models
out = Dense(10, activation='softmax')(x) # final layer of the network
model = Model(inputs=[model1.input, model2.input], outputs=[out])
model.compile(optimizer=Adam(), loss='categorical_crossentropy',metrics=['accuracy'])
history = model.fit_generator(generator=data_generator_train,
validation_data=data_generator_val,
epochs=20,
verbose=1
)
第二种情况的错误: ValueError:检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:[array([[[[0.17074525, 0.10469133, 0.08226486], [0.19852941, 0.13124999, 0.11642157], [0.36528033, 0.3213197, 0.3085095], ..., [0.19082414, 0.17801011, 0.15840226...
【问题讨论】:
标签: keras deep-learning computer-vision