Keras MobileNet图像分类任务中include_top参数取值疑问
关于MobileNet中include_top参数的选择
嘿,我来帮你理清这个问题~ 根据你的图像分类需求,include_top应该设置为True,具体原因和细节我给你拆解一下:
- 明确参数含义:
include_top=True表示保留MobileNet自带的顶层全连接分类层。因为你是从头训练(weights=None),完全可以自定义classes=2来适配你的两类数据集,这正好匹配你的分类需求。 - 官方文档说明的适用场景:官方提到“input_shape仅在include_top为False时才需指定”,其实是针对使用预训练权重的情况。预训练权重是基于固定输入尺寸(比如224x224)训练的,如果
include_top=True且用预训练权重,输入尺寸必须和预训练一致,不能修改;但当你设置weights=None时,所有层的参数都会从头初始化,此时即使include_top=True,指定input_shape=(64,64,3)是完全合法的,Keras会根据你给定的输入尺寸构建适配的模型。 - 你的代码是可行的:你写的
model = MobileNet(weights=None, include_top=True, input_shape=(64, 64, 3), classes=2)完全没问题,Keras会正确创建一个输入为64x64彩色图像、输出2类分类结果的MobileNet模型,适合从头训练你的数据集。 - 如果设为False会怎样?:如果把
include_top设为False,模型会去掉顶层分类层,输出的是MobileNet提取的特征(默认是1024维的全局池化特征),这时候你需要自己手动添加后续的分类层(比如Dense(2, activation='softmax'))才能完成分类,这会多一步操作,不符合你当前直接用顶层分类层的需求。
内容的提问来源于stack exchange,提问作者Teresa K.
相关产品推荐
相关产品推荐

