Debug记录:RuntimeError: cuda runtime error (59) : device-side assert triggered at...

2 篇文章 0 订阅
2 篇文章 0 订阅

Debug记录:RuntimeError: cuda runtime error (59) : device-side assert triggered at…

前几天做图像分割的时候被一个CUDA Error浪费了好久的时间
cuda Error
RuntimeError: cuda runtime error (59) : device-side assert triggered at /pytorch/torch/lib/THC/generic/THCStorage.c:32

一般来说,这个assertion的根本原因是标签超出了索引的范围,这里我们可以把每个target(label)的都打印出来观察。但是我是一个图像分割任务,打印出来是一个中间被省略掉的矩阵。所以并没有马上想到解决方案。

后来发现,之前批处理数据集的代码里有一个逻辑运算的if语句出现了错误,导致最终像素级除了背景的像素级和目标的像素级之外,还有其它的像素级(也就导致了索引超出n_class-1的问题)。重新处理批处理数据集之后,问题解决。

以防万一,在生成器中加上下面代码保证不会运行到一半出错

target[target >= self.nclass] = 255.
target[target < 0.] = 255.

上面的255是nn.CrossEntropyLoss()中参数ignore_index的默认值,计算LOSS时会忽略掉像素级为255的像素。上面的代码可以将ground truth中超出索引的所有像素的像素值都置为lgnore_index,确保训练时不会因为碰到某个样本的超出索引而导致训练进程崩溃

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值