首页 > 解决方案 > 使用预训练 Inceptionv3 的 Keras 问题

问题描述

我在 Keras 中使用带有 imagenet 权重的 InceptionV3。我使用的 Keras 版本是 2.2.4,Keras-applications 是 1.0.8。张量流版本是 1.14.0。我遵循使用 InceptionV3 进行迁移学习的标准方法,如此处所述。我收到此错误ValueError: Input 0 is incompatible with layer global_average_pooling2d_3: expected ndim=4, found ndim=2。我发现了一个 GitHub帖子,用户遇到了同样的问题。我遵循了在 GitHub 帖子上解决问题的建议,但我没有这样的运气。MWE在下面

from keras.layers import Input, Dense, Activation, GlobalAveragePooling2D
from keras.models import Model
from keras.applications.inception_v3 import InceptionV3

base_model = InceptionV3(weights='imagenet', include_top='False')

x = base_model.output
x = GlobalAveragePooling2D()(x) # Error appears here
x = Dense(1024, activation='relu')(x)
predictions = Dense(3, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)

标签: pythontensorflowkeras

解决方案


原因是您将字符串 'False'传递给include_top. 非空字符串的计算结果为True,因此您认为的无上装模型实际上完全装饰有降维平均池和全连接层。

因此,解决您的问题的一种方法是更改'False'​​为False. 但是,我要补充一点,您可以只指定pooling='avg',因此您只需添加最后Dense一层...


推荐阅读