RuntimeError: CUDA error: device-side assert triggered

项目场景:

在跑深度学习时用一个神经网络进行训练,第一个自己做的数据集可以完美运行,但换了第二个开源数据集时出现错误。


问题描述

这里贴上错误代码

C:/cb/pytorch_1000000000000/work/aten/src/ATen/native/cuda/NLLLoss2d.cu:95: block: [0,0,0], thread: [34,0,0] Assertion `t >= 0 && t < n_classes` failed.
C:/cb/pytorch_1000000000000/work/aten/src/ATen/native/cuda/NLLLoss2d.cu:95: block: [0,0,0], thread: [35,0,0] Assertion `t >= 0 && t < n_classes` failed.
C:/cb/pytorch_1000000000000/work/aten/src/ATen/native/cuda/NLLLoss2d.cu:95: block: [0,0,0], thread: [605,0,0] Assertion `t >= 0 && t < n_classes` failed.
Traceback (most recent call last):
  File "D:/BIT_CD-master/main_cd.py", line 76, in <module>
    train(args)
  File "D:/BIT_CD-master/main_cd.py", line 15, in train
    model.train_models()
  File "D:\BIT_CD-master\models\trainer.py", line 294, in train_models
    self._backward_G()
  File "D:\BIT_CD-master\models\trainer.py", line 274, in _backward_G
    self.G_loss.backward()
  File "C:\Users\czc\anaconda3\envs\MobileVIT\lib\site-packages\torch\_tensor.py", line 307, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
  File "C:\Users\czc\anaconda3\envs\MobileVIT\lib\site-packages\torch\autograd\__init__.py", line 156, in backward
    allow_unreachable=True, accumulate_grad=True)  # allow_unreachable flag
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.


原因分析:

刚开始我以为是loss或者自己改动了模型的问题,但是经过验证都排除了,问题还是回到数据集上。我的数据集lable是二值化数据,然后我将数据增强前,进入模型和进入loss的数据都打印出来

果然发现错误

未变换 train_248_3_2.png [  0 156 255]
变换后 [  0   1 156]

然后我将这个图找出来查看

果然有不等于0或255的像素,这就简单了。


解决方案:

在传入数据时直接加入代码

        if self.label_transform == 'norm':
            label = label // 255

运行成功

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值