培训期间验证准确性和验证损失方面的差异

时间:2019-01-29 05:48:31

标签: tensorflow machine-learning keras deep-learning computer-vision

我正在用14k +图像训练我的CNN模型30个纪元,在第28个纪元,我发现异常的验证准确性和损失,如下所示:

 - 67s - loss: 0.0767 - acc: 0.9750 - val_loss: 0.6755 - val_acc: 0.8412
Epoch 27/30
 - 67s - loss: 0.1039 - acc: 0.9630 - val_loss: 0.3671 - val_acc: 0.9018
Epoch 28/30
 - 67s - loss: 0.0639 - acc: 0.9775 - val_loss: 1.1921e-07 - val_acc: 0.1190
Epoch 29/30
 - 66s - loss: 0.0767 - acc: 0.9744 - val_loss: 0.8091 - val_acc: 0.8306
Epoch 30/30
 - 66s - loss: 0.0534 - acc: 0.9815 - val_loss: 0.2091 - val_acc: 0.9433
Using TensorFlow backend.

有人能解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

在我看来,这是过度拟合。您的训练损失和准确性接近于零,而验证损失和准确性却在跳跃。

我建议您调整正则化(辍学,l2 / l1,数据增强...)或模型容量。

通常,具有经过调整的正则化的高容量模型是一个好习惯。

答案 1 :(得分:0)

像Arkady。一个说,它强烈看起来像过拟合。这意味着您的模型存储了图像,因此精度不断提高。但是在验证数据上,您会得到不好的结果。

示例:您记住2 * 8 = 16却不了解数学中乘法的实际工作原理。所以对于问题2 * 8,您给出的答案是16。但是对于2 * 9 =?你不知道答案是什么。

如何避免:

  1. 使用强大的图像增强功能,例如图像校正或增强器。
  2. 使用辍学层
  3. 为每个时期计算并保存2张图表,其中一张用于训练数据的准确性,另一张用于验证。通常,两个图表在开始时都是上升的,而在X时期之后,验证图开始跳跃或减小。这个时代或时代1是您的最后一个好状态。
  4. 使用更多指标,例如ROC AUC
  5. 通过监控val_acc使用EarlyStop回调