Python-loss和acc曲线分析

本文分析了深度学习中loss和accuracy的常见问题,如val_loss和val_acc一起上升、loss下降但acc低不提高等。讨论了这些问题的原因,如样本分布不均、过拟合等,并提供了相应的解决方法,如增加训练样本、正则化、早停机制、调整优化器等。同时强调了验证集和测试集在模型评估中的重要性。
摘要由CSDN通过智能技术生成

目录

 

 

目录

1、简介

2、不同情况的分析

val_loss和val_acc一起上升

loss一直下降,acc低且不提高

train_loss不下降的解决方法

val_loss不下降的解决方法

test_loss不下降的解决方法

验证集作用

3、总结



1、简介

最近学习代码,在打印loss和acc曲线的时候,发现了一些问题(val_loss先下降后上升,val_acc变化同val_loss。。。)。而正确的情况应该是:一个好的loss的定义应该使得模型在训练集上随着loss的下降accuracy渐渐提高

2、不同情况的分析

val_loss和val_acc一起上升

深度学习中loss和accuracy的关系?

【loss和acc关系】

交叉熵是(负的)模型输出正确标签的似然度对数。和准确度有一定关系,但交叉熵的取值范围很大。有可能损失上升准确度也上升,毕竟准确度只是看预测概率最高的那个标签。准确度和交叉熵会出现以下情况:

  • 如果正确标签的概率降低,但这个标签依然是概率最高的,会出现损失增加单准确度不变的结果。
  • 如果数据集的标签很不平均,比如90%是类别A,那么模型一味增加预测A的比例,可能会让准确度上升,但loss可能也会以更大幅度上升(cross entropy的幅度可以很大)
  • 如果模型非常自信,大多数正确标签的概率都接近1,那如果出现一个错误,准确率可能只会降低很少,但交叉熵可能会非常高。
    • 模型在回答错误的example上过于自信,导致一个错误的loss拉高了所有正确的loss

【可能是样本分布有问题,而非过拟合】

假设一个二分类问题,对于一个样本,你的模型的输出的概率(0.6,0.4) vs (0.99, 0.01),假设正确的label是第一个,两者的accuracy是一样的,但是loss明显后者更小。

  • loss上升,但是accuracy也跟着上升,这时候可能是你的模型对于某些label的输出的confidence降低,但是在其他label的预测上得到了补偿。这种情况下,我认为不属于overfitting,但是dev set的样本分布可能有skew,可以观察一下

验证集loss上升,准确率却上升该如何理解?+验证集精确度和损失同时上升

【验证集最高准确率出现在验证集loss下降后再上升的+区间内,这是怎样的一种情况?】

原因是过拟合或者训练验证数据分布不一致导致

  • 过拟合:训练集过小,未包含验证集中所有情况,也就是过拟合导致的。
  • 训练集验证集数据分布不一致:即在训练后期,预测的结果趋向于极端,使少数预测错的样本主导了loss,但同时少数样本不影响整体的验证acc情况。
    • 应该就是验证集里一些hard case导致的。在训练阶段就关注hard case可能是一个思路,比如有答主提到的focal loss。

而解决这种现象可以尝试以下几种策略:

  1. 增加训练样本
  2. 增加正则项系数权重,减小过拟合
  3. 加入早停机制,ValLoss上升几个epoch直接停止
  4. 采用Focal Loss
  5. 加入Label Smoothing

不过个人感觉主要还是增加训练样本比较靠谱..而且不用太关心ValLoss,关注下ValAccuracy就好。

loss一直下降,acc低且不提高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静喜欢大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值