损失函数lossw为nan的问题

总结:

nan的字面意思:Not a Number的缩写

1.一般来说,出现NaN有以下几种情况:
(1) 如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NaN为止,一般来说低于现有学习率1-10倍即可。
(2)如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决)
(3)可能用0作为了除数;
(4)可能0或者负数作为自然对数
(5)网络结构设计的问题

2.解决方法
在这里插入图片描述

个人案例

一开始,我设置每训练10张图片,就输出loss,除了第一个输出为正常值,其余的都为Nan。然后我将训练每张图片的loss都输出,发现数值会慢慢变得很大。

我的解决方法是:将学习率调小,loss的输出总算不为Nan

常见的导致模型发散(Nan问题)原因:
对损失是否开始增加然后发散到无穷大的现象,学习率太高(将学习率调小一点),还可能是输入数据有问题(尝试对输入数据调用assert not np.any(np.isnan(x)),以确保您没有引入nan。还要确保所有目标值(样本Label)均有效。最后,确保数据正确归一化。您可能希望像素在[-1,1]而不是[0,255]范围内)。

参考链接:
https://blog.csdn.net/weixin_39805720/article/details/110979733?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161914290716780366536587%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161914290716780366536587&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-2-110979733.first_rank_v2_pc_rank_v29&utm_term=nan++python++loss

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值