中文Chinese-CRNN代码训练中遇到loss nan的问题解决方法

首先通过以下代码,对问题进行定位

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

然后,发现问题出在损失函数上面了:

RuntimeError: Function 'CtcLossBackward' returned nan values in its 0th output.

检查CTC Loss的参数设置,由于我没有修改原始config中图像初始长宽,而我自己使用的数据集label都比较长,这导致CTC Loss中length比preds_size要更长了。

我对应修改了config中图像的宽度,这样preds_size也会对应变大,问题解决。


类似的问题其实在工程对应gitlab上也有人提出:

 


在找解决方法的过程中,也尝试了很多其他方法,一并总结在这里。

1. 调小学习速率。

把lr调整至0发现问题依然存在,排除lr的问题。

2. 梯度裁剪

torch.nn.utils.clip_grad_norm(model.parameters(),1.0)

3. 另外,之前也有遇到过类似的情况。当时是输出logit中包含0,经过log(0)后,出现nan。可以对logits加上一个小数1e-6,解决问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值