用于CIFAR-10的Keras Mobile Net V1的预期验证准确性(从头开始训练)

时间:2018-09-06 18:03:22

标签: tensorflow keras deep-learning

有人使用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个周期后的预期精度?这是我的验证准确性的图。

enter image description here

2 个答案:

答案 0 :(得分:1)

Mobilenet旨在训练更大的Imagenet,因此在Cifar10上对其进行训练将不可避免地导致过拟合。我建议您从训练和验证/评估中绘制损失(而非准确性),并尝试对其进行努力训练以达到99%的训练准确性,然后观察验证损失。如果过拟合,则您会发现验证损失在达到最小值后实际上会增加。

一些减少过度拟合的方法:

  • 在完全连接的层之前添加辍学
  • 数据扩充-随机移动,修剪和旋转应足够
  • 使用较小的宽度倍增器(阅读原始论文,基本上只是减少每层过滤器的数量),例如0.75或0.5以使层更薄。
  • 使用L2权重正则化和权重衰减

然后有一些常规的训练技巧:

  • 使用学习率衰减,例如逐步或指数地将学习率从1e-2降低到1e-4

通过一些超参数搜索,我得到了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。