(完全解决)FutureWarning: Non

编程入门 行业动态 更新时间:2024-10-12 05:52:03

(完全解决)<a href=https://www.elefans.com/category/jswz/34/1630862.html style=FutureWarning: Non"/>

(完全解决)FutureWarning: Non

开门见山。检查一下你的loss是否为nan。

如果是的话,检查你loss的计算公式。一定要使用那种饱和类型的损失,例如你希望模型二分类,loss不应该设置为,对于类别1,希望模型输出为正无穷大,对于类别0,希望模型输出为负无穷大,这样loss不会饱和,模型会一直训练下去,很容易nan。应该改为,对模型输出的结果,加一层sigmoid,从而对于类别1,希望模型输出为1,对于类别0,模型输出为0。而对于sigmoid这种饱和函数,输出为1,输入不需要是正无穷大,6,7,8这种数字就可以差不多输出为1了。

我这边的情况是,也同样是犯了一个错误,对于负样本,希望模型输出为0,结果我又用了log输出来作为损失的方式。这就导致,在输出可以做到为0的情况下,我log之后就会nan。改为:

下面这个不好,

neg_outputs=model(x)#这个数大于等于0
loss=torch.log(neg_outputs)

改为下面这个:

neg_outputs=model(x)
loss=torch.log(neg_outputs+1e-8)

这样,损失就会饱和,因为neg_outputs最小就是1e-8。


回到,标题错误,标题说的其实是梯度nan,但是我本文都在说损失,因为极大可能就是损失的原因。

更多推荐

(完全解决)FutureWarning: Non

本文发布于:2024-03-07 20:09:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718801.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:FutureWarning

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!