我正在使用 Keras 2.1.3,并且正在尝试使用 Keras 应用程序微调 Inception Resnetv2。
所以我从 keras.applications 加载预训练模型
input_tensor = Input(shape=(299,299,3))
model = applications.inception_resnet_v2.InceptionResNetV2(weights='imagenet',
include_top=False,
input_tensor=input_tensor,
input_shape=(299, 299,3))
我为我的问题创造了瓶颈:
top_model = Sequential()
top_model.add(Flatten(input_shape=model.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(40, activation='softmax'))
最后创建一个新模型来连接这两个部分:
new_model = Sequential()
for l in model.layers:
new_model.add(l)
在这一步,我得到一个错误
ValueError:输入 0 与 conv2d_7 层不兼容:输入形状的预期轴 -1 具有值 192 但得到形状(无、35、35、64)
所以我打印了每一层的形状,我有
第 n-1 层:输入:(None, 35, 35, 64),输出:(None, 35, 35, 64)
第 n 层:输入:(None, 35, 35, 192),输出:(None, 35, 35, 48)
如您所见,形状不匹配,来自 Keras 似乎很奇怪。
编辑:
我的确切错误是
ValueError:输入 0 与 conv2d_7 层不兼容:输入形状的预期轴 -1 具有值 192 但得到形状(无、35、35、64)
model.summary() (模型是来自 Keras.applications.inception_resnet_v2.InceptionResNetV2 的模型)给我conv2d_7 层
max_pooling2d_2 (MaxPooling2D) (None, 35, 35, 192) 0 activation_5[0][0]
activation_9(激活)(无、35、35、64)0 batch_normalization_9[0][0]
conv2d_7 (Conv2D) (无, 35, 35, 48) 9216 max_pooling2d_2[0][0]
conv2d_10 (Conv2D) (None, 35, 35, 96) 55296 activation_9[0][0]