【发布时间】:2016-07-08 11:45:06
【问题描述】:
我正在使用 TensorFlow 为手语应用训练卷积神经网络 (CNN)。 CNN 必须对 27 个不同的标签进行分类,因此不出所料,一个主要问题是解决过拟合问题。我已经采取了几个步骤来实现这一点:
- 我收集了大量高质量的训练数据(每个标签超过 5000 个样本)。
- 我构建了一个相当复杂的预处理阶段,以帮助最大限度地保持光照条件等因素的不变性。
- 我在全连接层上使用 dropout。
- 我正在对全连接参数应用 L2 正则化。
- 我已经进行了广泛的超参数优化(在硬件和时间限制的情况下尽可能),以确定可以实现接近 0% 的训练数据损失的最简单模型。
不幸的是,即使经过了所有这些步骤,我发现我仍然无法达到 3% 左右的测试错误。 (这并不可怕,但要使应用程序可行,我需要对其进行大幅改进。)
我怀疑过度拟合的根源在于卷积层,因为我没有采取任何明确的步骤来规范化(除了保持层尽可能小)。但根据 TensorFlow 提供的示例,似乎正则化或 dropout 通常不会应用于卷积层。
我在网上找到的唯一一种明确处理防止卷积层过度拟合的方法是一种相当新的方法,称为Stochastic Pooling。不幸的是,TensorFlow 中似乎没有实现这一点,至少现在还没有。
那么简而言之,有没有推荐的方法来防止在 TensorFlow 中实现的卷积层过拟合?或者是否有必要创建一个自定义池化算子来支持随机池化方法?
感谢您的指导!
【问题讨论】:
-
Tensorflow 确实有用于 conv 层的最大池和平均池 link
-
感谢您的回复,shekkizh。我目前正在使用最大池。我当然不是机器学习方面的专家,但我不相信最大池化或平均池化有助于减少过度拟合,因为它们都是确定性的。随机池化是一种将随机性引入操作的新颖想法。链接的论文详细讨论了它,但我认为要点是随机选择激活来模拟数据增强,从而减少过度拟合的机会。
-
请考虑this paper (network in network) 的第 3.2 节。可能是过度拟合的全连接层。卷积层中的共享权重已经是一个强大的调节器。
-
感谢 user728291 - 这非常有帮助。非常有趣的论文——尽管我缺乏充分理解它所必需的一些背景知识,但我试图完整地阅读它。无论如何,我实际上已经对 L2 正则化和 dropout 进行了相当多的调整,但没有取得多大成功。我开始认为问题实际上可能是我的训练数据太完美了。我有大量的训练数据,但都是在相当“无菌”的条件下收集的。
-
您绝对应该尝试对卷积过滤器中的权重进行某种归一化。根据我的经验,它似乎比全连接层更需要。
标签: tensorflow conv-neural-network