【问题标题】:How to increase validation accuracy with deep neural net?如何使用深度神经网络提高验证准确性?
【发布时间】:2016-08-29 11:30:53
【问题描述】:

我正在尝试构建一个包含 13000 个训练图像和 3000 个验证图像的 11 类图像分类器。我正在使用正在使用 mxnet 进行训练的深度神经网络。训练准确率正在增加并达到 80% 以上,但验证准确率在 54-57% 范围内,并且没有增加。 这里可能是什么问题?我应该增加图片数量吗?

【问题讨论】:

  • 验证准确率是否逐步提高,直到固定在 54-57%。还是从一开始就几乎一样?
  • 没有验证准确率在逐步提高,然后固定在 54-57%
  • 你是如何计算训练准确度的?您是否为您训练的每个批次计算了它?还是针对整个训练集?

标签: deep-learning caffe mxnet


【解决方案1】:

这里的问题是,您的网络在某些时候停止学习有用的一般特征,并开始适应您的训练集的特殊性(结果过度拟合)。您想“强制”您的网络继续学习有用的功能,但您在这里几乎没有选择:

  1. 使用权重正则化。它试图保持较低的权重,这通常会导致更好的泛化。尝试不同的正则化系数。试试 0.1、0.01、0.001,看看它们对准确性的影响。
  2. 破坏您的输入(例如,用黑色或白色随机替换一些像素)。通过这种方式,您可以从输入中删除信息并“强制”网络获取重要的一般特征。尝试使用噪声系数来确定应该损坏多少输入。研究表明,15% - 45% 范围内的任何值都可以正常工作。
  3. 扩展您的训练集。由于您正在处理图像,因此您可以通过旋转/缩放等现有图像(如建议的那样)来扩展您的集合。您还可以尝试对图像进行预处理(例如,将它们映射为黑白、灰度等,但这种技术的有效性将取决于您的确切图像和类别)
  4. 使用去噪标准预训练您的图层。在微调整个网络之前,您可以在此处单独预训练网络的每一层。预训练“强制”层获取对重建输入信号有用的重要一般特征。以自动编码器为例(过去曾将它们应用于图像分类)。
  5. 网络架构实验。您的网络可能没有足够的学习能力。尝试不同的神经元类型、层数和隐藏神经元的数量。请务必尝试压缩架构(神经元少于输入)和稀疏架构(神经元多于输入)。

不幸的是,泛化良好的训练网络过程涉及大量实验和对参数空间的近乎蛮力探索,需要人工监督(您会看到许多研究工作都采用这种方法)。最好为每个参数尝试 3-5 个值,看看它是否会引导您到达某个地方。

当您将绘图精度/成本/f1 作为迭代次数的函数进行实验时,看看它的表现如何。通常,您会注意到测试集的准确度达到峰值,然后持续下降。因此,除了良好的架构、正则化、损坏等之外,您还需要大量迭代以产生最佳结果。

另一个提示:确保每个训练 epoch 随机化图像的顺序。

【讨论】:

  • 感谢您的回答。我正在使用 0.0001 的权重正则化。现在,我应该从一开始就使用不同的值重新训练模型,还是使用在某个时期保存的具有更改的正则化值的模型继续训练。我将尝试一些事情并使用一些参数值,我还将增加我的训练图像。
  • 从一开始就尝试不同的值,不要使用保存的模型。并尝试更大的正则化系数值:0.001、0.01、0.1。
  • 我试过 0.001 但现在模型没有收敛。最近 10 个 epoch 的模型试验和验证准确率在 9-10% 之间。我也在我的神经网络中使用 dropout,这是一种正则化。
【解决方案2】:

这显然看起来像是模型过度拟合训练集的情况,因为验证准确性正在逐步提高,直到它固定在特定值。如果学习率再高一点,您最终会看到验证准确度下降,而训练集的准确度会提高。

增加训练集的数量是解决这个问题的最佳方案。您还可以尝试对现有图像集应用不同的转换(翻转、裁剪随机部分从稍大的图像),看看模型是否学习得更好。

【讨论】:

  • 我认为高学习率的训练精度也会降低。我已经确认了。但是,是的,这是一种过度拟合的情况,我只是想知道为什么会发生这种情况,因为我自己选择了每张图像,如果它可以准确地识别训练图像,它也应该以同样的准确度识别验证图像。训练和验证图像非常相似。
  • 假设训练和验证图像“非常相似”是解释事物的模糊想法。尝试保持完全相同的训练图像进行验证怎么样?这是否提供与训练相同的准确性?
猜你喜欢
  • 2022-11-07
  • 2018-01-10
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2016-08-02
  • 2017-08-05
相关资源
最近更新 更多