我正在尝试使用Keras的MobileNet进行图像分类。我的输入形状是(64, 64, 3)
,我的数据集中有两个类。我不想使用训练过的砝码。
这是我的代码。
model = MobileNet(weights=None, include_top=True, input_shape=(64, 64, 3), classes=2)
我的问题是,include_top
应该是True
还是False
?
自官方表示,
input_shape:可选的形状元组,仅在include_top为False时指定
include_top:是否在网络顶部包含完全连接的图层。
我想进行图像分类,所以我认为我的最后一层应该是完全连接的。这是对的吗?
谢谢。
答案 0 :(得分:2)
如果你想传递(64,64,3)的输入形状,那么你需要
include_top=False
是的,你最后需要完全连接的层。你必须建立自己的网络顶部。你的模型将是这样的
base_model= MobileNet(weights=None, include_top=False, input_shape=(64, 64, 3))
x=base_model.output
x=Flatten()(x)
x=Dense(...)(x)
.
.
# Softmax layer for classification
predictions=Dense(2,activation='softmax')
model=(x=base_model.input,output=predictions)
我不知道为什么我们需要删除完全连接的图层以更改input_shape,但我认为上述解决方案可以正常工作
修改强>
如果input_shape不同,为什么要将include_top设置为False?
因为它会在最后将输入大小更改为完全连接的图层 有关详细说明,请参阅this答案