14

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

4

2 回答 2

42

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

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

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

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

还有一个提示:确保每个训练时期随机化图像的顺序。

于 2016-05-04T09:34:43.477 回答
3

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

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

于 2016-05-04T08:10:45.320 回答