卷积神经网络过度拟合。辍学没有帮助


16

我在玩卷积网络。具体来说,我使用的是kaggle cats-vs-dogs数据集,该数据集包含25000张标记为猫或狗的图像(每张图像12500张)。

我设法在测试集上实现了约85%的分类精度,但是我设定了达到90%的精度的目标。

我的主要问题是过度拟合。它总是以某种方式最终发生(通常在第8-10阶段之后)。我的网络体系结构受到VGG-16的大致启发,更具体地说,我的图像被调整为128x128x3,然后运行:

Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool    1 64x64x32   (kernel size is 2, strides is 2)
Convolution 3 64x64x64   (kernel size is 3, strides is 1)
Convolution 4 64x64x64   (kernel size is 3, strides is 1)
Max pool    2 32x32x64   (kernel size is 2, strides is 2)
Convolution 5 16x16x128  (kernel size is 3, strides is 1)
Convolution 6 16x16x128  (kernel size is 3, strides is 1)
Max pool    3 8x8x128    (kernel size is 2, strides is 2)
Convolution 7 8x8x256    (kernel size is 3, strides is 1)
Max pool    4 4x4x256    (kernel size is 2, strides is 2)
Convolution 8 4x4x512    (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)

除最后一层外,所有层均具有关联作为激活功能。

请注意,我尝试了卷积的不同组合(我从更简单的卷积开始)。

另外,我还通过镜像图像来扩充数据集,因此总共有50000张图像。

另外,我正在使用最小最大规格化对图像进行规格化,其中X是图像

X=X0/2550

该代码以tensorflow编写,批处理大小为128。

训练数据的小批量最终过度拟合,并且具有100%的准确度,而验证数据似乎在84-85%左右停止学习。

我也尝试增加/减少辍学率。

使用的优化器是AdamOptimizer,学习率为0.0001

目前,我在过去3周中一直在处理此问题,而85%的人似乎已经在我面前设置了障碍。

作为记录,我知道我可以使用迁移学习来取得更高的成绩,但是我很高兴将这个网络构建为一种自学的体验。

更新:

我正在以不同的批处理大小运行SAME网络,在这种情况下,我使用的批处理大小要小得多(从16代替128),到目前为止,我达到了87.5%的准确性(而不是85%)。也就是说,网络最终还是会过度拟合。仍然我不明白50%的退学率对您没有帮助...显然我在这里做错了。有任何想法吗?

更新2:

似乎问题与批次大小有关,例如,较小的批次(从16而不是128)与我的测试设备相比,我现在可以达到92.8%的准确度,而较小的批次仍然使网络无法适应(最终迷你批次最终(精度为100%),但损耗(误差)不断减小,并且总体上更加稳定。缺点是运行时间要慢得多,但是完全值得等待。


2
您能否提供有关过度拟合评估的更多详细信息?例如,验证准确性是否会随训练和验证结果的差异而在任何时候下降?损失函数呢?
尼尔·斯莱特

很好的问题,因此通过过度拟合,我的意思是这样的事实:火车中的迷你批次达到100%的精度和0.08的损失,而验证似乎从未低于0.35,而其精度现在仍保持在88%。根据验证,它似乎并没有下降(至少不会太大),似乎变得平坦了,但是在验证距离它还很远的情况下,小型批次如何实现如此低的损失?
胡安·安东尼奥·戈麦斯·莫里亚诺

我不知道适合您的答案,但是这种行为-训练和验证之间的巨大差异,但仍然可以实现平稳的验证-这是我几次见过的。我几乎毫不犹豫地称其为过拟合,因为有时测试结果是可以接受的。
尼尔·斯莱特

“我仍然不明白50%的学生辍学是如何无济于事的”,我看到人们成功地使用了更高的辍学价值。
里卡多·克鲁兹

Answers:


14

好的,因此,经过大量的实验,我设法获得了一些结果/见解。

首先,在一切都相等的情况下,训练集中的较小批次有助于提高网络的总体性能,但不利的一面是,训练过程要慢得多。

第二点,数据很重要,这里没有什么新鲜事物,但是正如我在解决这个问题时所了解到的那样,更多的数据似乎总是有所帮助。

第三点,在具有大量数据和大量迭代的大型网络中,dropout非常有用,在我的网络中,我仅在最终的全连接层上应用了dropout,而卷积层未应用dropout。

第四点(这是我不断学习的内容):即使在良好的GPU上,神经网络单词也需要大量训练(我在使用非常昂贵的NVIDIA卡的floydhub上训练了该网络),因此耐心是关键

最终结论:人们可能会认为批处理大小更为重要,显然,当批处理较大时,更容易达到局部最小值。

我写的代码可以作为python笔记本使用,我认为它已被很好地记录在案。

https://github.com/moriano/loco-learning/blob/master/cats-vs-dogs/cats-vs-dogs.ipynb


感谢您发布您的发现。快速提问:我也遇到类似的问题,并且在您发布的笔记本中看到了此问题:NOTE USE EITHER mean centering or min-max, NOT BOTH。我目前正在input_fn(Tensorflow Estimator API)内部将输入图像除以255 。然后,在模型内部,我通过批处理规范运行该输入。我是否仍应仅执行这些规范化之一?见github.com/formigone/tf-imagenet/blob/master/models/...
罗德里戈-西尔韦拉

我的理解是,对每个图像只能除以255,原因是将所有值保持在0到1之间,因为这样可以提供数值稳定性。
胡安·安东尼奥·戈麦斯·莫里亚诺

当然可以。但是您认为也可以批量标准化[0,1]范围内的值是否有意义?
rodrigo-silveira

自从我使用批处理规范化以来,已经有一段时间了:)
Juan Antonio Gomez Moriano

3

我建议您按照尼尔·斯莱特(Neil Slater)的建议分析验证准确性的学习图。然后,如果验证准确性下降,则尝试减小网络的大小(似乎太深了),请在CONV层和BatchNormalization的每一层之后添加辍学。它可以帮助消除过度拟合并提高测试准确性。


感谢您的建议,请尝试一下,但是我的印象是CONV层不需要退出,在我读过的大多数论文中,辍学似乎总是应用于末端完全连接的层,而不是卷积蛋白。
胡安·安东尼奥·戈麦斯·莫里亚诺

3

有几种可能的解决方案来解决您的问题。

  1. 也可以在较早的层(卷积层)中使用Dropout。

  2. 对于这样的“简单”任务,您的网络似乎有些庞大。尝试减少它。大型体系结构也要在更大的数据集上进行训练。

如果要保留“大型”架构,请尝试:

  1. 图像增强,以虚拟地增加您的训练数据

  2. 尝试对抗训练。有时会有所帮助。


“对于这样一个“简单”的任务,您的网络似乎有些庞大;请尝试减少它。大型体系结构也要在更大的数据集上进行训练。” 我不同意,因为我添加了更多的卷积,所以精度提高了(起初我只用两个卷积就达到了68%)。另外,我已经在扩充我的数据集,可以处理50000张图像。
Juan Antonio Gomez Moriano

2

还没有提到的一件事,您可以考虑将来:您仍然可以在完全连接的层上增加辍学率。

我曾经读过一篇使用90%辍学率的论文。尽管它有许多节点(如果我没记错的话,它有2048个),但我自己在节点较少的层上进行了尝试,这在某些情况下非常有用。

我只是看了一下那张纸。我不记得我只记得哪篇论文,但是我发现它们也以90%的辍学率取得了一些成功。

Karpathy,A.,Toderici,G.,Shetty,S.,Leung,T.,Sukthankar,R.,&Fei-Fei,L.(2014)。利用卷积神经网络进行大规模视频分类。在IEEE关于计算机视觉和模式识别的会议论文集(第1725-1732页)中。

Simonyan,K.和Zisserman,A.(2014年)。用于视频中动作识别的两流卷积网络。神经信息处理系统的进展(第568-576页)。

Varol,G.,Laptev,I.和Schmid,C.(2017年)。用于动作识别的长期时间卷积。IEEE关于模式分析和机器智能的事务。


0

我也有这个问题。在吃了好几个小时之后,偶然地我决定先将数据混洗,然后再将其输入到系统中,瞧,它开始起作用。我花了一点时间才知道是通过改组才成功的!希望这可以使人免于沮丧!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.