如何提高准确性并知道何时停止训练?

人工智能 卷积神经网络 分类 表现 vgg
2021-11-09 05:12:26

我正在训练一个修改后的 VGG-16 来对人群密度进行分类(空、低、中、高)。在最后 2 个 FC 层之一之后,在网络的末端添加了 2 个 dropout 层。

网络设置:

  • 训练数据包含 4381 张图像,分为 4 类(空、低、中、高),20% 的训练数据用于验证。测试数据有 2589 张图像。

  • 训练进行了 50 个 epoch。(训练验证准确度在 50 个 epoch 后下降)

  • lr=0.001,衰减=0.0005,动量=0.9

  • 损失=分类交叉熵

  • (训练、验证和测试数据)的增强:rescale=1./255,brightness_range=(0.2,0.9),horizo​​ntal_flip

使用上述设置,我得到以下结果:

  • 训练评估损失:0.59,准确率:0.77

  • 测试准确度 77.5(正确预测 2007 年,共 2589 次)

对此,我有两个担忧:

  1. 我还能做些什么来提高训练和测试的准确性吗?

  2. 我怎么知道这是否是我能得到的最佳精度?

2个回答

我还能做些什么来提高训练和测试的准确性吗?

是的,当然,如果您想尝试提高准确性,有很多方法,我可以提一下:

  • 尝试使用更复杂的模型:ResNet、DenseNet 等。
  • 尝试使用其他优化器:Adam、Adadelta 等。
  • 调整你的超参数(例如改变你的学习率、动量、重缩放因子、卷积大小、特征图的数量、时期、神经元、FC 层)
  • 尝试分析您的数据,大约 75% 和 4 个类别,是否可能有一个类别难以分类?

本质上,您必须对模型进行大量实验,直到您认为“足够了”(如果您有截止日期)。如果您没有严格的截止日期,您可以不断改进更新您的 ML 模型。

我怎么知道这是否是我能得到的最佳精度?

不,除非您将其与其他模型/超参数进行比较,否则您不能。如果你做更多的实验(就像我上面提到的那样)或者与其他人使用相同数据的实验进行比较,你会发现哪一个是最好的。例如,对于一篇学术论文,您需要比较至少 3 到 4 个相似的模型,或者用数百种不同的超参数组合进行实验。

malioboro没有提到的一种选择是获取更多数据。获得更大的数据集几乎总是可以改善训练结果。如果很难获得更多标记数据,您可以在现有数据上使用数据增强 - 在保持相同标签的同时进行小的随机转换。

对于图像,最常见的增强方法是(如果需要,应用填充):

  • 小随机放大/缩小
  • 图像的小随机变化
  • 向图像添加随机噪声
  • 亮度、对比度、色彩平衡和类似参数的小随机变化

还有更复杂的方法,但它们取决于特定的数据集/训练目标

停止:

  • 如果你发现训练错误没有减少,你应该停止训练——你已经达到(可能是本地的)最小值。
  • 如果测试或验证错误开始增加,您应该停止 - 您的方法过度拟合(在这种情况下,数据扩充会有所帮助)