【问题标题】:Discrepancy in validation accuracy and validation loss during training训练期间验证准确性和验证损失的差异
【发布时间】:2019-01-29 05:48:30
【问题描述】:

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

 - 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.

谁能解释为什么会这样?

【问题讨论】:

  • 看起来你过拟合了。可以分享一下使用的网络架构和优化器吗?

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


【解决方案1】:

对我来说,它看起来像 过度拟合。您的训练损失接近于零,训练准确度接近 100,而验证损失和准确度跳跃。

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

通常,使用经过调整的正则化的大容量模型是一种很好的做法。

【讨论】:

    【解决方案2】:

    就像阿尔卡迪一样。 A 说,它看起来很像过拟合。这意味着您的模型记住了图像,因此您的准确性不断提高。但是在验证数据上你会得到不好的结果。

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

    如何避免:

    1. 使用强大的图像增强功能,例如 imgaug 或 augmentor。
    2. 使用 Dropout 层
    3. 为每个 epoch 计算并保存 2 个图表,一个用于训练数据准确性,一个用于验证。通常两个图表在开始时都上升,在 epoch X 之后,验证图开始跳跃或下降。这个 epoch 或 epoch-1 是你最后一个好的状态。
    4. 使用更多指标,例如 ROC AUC
    5. 使用 EarlyStop 回调和监控 val_acc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2022-10-05
      • 2019-09-06
      • 2021-09-07
      • 2020-09-04
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多