如何使用深度神经网络提高验证准确性?

时间:2016-05-04 07:07:31

标签: deep-learning caffe mxnet

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

2 个答案:

答案 0 :(得分:25)

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

  1. 使用权重正则化。它试图保持较低的权重,这通常会导致更好的泛化。尝试不同的正则化系数。尝试0.1,0.01,0.001,看看它们对准确性有何影响。
  2. 损坏您的输入(例如,随机替换一些黑色或白色的像素)。这样,您就可以从输入中删除信息并“强制”网络以获取重要的常规功能。尝试使用噪声系数来确定您的输入应该被破坏多少。研究表明,15%-45%范围内的任何事情都能很好地发挥作用。
  3. 扩展您的训练集。由于您正在处理图像,您可以通过旋转/缩放等现有图像来扩展您的设置(如建议的那样)。您还可以尝试预处理图像(例如,将它们映射到黑白,灰度等等,但此技术的有效性取决于您的确切图像和类别)
  4. 使用去噪标准预先训练您的图层。在此之前,您需要在微调整个网络之前单独预先训练网络的每一层。预训练“力”层以获取对重建输入信号有用的重要一般特征。例如,查看自动编码器(过去它们已应用于图像分类)。
  5. 尝试使用网络架构。您的网络可能没有足够的学习能力。尝试不同的神经元类型,层数和隐藏神经元的数量。确保尝试压缩体系结构(比输入更少的神经元)和稀疏体系结构(比输入更多的神经元)。
  6. 不幸的是,训练网络的过程很好地概括了很多实验,并且通过一些人工监督对参数空间进行了几乎蛮力的探索(你会看到很多研究工作采用这种方法)。最好为每个参数尝试3-5个值,看看它是否会引导您到达某个地方。

    当您将绘图精度/成本/ f1作为迭代次数的函数进行实验并查看其行为时。通常,您会注意到测试集的准确度达到峰值,之后会持续下降。因此,除了良好的架构,正规化,腐败等,您还需要进行大量迭代,以获得最佳结果。

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

答案 1 :(得分:2)

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

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