【问题标题】:Training Loss and Validation Loss in Deep Learning深度学习中的训练损失和验证损失
【发布时间】:2018-06-21 21:44:06
【问题描述】:

请指导我如何解释以下结果?

1) 损失 验证损失

似乎训练损失总是应该小于验证损失。但是,这两种情况都发生在训练模型时。

【问题讨论】:

标签: machine-learning deep-learning


【解决方案1】:

确实是机器学习中的一个基本问题。

If validation loss >> training loss you can call it overfitting.
If validation loss  > training loss you can call it some overfitting.
If validation loss  < training loss you can call it some underfitting.
If validation loss << training loss you can call it underfitting.

您的目标是使验证损失尽可能低。 一些过度拟合几乎总是一件好事。最终重要的是:验证损失是否尽可能低。

这通常发生在训练损失相当低的时候。

同时检查how to prevent overfitting

【讨论】:

    【解决方案2】:

    在机器学习和深度学习中基本上有三种情况

    1) 欠拟合

    这是唯一一种loss>validation_loss的情况,但只是轻微的,如果loss远高于validation_loss,请贴出你的代码和数据,让我们看看

    2) 过拟合

    损失

    这意味着您的模型非常适合训练数据,但根本不适合验证数据,换句话说,它不能正确地泛化到看不见的数据

    3) 完美贴合

    损失 == 验证损失

    如果两个值最终大致相同,并且值正在收敛(绘制随时间变化的损失),那么您做对的机会非常高

    【讨论】:

    • 您的编号与 OPs 问题相反。另外,您确定“loss > validation_loss”可以被视为欠拟合吗?
    【解决方案3】:

    1) 您的模型在训练数据上的表现优于在未知验证数据上的表现。有点过拟合是正常的,但更高的量需要通过 dropout 等技术进行调节以确保泛化。

    2) 您的模型在验证数据上表现更好。当您对训练数据使用增强时,可能会发生这种情况,与未修改的验证样本相比,它更难预测。当您的训练损失计算为 1 个时期的移动平均值时,也可能发生这种情况,而验证损失是在同一时期的学习阶段之后计算的。

    【讨论】:

    • 对于损失
    • 在训练过程中,像 Keras 这样的框架会将当前的训练损失输出到控制台。损失计算为所有已处理批次的移动平均值,这意味着在早期训练阶段,当损失迅速下降时,一个时期的第一批将比最后一批具有更高的损失。当 epoch 结束时,显示的训练损失将不代表 epoch 结束时的训练损失,而是从 epoch 开始到结束的平均训练损失。因此,它通常高于完全在 epoch 结束时计算的验证损失。
    【解决方案4】:

    Aurélien Geron 向a good Twitter thread 讲述了这一现象。总结:

    • 正则化通常仅在训练期间应用,而不是在验证和测试期间应用。例如,如果您使用 dropout,则模型在训练期间可用的功能较少。
    • 训练损失是在每个 batch 之后测量的,而验证损失是在每个 epoch 之后测量的,因此平均而言,训练损失的测量时间早于 1/2 个 epoch。这意味着验证损失具有额外梯度更新的好处。
    • 验证集比训练集更容易。例如,数据增强通常会扭曲或遮挡图像的某些部分。如果您在采样期间不走运(val set 有太多简单的类或太多简单示例),或者您的 val set 太小,也会发生这种情况。或者,train 集泄漏到 val 集中。

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2018-12-27
      相关资源
      最近更新 更多