解决训练过程中前一次迭代的loss正常后一次迭代却出现NAN

该怎么办?


最近一直在挣扎这个问题,5月份写的网络就是复现不了了,如今总算解决

首先nan在计算机中的含义是非数,即未定义或不可表示的数。而loss中出现NAN有多种原因:

  1. 输入数据和输出数据存在脏数据,可用下面程序检查
if torch.any(torch.isnan(output)):

            break
  1. 自己设计的损失函数可能存在问题,检查能否正常反向传播,并对输入的数据保持同一个类型

  2. 学习率太大,减小学习率

  3. 设置梯度截断

nn.utils.clip_grad_value_(model.parameters(), clip_value=5)
        
  1. 如果使用sqrt(),log(),除0操作要特别注意

  2. 直接定位出现NAN的位置

  torch.autograd.set_detect_anomaly(True)
   
  with torch.autograd.detect_anomaly():
       loss.backward()

RuntimeError: Function ‘MulBackward0’ returned nan values in its 0th output.

参考
1.https://oldpan.me/archives/careful-train-loss-nan-inf

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值