报错信息如下:
../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