【发布时间】:2019-08-29 11:58:14
【问题描述】:
我想使用在 ImageNet 上预训练的 MobileNet 模型进行特征提取。我正在加载模型如下:
from keras.applications.mobilenet import MobileNet
feature_model = MobileNet(include_top=False, weights='imagenet', input_shape=(200, 200, 3))
Keras 手册clearly says 这个输入形状是有效的:
input_shape:可选的形状元组,仅当 include_top 为 False 时才指定(否则输入形状必须为 (224, 224, 3)(使用 'channels_last' 数据格式)或 (3, 224, 224)(使用'channels_first' 数据格式)。它应该恰好有 3 个输入通道,并且宽度和高度不应小于 32。例如 (200, 200, 3) 将是一个有效值。
但是,我收到以下错误消息:
ValueError:如果正在加载 imagenet 权重,则输入必须具有静态方形((128, 128)、(160, 160)、(192, 192) 或 (224, 224) 之一)。提供的输入形状 = (200, 200, 3)
如果我指定include_top=False,为什么它要求输入形状与训练时的形状相匹配?
Keras:2.2.4,TensorFlow:1.13.1
【问题讨论】:
-
输入形状 (200,200,3) 仅在 weights=None 时有效,您可以指定 include_top true 或 false。对于预训练的权重,imagenet 仅适用于列出的形状。
-
使用
include_top=False,模型仅包含卷积层(无 FC 层)。为什么它仅限于这些形状?例如。我可以使用任意输入形状加载 VGG16 模型,即使它是在 ImageNet 上以 (224,224,3) 的形状进行训练的
标签: python tensorflow keras deep-learning