我正在使用TensorFlow来训练用于手语应用程序的卷积神经网络(CNN)。 CNN必须对27个不同的标签进行分类,因此毫不奇怪,一个主要问题一直在解决过度拟合问题。我已经采取了几个步骤来完成此任务:
我收集了大量高质量的培训数据(每个标签超过5000个样本)。
我建立了一个相当复杂的预处理阶段,以帮助最大限度地提高光照条件等不变性。
我在完全连接的层上使用了辍学。
我正在将L2正则化应用于完全连接的参数。
我已经进行了广泛的超参数优化(在给定硬件和时间限制的情况下),以找出最简单的模型,该模型可以在训练数据上实现接近0%的损失。
不幸的是,即使经过所有这些步骤,我发现我无法取得比3%的测试错误更好的结果。 (这并不可怕,但是为了使应用程序可行,我需要对其进行实质性的改进。)
我怀疑过度拟合的原因在于卷积层,因为我没有在那里采取任何显式步骤进行正则化(除了使层尽可能小外)。但是基于TensorFlow提供的示例,似乎没有将正则化或辍学通常应用于卷积层。
我在网上找到的唯一一种可以防止卷积层过度拟合的方法是一种称为Stochastic Pooling的相当新的方法。不幸的是,看来TensorFlow中尚无此实现,至少目前还没有。
简而言之,是否有推荐的方法来防止在TensorFlow中实现卷积层的过度拟合?还是需要创建一个自定义的池运算符来支持随机池方法?
感谢您的指导!
最佳答案
我该如何抗衡过度拟合?
获取更多数据(或数据扩充)
辍学(请参阅paper,explanation,dropout for cnns)
DropConnect的
正则化(有关示例,请参见my masters thesis,第85页)
功能比例裁剪
全球平均池
使网络更小
早停
如何改善CNN?
托马,马丁。 “ Analysis and Optimization of Convolutional Neural Network Architectures。” arXiv预印本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个不同的标签进行分类,因此毫不奇怪,一个主要问题一直在解决过度拟合问题。
我不明白这是怎么联系的。您可以拥有数百个标签,而不会出现过度拟合的问题。