RuntimeError: CUDA error: device-side assert triggered 问题的解决思路

问题如下:

1.问题如下:

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.

RuntimeError: CUDA error: device-side assert triggered 问题的解决思路_第1张图片

2.解决方案:

(1)一开始我在网上查找解决方案,结果大部分网友的解决思路都是类似于这样:

         有人说是造成这个问题的原因就是在做分类任务时,训练数据中存在超出分类数目的标签。举个例子:如果你一共设置了8个类,但是训练数据中的标签里出现了9,就会报这个错误。那么问题来了,这里有一个陷阱。训练数据中的标签含0也会报上述错误。这个就非常诡异了。一般我们都从0开始数,但是在pytorch里0以下的类别标签都是要报错的。所以如果类别标签从0开始,要给所有类别标签都加上1。

         pytorch会自己扫描train_path下的每一个文件夹(每类图片都位于其类别的文件夹下),并将每一个类映射成数值,比如有4类,类别标签就是[0,1,2,3]。在进行二分类的时候的确是将标签映射成了[0,1],但是在进行4分类的时候,标签却映射成了[1,2,3,4],因此就会报错。

(2)实际上我按照这种思路去解决并没有用,依然报错同样的问题。后来我仔细查找代码,发现最后原来不是什么标签与分类的类别对不上之类的,而是最后一层网络的代码有问题,你自己要输出是几分类,就应该填写几分类。

 self.outlayer = nn.Linear(256 * 1 * 1, 3)  # 最后的全连接层

# 别人是3分类,而我的是5分类,改正这里就解决了

 self.outlayer = nn.Linear(256 * 1 * 1, 5)  # 最后是全连接层

(3)其实就是一个小问题,但是搞了老半天,在此记录一下。解决之后的实际情况:

RuntimeError: CUDA error: device-side assert triggered 问题的解决思路_第2张图片

你可能感兴趣的:(RuntimeError: CUDA error: device-side assert triggered 问题的解决思路)