我正在使用TensorFlow为手语应用程序训练卷积神经网络(CNN) . CNN必须对27种不同的标签进行分类,因此不出所料,一个主要问题是解决过度拟合问题 . 我已经采取了几个步骤来实现这一目标:
-
我收集了大量高质量的培训数据(每个标签超过5000个样本) .
-
我已经 Build 了一个相当复杂的预处理阶段,以帮助最大化照明条件等事物的不变性 .
-
我在完全连接的图层上使用了dropout .
-
我正在将L2正则化应用于完全连接的参数 .
-
我已经进行了广泛的超参数优化(尽可能给定硬件和时间限制),以确定最简单的模型,可以在训练数据上实现接近0%的损失 .
不幸的是,即使在所有这些步骤之后,我发现我无法在3%的测试错误上获得更好的效果 . (这并不可怕,但为了使应用程序可行,我需要大幅改进 . )
我怀疑过度拟合的根源在于卷积层,因为我没有采取任何明确的步骤来规范化(除了保持层尽可能小) . 但是基于TensorFlow提供的示例,似乎不会将正则化或丢失通常应用于卷积层 .
我在网上发现的唯一一种明确处理卷积层过度拟合的方法是一种叫做Stochastic Pooling的新方法 . 不幸的是,似乎在TensorFlow中没有实现这一点,至少现在还没有 .
那么简而言之,是否有一种推荐的方法可以防止在TensorFlow中实现的卷积层过度拟合?或者是否有必要创建自定义池操作符以支持随机池方法?
谢谢你的指导!
1 回答
如何对抗过度拟合?
获取更多数据(或数据扩充)
辍学(见paper,explanation,dropout for cnns)
DropConnect
正则化(参见my masters thesis,第85页的示例)
特征尺度剪裁
全球平均合并
使网络变小
提前停止
如何改善我的CNN?
有关分析技术,请参见第2.5章 . 如该章开头所述,您通常可以执行以下操作:
(I1)更改问题定义(例如,要区分的类)
(I2)获取更多训练数据
(I3)清洁训练数据
(I4)更改预处理(参见附录B.1)
(I5)增加训练数据集(见附录B.2)
(I6)更改培训设置(参见附录B.3至B.5)
(I7)更改模型(参见附录B.6和B.7)
其他
我不明白这是如何联系的 . 您可以拥有数百个标签而不会出现过度拟合问题 .