【问题标题】:Why there is sudden drop in loss after every epoch?为什么每个时代之后损失突然下降?
【发布时间】:2019-12-06 11:48:15
【问题描述】:

我在 mini-batch 中使用自定义损失函数(triplet loss),在 epoch 期间损失逐渐减少,但在每个 epoch 之后损失突然下降(大约下降的 10%),然后在期间逐渐减少那个时代(忽略准确性)。正常吗?

对这个问题的每一个答案和参考都将不胜感激。

纪元 1/5 198/198 [==============================] - 3299s 17s/步 - 损失:0.2500 - acc: 0.0014 纪元 2/5 99/198 [==============>........] - ETA:26:16 - 损失:0.1220 - acc:0.0016

【问题讨论】:

    标签: machine-learning keras deep-learning loss-function


    【解决方案1】:

    只要一个时期内的平均损失在以后的时期内不断减少,时期内损失的波动(即运行损失)就可以了。关于为什么突然跳跃,也许它很快收敛。

    【讨论】:

    • 那么有什么可能的方法来防止它很快收敛?
    • 你可以尝试降低学习率,或者对各种学习率进行网格搜索。
    • 我使用的是 mini-batch,这意味着权重会在每批之后更新,所以如果是快速收敛的情况,那么它应该在每批之后开始快速收敛,但这并没有发生它在每个时代之后都迅速收敛。
    【解决方案2】:

    注意:此答案假设您使用的是 Keras——您可能希望将此信息添加到您的帖子中,或者至少添加一个相关标签。

    是的,这是因为显示的值是整个时期的平均值。考虑 epoch 1。在训练开始时,损失通常会很大。然后它会减少,但 epoch 1 的显示值仍将包括从平均值开始的那些大值。例如,假设一开始的损失是 0.75,然后线性下降到 0.25,直到第一个 epoch 结束;这意味着平均值为 0.5,这将是 epoch 1 显示的值。

    一旦 epoch 2 开始,平均值将被重置,并将再次计算此 epoch。让我们继续这个例子,所以在 epoch 2 开始的 loss 是 0.25,然后线性下降到 0。这意味着 epoch 2 显示的 loss 将是 0.125!然而更重要的是,它将从 0.25 开始,因此在 epoch 开始时,您将看到 epoch 1 显示的 0.5 值大幅下降。

    【讨论】:

    • 是的,我正在使用 keras,抱歉没有提及。你说的,我完全同意你的观点,但我从一开始就分析了训练,损失从 0.28 开始,在 0.24 到 0.28 之间变化,最后显示为 0.25,但是当它开始第二个时期时突然跳到 0.12必须从 0.24 到 0.28 之间的数字开始。为什么会这样?
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2020-11-04
    • 2017-12-04
    • 2023-03-20
    • 2016-08-27
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多