赞
踩
问题如下:
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.
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)其实就是一个小问题,但是搞了老半天,在此记录一下。解决之后的实际情况:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。