最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何解决pytorch交叉熵损失输出为负数 解决pytorch交叉熵损失输出为负数方法
时间:2020-07-07 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下解决pytorch交叉熵损失输出为负数方法,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
网络训练中,loss曲线非常奇怪
交叉熵怎么会有负数。
经过排查,交叉熵不是有个负对数吗,当网络输出的概率是0-1时,正数。可当网络输出大于1的数,就有可能变成负数。
所以加上一行就行了
out1 = F.softmax(out1, dim=1)
补充知识:在pytorch框架下,训练model过程中,loss=nan问题时该怎么解决?
当我在UCF-101数据集训练alexnet时,epoch设为100,跑到三十多个epoch时,出现了loss=nan问题,当时是一脸懵逼,在查阅资料后,我通过减小学习率解决了问题,现总结一下出现这个问题的可能原因及解决方法:
1. 减小整体学习率。学习率比较大的时候,参数可能over shoot了,结果就是找不到极小值点;减小学习率可以让参数朝着极值点前进;
2. 改变网络宽度。有可能是网络后面的层参数更新异常,增加后面层的宽度试试;
3. 改变层的学习率。每个层都可以设置学习率,可以尝试减小后面层的学习率试试;
4. 数据归一化(减均值,除方差,或者加入normalization,例如BN、L2 norm等);
5. 加入gradient clipping;
6 输入数据含有脏数据,即NaN,一般当使用实际业务的真实数据时,容易出现脏数据。
相关文章
- Golang ProtoBuf的基本语法详解 10-20
- Python识别MySQL中的冗余索引解析 10-20
- Python+Pygame绘制小球代码展示 10-18
- Python中的数据精度问题介绍 10-18
- Python随机值生成的常用方法介绍 10-18
- python3解压缩.gz文件分析 09-27