loss.backward()报错

报错信息如下:

../aten/src/ATen/native/cuda/Loss.cu:92: operator(): block: [141,0,0], thread: [29,0,0] Assertion `input_val >= zero && input_val <= one` failed.

整个报错信息如下:

        报错信息定位到loss.backward(),网上大多数的说法是CUDA版本和Pytorch版本不匹配。但是我实践下来,和版本问题无关。经过整理,其他可能的原因汇总如下:

  • CUDA版本和Pytorch版本不匹配:但如果成功运行过别的算法,这个问题基本排除
  • 预测值错了,检查一下输出的分类数对不对
  • mask的读取方式有问题,尤其在分割算法中,你的mask是不是要求读进来的是L模式,也就是灰度图
  • 最容易被忽略,但最常见的问题:使用了BCE loss,但是模型最后的输出结果不是0到1之间 

例如,我的模型最总输出的代码如下:

经过测试,模型最终的输出结果中,最大最小值不在0到1之间,导致报错:

然后,为了将最终模型的输出结果转换到[0,1] 区间,对最终的输出做了如下变化:

再次运行,成功解决报错问题:

希望能帮助到遇到同样问题的小伙伴,加油! 

参考链接:

https://blog.csdn.net/weixin_42748439/article/details/133774523

https://blog.csdn.net/DBgirl/article/details/129403423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值