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

时间:2017-03-18 19:06:41

标签: machine-learning neural-network deep-learning keras conv-neural-network

我正在玩Keras的cifar10示例,您可以找到here。我重新创建了模型(即,不是同一个文件,但其他一切都差不多),你可以找到它here

该模型是相同的,我训练模型30个时期,在50,000图像训练集上进行0.2验证。我无法理解我得到的结果。我的验证和测试损失小于培训的次数(相反,培训准确性与验证和测试准确性相比较低):

                      Loss       Accuracy
   Training          1.345          0.572
 Validation          1.184          0.596
       Test           1.19          0.596

Model Training and Validation loss and accuracy

看一下情节,我不确定为什么训练错误会再次开始增加。我是否需要减少我训练的时期数量或者可能实施提前停止?不同的模型架构会有帮助吗?如果是这样,会有什么好建议?

感谢。

2 个答案:

答案 0 :(得分:5)

这是一种罕见的现象,但它偶尔会发生。可能出现以下情况有几个原因:

  • 较小的数据集具有较小的内在方差,因此这意味着您的模型正确捕获数据中的模式,而列车错误更大仅仅是因为的内部差异训练集大于验证集
  • 简单意外 - 这也可能发生 - 您的拆分适合此类行为。

答案 1 :(得分:0)

Marcin的回答很好。高训练错误还有其他几个重要原因:

  • 退出。在训练中,辍学层是“打开”的,但是在进行验证和测试时,它们将被“关闭”(跳过)。这是自动的,是设计使然。辍学对训练错误有轻微的伤害。这是预料之中的。尽管存在其他培训挑战,但辍学层实际上在深度神经网络中对正则化很有帮助。大多数深度神经网络可能都使用辍学。

  • 学习率太高。就像把硬币扔进杯子里一样。摔得太重会跳出来。