防止CNN卷积层过度拟合

时间:2016-03-21 19:33:26

标签: tensorflow conv-neural-network

我正在使用TensorFlow为手语应用程序训练卷积神经网络(CNN)。 CNN必须对27种不同的标签进行分类,因此不出所料,一个主要问题是解决过度拟合问题。我已经采取了几个步骤来实现这一目标:

  1. 我收集了大量高质量的培训数据(每个标签超过5000个样本)。
  2. 我已经建立了一个相当复杂的预处理阶段,以帮助最大限度地提高照明条件等方面的不变性。
  3. 我在完全连接的图层上使用了dropout。
  4. 我正在将L2正则化应用于完全连接的参数。
  5. 我已经做了大量的超参数优化(尽可能给定硬件和时间限制),以确定最简单的模型,可以在训练数据上实现接近0%的损失。
  6. 不幸的是,即使经过所有这些步骤,我发现我无法在3%的测试错误上取得更好的效果。 (这并不可怕,但为了使应用程序可行,我需要大幅改进。)

    我怀疑过度拟合的根源在于卷积层,因为我没有采取任何明确的步骤来规范化(除了保持层尽可能小)。但是根据TensorFlow提供的示例,似乎不会将正则化或丢失通常应用于卷积层。

    我在网上发现的唯一一种明确涉及防止卷积层过度拟合的方法是一种称为Stochastic Pooling的新方法。不幸的是,似乎在TensorFlow中没有实现这一点,至少现在还没有。

    简而言之,是否有建议的方法来防止在TensorFlow中实现的卷积层过度拟合?或者是否有必要创建一个自定义池操作符来支持随机池方法?

    感谢任何指导!

1 个答案:

答案 0 :(得分:14)

我如何对抗过度拟合?

如何改善我的CNN?

  托马,马丁。 “Analysis and Optimization of Convolutional Neural Network Architectures”。 arXiv preprint arXiv:1707.09725(2017)。

有关分析技术,请参阅第2.5章。如该章开头所述,您通常可以执行以下操作:

  • (I1)更改问题定义(例如,要区分的类)
  • (I2)获取更多培训数据
  • (I3)清洁训练数据
  • (I4)更改预处理(参见附录B.1)
  • (I5)增加训练数据集(见附录B.2)
  • (I6)更改培训设置(参见附录B.3至B.5)
  • (I7)更改模型(参见附录B.6和B.7)

其它

  

CNN必须对27种不同的标签进行分类,所以不出所料,一个主要问题是解决过度拟合问题。

我不明白这是如何联系的。您可以拥有数百个标签而不会出现过度拟合问题。