使用自定义loss时出现Nan和-inf问题

在使用自定义损失函数时遇到训练过程中出现Nan和-inf的情况,主要原因是数据处理不当和数学运算错误。检查数据中是否存在Nan值,并确保在loss计算时避免除以0或开根号的数为0。通过修正数据预处理函数和添加防止除以0的保护,可以解决这个问题。在排查中发现,label中存在Nan值,修正相关函数后,问题得到缓解。
摘要由CSDN通过智能技术生成

主要检查两方面:

(1)数据处理过程中是否使input或者label中出现Nan值

        if len(np.unique(np.isnan(input))) > 1:
            print(name, np.unique(np.isnan(input)))

(2)自定义loss中存在除数为0或者开根号的数为0等情况,一般加一个极小数就可解决

使用自定义loss时,训练几代后就出现问题,loss计算中用了torch.sqrt()来开根号,在网络训练初期是没有什么问题的loss也都正常下降,但是训练到一半会出现NAN。

loss本身计算时不出现Nan,但是网络输出为Nan和-inf值

参考博客,初步认为是开根号中值为0的情况,修改代码:

e = 1e-6
torch.sqrt(a  + e)

改完后,仍然存在Nan的问题

进一步检查后,发现训练数据的label存在Nan值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值