有人使用CIFAR-10从零开始培训Mobile Net V1吗?您获得的最大精度是多少? 110个纪元后,我陷入了70%的困境。这是我创建模型的方式。但是,我的训练准确性超过99%。
#create mobilenet layer
MobileNet_model = tf.keras.applications.MobileNet(include_top=False, weights=None)
# Must define the input shape in the first layer of the neural network
x = Input(shape=(32,32,3),name='input')
#Create custom model
model = MobileNet_model(x)
model = Flatten(name='flatten')(model)
model = Dense(1024, activation='relu',name='dense_1')(model)
output = Dense(10, activation=tf.nn.softmax,name='output')(model)
model_regular = Model(x, output,name='model_regular')
我使用了LR = 0.001,amsgrad = True和批处理大小= 64的Adam优化器。还通过除以255.0归一化了像素数据。我没有使用任何数据增强。
optimizer1 = tf.keras.optimizers.Adam(lr=0.001, amsgrad=True)
model_regular.compile(optimizer=optimizer1, loss='categorical_crossentropy', metrics=['accuracy'])
history = model_regular.fit(x_train, y_train_one_hot,validation_data=(x_test,y_test_one_hot),batch_size=64, epochs=100) # train the model
根据https://arxiv.org/abs/1712.04698,我认为我应该至少达到75% 我做错了什么吗?还是100个周期后的预期精度?这是我的验证准确性的图。
答案 0 :(得分:1)
Mobilenet旨在训练更大的Imagenet,因此在Cifar10上对其进行训练将不可避免地导致过拟合。我建议您从训练和验证/评估中绘制损失(而非准确性),并尝试对其进行努力训练以达到99%的训练准确性,然后观察验证损失。如果过拟合,则您会发现验证损失在达到最小值后实际上会增加。
一些减少过度拟合的方法:
然后有一些常规的训练技巧:
通过一些超参数搜索,我得到了0.85的评估损失。我没有使用Keras,而是使用Tensorflow自己编写了Mobilenet。
答案 1 :(得分:1)
OP询问了MobileNetv1。由于MobileNetv2已发布,因此这里是有关在CIFAR-10上培训MobileNetv2的更新-
1)MobileNetv2主要经过调整,可以在ImageNet上工作,初始图像分辨率为224x224。它具有5个步幅为2的卷积运算。因此,GlobalAvgPool2D(倒数第二层)获得了Cx7x7的特征图,其中C是过滤器的数量(MobileNetV2为1280)。
2)对于CIFAR10,我将这些层的前三步的步幅更改为1。因此,GlobalAvgPool2D获得了Cx8x8的特征图。其次,我用0.25训练了width参数(影响网络的深度)。我在mxnet(https://gluon-cv.mxnet.io/model_zoo/classification.html)中进行了混合训练。这使我的验证精度为93.27。
3)此处提供了另一个适用于CIFAR-10的MobileNetV2实现方案-PyTorch-CIFAR 报告的准确性为94.43。此实现将原始层的前两步的步长更改为将步长降低到步长1的原始步长。它使用ImageNet所使用的通道的整个宽度。
4)此外,我在CIFAR-10上使用混合训练了MobileNetV2,同时仅将第一转换层的步幅从2更改为1,并使用了完整的深度(宽度参数== 1.0)。因此,GlobalAvgPool2D(倒数第二层)获得了Cx2x2的特征图。这使我的精度为92.31。