栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

中文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,解决问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号