如何克服CNN中的过拟合 - 标准方法不起作用



我最近一直在玩斯坦福大学的汽车数据集(http://ai.stanford.edu/~jkrause/cars/car_dataset.html)。 从一开始我就遇到了过度拟合问题,所以决定:

  1. 添加正则化(L2、辍学、批处理范数等)
  2. 尝试了不同的架构(VGG16,VGG19,InceptionV3,DenseNet121等)
  3. 尝试使用在ImageNet上训练的模型进行trasnfer学习
  4. 使用的数据增强

每一步都让我向前移动了一点点。然而,我以 50% 的验证准确率(开始低于 20%)完成了,而火车准确率为 99%。

您知道我还能做些什么来达到 80-90% 左右的准确度吗?

希望这可以帮助一些人!:)

您应该尝试的操作包括:

提前停止,
  • 即使用部分数据来监控验证丢失,如果性能在某些时期没有提高,则停止训练。
  • 检查是否有不平衡的类,使用类权重来平均表示数据中的每个类。
  • 正则化参数调整:不同的 l2 系数、不同的辍学值、不同的正则化约束(例如 l1)。

其他一般建议可能是尝试在这个特定的数据集上复制最先进的模型,看看这些模型是否发挥应有的作用。
还要确保解决所有实现细节(例如,卷积是沿着宽度和高度执行的,而不是沿着通道维度执行的 - 例如,在开始使用 Keras 时,这是一个典型的新手错误)。

提供有关您正在使用的代码的更多详细信息也会有所帮助,但就目前而言,这些建议可以.
无论如何,200 类问题的 50% 准确率听起来并不那么糟糕。

干杯

对于那些遇到相同问题的人,我主要通过玩辍学、学习率和学习衰减来获得 66,11% 的准确率。

在VGG16架构上取得了最好的结果。

模型在 https://github.com/michalgdak/car-recognition

最新更新