之前遇到过一次记录下来了,第一次遇到
翻看之前的记录,首先想着如何让pycharm准确地显示错误。
1:os.environ[‘CUDA_LAUNCH_BLOCKING’] = '1’,模型前加这句,但是我在train文件中已经加了,还是不清楚报错原因。

2:使用cpu运行,将模型中所有的.cuda删除掉,to(device)的device改为cpu。
报错原因:Target -2 is out of bound。

2.1:于是去train文件用到交叉熵的地方追根溯源。

3:首先想到的就是pred和target维度不匹配导致无法计算交叉熵,于是打印了一下pred:[list4]:大小都是(1,40,480,640)。打印了一下target:[list4]:大小都是(1,480,640)。在交叉熵中通过for 循环遍历,送到交叉熵函数中。维度大小是匹配的。

维度匹配那么就是数值大小有问题了,仔细看了一下target_scale里面的数值,从[0到40],标签中的0代表空像素,然后pred里面的数值各种数值都有,接着重要的事情就发生了:
当我执行过 final_out, segmap16, segmap8, segmap4, sobel_edge, sobel_gt = model(sample)这一行时,**target_scale里面的数值竟然发生了变换。里面的数值都减1,导致0变为-1,40变为39了。**因此在交叉熵时候targets_m = targets_m_1 - 1,导致标签中为-1的像素值变成了-2。

4:这里有两个问题,①:为什么target_scale里面的数值发生了变换?
②:如何解决Target为-2的问题?

5:对于第一个问题:
我感到很奇怪,我又没有使用target_scale,为什么里面的数值发生了变换?
但是可以肯定的是执行过model后,发生变换,变换的原因要去model里面找。
于是我一步一步的debug model。
找到了model中唯一用到label的地方,且labe=sample[‘label’]是经过这一行改变的

sobel_edge, sobel_gt = self.conf1(edge_map, label)

然后跳到另一个文件中:

label = label - 1
label_select = torch.clip(label, min=0, max=40)
label_one_hot = F.one_hot(label_select.to(torch.int64), 40).permute(0, 3, 1, 2)

为了对label进行one-hot编码,我首先删除掉了标签中数值为0的像素点,因为0代表空。
所以就是这句代码导致target里面的数值发生改变:

label = label - 1

label减1后,没有进行新的变换,导致减一的label继承下来,导致经过model之后的target数值发生改变。
代码修改为:

new_label = label - 1
label_select = torch.clip(new_label , min=0, max=40)

重新修改后,target=-2的情况就解决了,但是:

targets_m = targets_m_1 - 1

target_m_1中包含有-1,进行交叉熵计算的时候肯定是不行的,但是不减又不行因为要删除空像素,且类别为40。需要对target进行select_mask操作,接着我根据:

loss_all = self.ce_loss(inputs, targets_m.long())

跳到:

        self.ce_loss = nn.CrossEntropyLoss(torch.from_numpy(np.array(weight)).float(),reduction='none',ignore_index=-1)

发现了参数中包括:ignore_index=-1,他会主动忽视掉索引为-1的值,因此自动屏蔽,不需要任何操作,就这个点想了很久没想明白,太大意了,没有看到这个参数,之前见到以为从来不会用到,这下打脸了。
!!!!!!!!!!!!!!!!!花了一上午终于解决了,完结撒花!!!!!!!!!!!!!!!!!

再次遇到RuntimeError: CUDA error: an illegal memory access was encountered相关推荐

  1. RuntimeError: CUDA error: an illegal memory access was encountered

    文章目录 4. 我的解决 1. 错误描述 2. 自我尝试 2.1 减小batch_size 2.2 换卡改代码 3. 调研情况 4. 我的解决 后续发现其实是某张卡有问题, 0~3一共4个GPU,只在 ...

  2. RuntimeError: CUDA error: an illegal memory access was encountered的解决方法

    在Transformer模型中遇到这个问题 参考方法:https://www.jianshu.com/p/e1a0b14916f9 原因 class Add_Norm(nn.Module):def _ ...

  3. CUDA RuntimeError: CUDA error: an illegal memory access was encountered

    我的CUDA version=11.4 百度.谷歌上能找的办法都找了,有各种解决办法 减小batch_size的 把所有net和输入都放入到相同设备的 net的train和eval状态检查的 防止内存 ...

  4. 【解决汇总:待更新】CUDA error: an illegal memory access was encountered with channels_last

    为方便查看,就直接贴图和网址了.仅供学习使用,如有侵权,请联系我删除. 一.调试方法: 链接 原文: Recently, I encountered "an illegal memory a ...

  5. CUDA error: an illegal memory access was encountered

    报错原因1: 这种报错的是模型model.输入数据(input_image.input_label)没有全部移动到GPU(cuda)上,或者没有移动到同一块gpu上. **温馨提示:**debug时一 ...

  6. torch.backends.cudnn.enabled = False会引起CUDA out of memory和CUDA error: an illegal memory access was

            一般来说,题目所示这种问题都是由batch_size的设置引起的,修改batch_size之后就能有效解决.但是,我今天遇到一种情况,这个问题不是由batch_size引起的,而是由t ...

  7. checkpoint = torch.load(args.state_dict) ->RuntimeError: CUDA error: out of memory

    进行eval,加载模型到gpu时,出现错误:RuntimeError: CUDA error: out of memory 疑似原因:有一个相似的模型(网络结构名相同,通道数不同)在另一块gpu上训练 ...

  8. RuntimeError: CUDA error: out of memory

    写在前面( 已解决) 记录一下很诡异的情况,实验室两台同样的电脑做服务器,相同的代码在一直使用的机子上是 ok 的,移到另一台配置好的电脑就开始在 model=model.cuda()的地方报错 正式 ...

  9. 关于RuntimeError: CUDA error: out of memory问题的解决方法

    遇到这个问题的时候,在网上查了很多,作为网络的搬运工,我梳理总结了一下,供大家参考.具体如下: 1.把num_works设置为0 . 此时需要借助PyCharm的搜索栏,如下 回车之后,你会发现搜索到 ...

最新文章

  1. Java中生产者与消费者问题的演变
  2. springboot配置cxf
  3. 原始需求的来龙去脉和核心要求
  4. WeChall_Training: Register Globals
  5. 2021,我的输入输出
  6. 红头文件rgb红色值_拿下抖音小姐姐,我写了个口红色号识别器
  7. 别再吼孩子骂孩子了,他们的脑子真的会受伤变形
  8. python \__class__
  9. java代码中发送http请求中使用DnsResolver的问题
  10. bootice.exe linux 启动盘,怎么用bootice自己手动制作U盘启动-支持BIOS+UEFI
  11. 【hihocoder 1032】最长回文子串
  12. 【路径规划】基于NSGA2实现无人机三维路径规划matlab源码
  13. Java反编译工具-luyten
  14. 2003 445端口关闭方式
  15. 戴尔服务器虚拟光驱,SupportAssist
  16. 批量图片缩小工具,JPG|PNG|BMP图片缩小工具
  17. (原创)AD账户误删导致Exchange邮箱被删 莫苦恼
  18. 路径导航与启发式搜索
  19. Go语言学习笔记(三)---指针,运算符及流程控制
  20. 沈阳大学博客网站的设计与实现

热门文章

  1. 极品飞车服务器维修好久,极品飞车无限狂飙被封锁多久能解 | 手游网游页游攻略大全...
  2. 公众号在哪引流?运营公众号需要怎么做?公众号内容建设
  3. 【cs231n】反向传播笔记
  4. Ajax并不是一种技术(Ajax入门好文章)
  5. 锂电回收行业硫酸镍溶液除硅
  6. C++实现CNN识别手写数字
  7. 马云:刚来公司不到一年的人,谁提…
  8. 安装ps时显示建议重启计算机,安装 photoshop cs6提示建议重新启动计算机的解决办法...
  9. cadence SPB17.4 - allegro添加过孔
  10. 一次面试苏宁java开发的经历