Tensorflow CIFAR-10 Keras Mobile Net V1的预期验证精度(从头开始培训)

Tensorflow CIFAR-10 Keras Mobile Net V1的预期验证精度(从头开始培训),tensorflow,keras,deep-learning,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 firs

是否有人使用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和batch size=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
我想我应该得到至少75%的回报 是我做错了什么,还是这是100个时代后的预期准确性。这是我的验证准确性图


Mobilenet设计用于训练更大的Imagenet,因此在Cifar10上训练它将不可避免地导致过度拟合。我建议您绘制培训和验证/评估中的损失(而非准确度),并努力进行培训,以达到99%的培训准确率,然后观察验证损失。如果是过度拟合,您将看到验证损失在达到最小值后实际上会增加

尝试减少过度装配的几点措施:

  • 在完全连接层之前添加辍学
  • 数据扩充-随机移位、裁剪和轮换就足够了
  • 使用较小的宽度倍增器(读取原始纸张,基本上只是减少每层的过滤器数量),例如0.75或0.5,使层变薄
  • 使用L2权重正则化和权重衰减
还有一些常见的训练技巧:

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

通过超参数搜索,我得到了0.85的评估损失。我没有使用Keras,我自己使用Tensorflow编写了Mobilenet。

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

尝试减少过度装配的几点措施:

  • 在完全连接层之前添加辍学
  • 数据扩充-随机移位、裁剪和轮换就足够了
  • 使用较小的宽度倍增器(读取原始纸张,基本上只是减少每层的过滤器数量),例如0.75或0.5,使层变薄
  • 使用L2权重正则化和权重衰减
还有一些常见的训练技巧:

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

通过超参数搜索,我得到了0.85的评估损失。我没有使用Keras,我自己使用Tensorflow编写了Mobilenet。

OP询问了Mobilenet v1。由于MobileNetv2已经发布,以下是关于在CIFAR-10上培训MobileNetv2的更新-

1) MobileNetv2主要用于初始图像分辨率为224x224的ImageNet。它有5个卷积运算,步长为2。因此,GlobalAvgPool2D(倒数第二层)获得Cx7x7的特征映射,其中C是过滤器的数量(对于MobileNetV2为1280)

2) 对于CIFAR10,我将前三层中的步幅更改为1。因此,GlobalAvgPool2D将获得Cx8x8的特征映射。其次,我在宽度参数上使用0.25进行训练(影响网络的深度)。我在mxnet()中接受了混音训练。这使我的验证精度达到93.27

3) 另一个似乎适用于CIFAR-10的MobileNetV2实现在此处提供- 报告的准确度为94.43。此实现将前两个原始层中的步长更改为步长1,这两个原始层将分辨率降低为步长1。它使用了ImageNet使用的通道的全宽


4) 此外,我在CIFAR-10上使用mixup训练了一个MobileNetV2,同时只将第一个conv层中的步幅从2更改为1,并使用了完整的深度(宽度参数==1.0)。因此,GlobalAvgPool2D(倒数第二层)获得了Cx2x2的特征图。这使我得到了92.31的准确度。

OP询问了MobileNetv1。由于MobileNetv2已经发布,以下是关于在CIFAR-10上培训MobileNetv2的更新-

1) MobileNetv2主要用于初始图像分辨率为224x224的ImageNet。它有5个卷积运算,步长为2。因此,GlobalAvgPool2D(倒数第二层)获得Cx7x7的特征映射,其中C是过滤器的数量(对于MobileNetV2为1280)

2) 对于CIFAR10,我将前三层中的步幅更改为1。因此,GlobalAvgPool2D将获得Cx8x8的特征映射。其次,我在宽度参数上使用0.25进行训练(影响网络的深度)。我在mxnet()中接受了混音训练。这使我的验证精度达到93.27

3) 另一个似乎适用于CIFAR-10的MobileNetV2实现在此处提供- 报告的准确度为94.43。此实现将前两个原始层中的步长更改为步长1,这两个原始层将分辨率降低为步长1。它使用了ImageNet使用的通道的全宽


4) 此外,我在CIFAR-10上使用mixup训练了一个MobileNetV2,同时只将第一个conv层中的步幅从2更改为1,并使用了完整的深度(宽度参数==1.0)。因此,GlobalAvgPool2D(倒数第二层)获得了Cx2x2的特征图。这使我的准确度达到92.31。

谢谢,这非常有用。此外:用步幅1(32通道卷积)替换第一个步幅2卷积将验证结果的准确度提高到92%。谢谢,这非常有用。此外:用步幅1(32通道卷积)替换第一个步幅2卷积将结果提高到92%