神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)

个人学习使用,参考:神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)_loss不下降_ytusdc的博客-CSDN博客

目录

1、模型不收敛主要原因

1.1、learning rate设大了会带来跑飞(loss突然一直很大)的问题

1.2、数据库太小一般不会带来不收敛的问题

1.3、尽量用小模型。

2、模型loss 不下降

2、Loss 函数不收敛

2.1、loss等于87.33不变

2.2、loss保持0.69左右

3、解决方法总结

3.1、数据和标签

3.2、学习率设定不合理

 3.3、网络设定不合理

3.4、数据集label的设置

3.5、数据归一化

3.6、正则化过度

3.7、选择合适的损失函数

3.8、训练时间不足


1、模型不收敛主要原因

loss不收敛主要有以下两种情况,一种是loss一直在震荡,一种是loss下降一点后不再下降到理想水平,而验证集上的表现保持不变。

首先排查方法:

1.保持需要的batchsize不变;
2.查看是否有梯度回传,查看代码如下:

for name, parms in model.named_parameters():
	print('-->name:', name, '-->grad_requirs:', parms.requires_grad, '--weight', torch.mean(parms.data), ' -->grad_value:', torch.mean(parms.grad))

主要有以下几个原因: 

1.1、learning rate设大了会带来跑飞(loss突然一直很大)的问题

 这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢?可能性最大的原因是你用了relu作为激活函数的同时使用了softmax或者带有exp的函数做分类层的loss函数。当某一次训练传到最后一层的时候,某一节点激活过度(比如100),那么exp(100)=Inf,发生溢出,bp后所有的weight会变成NAN,然后从此之后weight就会一直保持NAN,于是loss就飞起来辣。我的depth estimation相关项目的loss曲线,如下:

 可以看出跑飞了,(幸lr设的并不是非常大所以又拉了回来)。如果lr设的过大会出现跑飞再也回不来的情况。这时候你停一下随便挑一个层的weights看一看,很有可能都是NAN了。对于这种情况建议用二分法尝试。0.1~0.0001.不同模型不同任务最优的lr都不一样。

1.2、数据库太小一般不会带来不收敛的问题

 只要你一直在train总会收敛(rp问题跑飞了不算)。反而不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间。样本少只可能带来过拟合的问题,你看下你的training set上的loss收敛了吗?如果只是validate set上不收敛那就说明overfitting了,这时候就要考虑各种anti-overfit的trick了,比如dropout,SGD,增大minibatch的数量,减少fc层的节点数量,momentum,finetune等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值