Keras cifar10 示例验证和测试损失低于训练损失

问题描述 投票:0回答:2

我正在使用 Keras 的 cifar10 示例,您可以在这里找到它。我已经重新创建了模型(即,不是相同的文件,但其他所有内容几乎相同),您可以在here找到它。

模型是相同的,我在 50,000 个图像训练集上使用 0.2 验证分割训练模型 30 个时期。我无法理解我得到的结果。我的验证和测试损失小于训练损失(相反,训练准确性低于验证和测试准确性):

                      Loss       Accuracy
   Training          1.345          0.572
 Validation          1.184          0.596
       Test           1.19          0.596

看看这个图,我不确定为什么训练误差再次开始如此严重地增加。我是否需要减少训练的 epoch 数量或者实施提前停止?不同的模型架构会有帮助吗?如果可以的话,有什么好的建议吗?

machine-learning neural-network deep-learning keras conv-neural-network
2个回答
10
投票

这是一种罕见的现象,但时有发生。造成这种情况的原因有多种:

  • 较小的数据集具有较小的内在方差,因此这意味着您的模型可以正确捕获数据内部的模式,并且训练误差更大,因为训练集的内部方差大于验证集
  • 简单的意外 - 这也可能发生 - 你的分裂适合这种行为。

3
投票

Marcin 的回答很好。训练误差过高还有另外几个重要原因:

  • 辍学。 Dropout 层在训练中“打开”,但在进行验证和测试时将“关闭”(跳过)。这是自动的并且是设计使然的。 Dropout 对训练误差有轻微影响。这是可以预料的。尽管存在额外的训练挑战,但 Dropout 层实际上有助于深度神经网络的正则化。大多数深度神经网络可能使用 dropout。

  • 学习率太高。这就像将一枚硬币扔进玻璃杯中一样。扔得太用力它会跳出来。

© www.soinside.com 2019 - 2024. All rights reserved.