为啥损失减少但准确性也降低(Pytorch,LSTM)?

Posted

技术标签:

【中文标题】为啥损失减少但准确性也降低(Pytorch,LSTM)?【英文标题】:Why does loss decrease but accuracy decreases too (Pytorch, LSTM)?为什么损失减少但准确性也降低(Pytorch,LSTM)? 【发布时间】:2020-04-20 14:51:36 【问题描述】:

我已经使用 LSTM - Pytorch 中的线性模块构建了一个模型,用于分类问题(10 类)。我正在训练模型,并且对于每个 epoch,我都会在 training set 中输出 lossaccuracy。输出如下:

纪元:0 开始! 损失:2.301875352859497 账号:0.11388888888888889 纪元:1 开始! 损失:2.2759320735931396 累积:0.29 纪元:2 开始! 损失:2.2510263919830322 账号:0.4872222222222222 纪元:3 开始! 损失:2.225804567337036 账号:0.6066666666666667 纪元:4 开始! 损失:2.199286699295044 账号:0.6511111111111111 纪元:5 开始! 损失:2.1704766750335693 累计:0.6855555555555556 纪元:6 开始! 损失:2.1381614208221436 账号:0.7038888888888889 纪元:7 开始! 损失:2.1007182598114014 账号:0.7194444444444444 纪元:8 开始! 损失:2.0557992458343506 账号:0.7283333333333334 纪元:9 开始! 损失:1.9998993873596191 账号:0.7427777777777778 纪元:10 开始! 损失:1.9277743101119995 账号:0.7527777777777778 纪元:11 开始! 损失:1.8325848579406738 账号:0.7483333333333333 纪元:12 开始! 损失:1.712520718574524 账号:0.7077777777777777 纪元:13 开始! 损失:1.6056485176086426 账号:0.6305555555555555 纪元:14 开始! 损失:1.5910680294036865 账号:0.4938888888888889 纪元:15 开始! 损失:1.6259561777114868 累计:0.41555555555555557 纪元:16 开始! 损失:1.892195224761963 账号:0.3655555555555556 纪元:17 开始! 损失:1.4949012994766235 帐号:0.47944444444444445 纪元:18 开始! 损失:1.4332982301712036 账号:0.48833333333333334

对于损失函数,我使用了 nn.CrossEntropyLoss 和 Adam Optimizer。 尽管损失在不断减少,但准确度会一直提高到 epoch 10,然后由于某种原因开始下降。

为什么会这样?

即使我的模型是过拟合的,那不是说准确率应该很高吗?? (总是说在训练集而不是验证集上测量的准确性和损失)

【问题讨论】:

【参考方案1】:

减少损失并不意味着总是提高准确性。 我将尝试解决交叉熵损失的问题。

CE-loss= sum (-log p(y=i))

请注意,如果正确分类的概率增加,损失会减少,如果正确分类的概率减少,损失会增加。现在,当您计算平均损失时,您正在对所有样本进行平均,一些概率可能会增加,而其中一些可能会减少,从而使整体损失更小,但准确性也会下降。

【讨论】:

以上是关于为啥损失减少但准确性也降低(Pytorch,LSTM)?的主要内容,如果未能解决你的问题,请参考以下文章

神经网络 - Softmax 交叉熵损失减少对应于准确性降低

火车损失正在减少,但准确度保持不变

Tensorflow:损失减少,但准确度稳定

GAN - 生成器损失减少,但鉴别器假损失在初始下降后增加,为啥?

为啥尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0

验证损失不断减少,而训练损失在 3 个 epoch 后开始增加