再次遇到RuntimeError: CUDA error: an illegal memory access was encountered

news2024/11/6 3:15:21

之前遇到过一次记录下来了,第一次遇到
翻看之前的记录,首先想着如何让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的值,因此自动屏蔽,不需要任何操作,就这个点想了很久没想明白,太大意了,没有看到这个参数,之前见到以为从来不会用到,这下打脸了。
!!!!!!!!!!!!!!!!!花了一上午终于解决了,完结撒花!!!!!!!!!!!!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python快速上手系列--三元表达式--入门篇

不知道你是否在写代码的时候会用到很多的if else的判断呢。如果是,不妨看完这一篇文章,看看是否对你有一定的帮助。先来看看三元表达式的写法:那么怎么写呢,看看:这里的意思是,如果为真,则输入1…

RTX40 系列游戏本与台式机显卡 AI 计算力对比

RTX40 系列游戏本还有几天就上市了,商家选了个比较特别的日子,2 月 22 号 22:00,真是有心了。为了用游戏本做 AI 的朋友选的时候有的放矢,特意查了一下 RTX40 系列的 CUDA 核心与频率,计算一下 FP32 TFLOPS&#xff0c…

C++中如何实现用异或运算找出数组中只出现一次的数字???

文章目录1、异或运算符的运算1、异或运算符的运算 问题描述&#xff1a; 给出一个指定的数组&#xff0c;只有一个数出现一次&#xff0c;剩下都出现两次&#xff0c;找出出现一次的数字。指定数组为[1,2,2,1,3,4,3]。 样例输出&#xff1a;4 #include<iostream> using…

Django框架之模型视图

视图 重点 HttpRequest 位置参数和关键字参数查询字符串请求体:表单数据,JSON数据请求头 HttpResponse HttpResponse JsonResponse redirect 类视图 类视图的定义和使用 类视图装饰器(难点) 视图介绍和项目准备 视图介绍 视图就是应用中views.py文件中的函数视图的第一…

SpringMVC创建异步回调请求的4种方式

首先要明确一点&#xff0c;同步请求和异步请求对于客户端用户来讲是一样的&#xff0c;都是需客户端等待返回结果。不同之处在于请求到达服务器之后的处理方式&#xff0c;下面用两张图解释一下同步请求和异步请求在服务端处理方式的不同&#xff1a;同步请求异步请求两个流程…

OKCC呼叫中心支持哪些接入方式?

使用OKCC系统开展呼叫中心业务&#xff0c;要将电话打通&#xff0c;需要什么样的设备接入到OKCC系统呢&#xff1f; 目前实际广泛使用的接入方式&#xff0c;既有硬件网关接入方式&#xff0c;也有软件接入方式&#xff0c;在生产实践中&#xff0c;我们须根据实际的需求及使…

kubernetes教程 --资源管理

资源管理 介绍 所有的k8s内容都抽象为资源的方式&#xff0c;用户通过操作资源来管理k8s k8s的核心就是对集群上的pod&#xff0c;pod控制器&#xff0c;service&#xff0c;存储等何种资源进行操作 资源管理方式 命令式对象管理 直接用命令去操作k8s资源 kubectl run nginxp…

基于 瑞芯微 RK1126 平台的项目总结(包含AI 画中画 RTSP OSD 录像 双路摄像头)

其实这个项目结束一两个月了 中间过了个年 就把这事给忘记了 趁现在比较空记录一下 说下概况 项目是基于RK1126平台 硬件配置2个摄像头一个广角一个长焦 需要支持画中画在广角摄像头的画面中 显示长焦摄像头的大概位置 但是由于硬件还是驱动没有搞好 导致了两个摄像头不…

Puppeteer 爬虫学习

puppeteer简介&#xff1a; Puppeteer 是一个 Node 库&#xff0c;它提供了一个高级 API 来通过 DevTools 协议 控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行&#xff0c; 但是可以通过修改配置文件运行“有头”模式。能作什么&#xff1f;&#xff1a; 生成…

Linux驱动学习笔记

驱动学习笔记 1、字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中&#xff0c;这样当 Linux 内核启 动的时候就会自动运行驱动程序。 第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko)&#xff0c;在 Linux 内核启动以后使用“insmod”命…

稳态钙钛矿IV测试系统太阳光模拟器

一、概述用途:设备在一定的面积下提供一个接近自然光的光源&#xff0c;光源等级为AAA 级&#xff0c;主要用于大面积光伏组件的老化测试&#xff0c;测试可满足 IEC 61215、IEC 61730 标准。二、设备主体设备箱体尺寸2、硬件信息设备箱体采用能够完全阻隔太阳光的板材拼装而成…

金三银四春招特供|高质量面试攻略

&#x1f530; 全文字数 : 1万5千 &#x1f552; 阅读时长 : 20min &#x1f4cb; 关键词 : 求职规划、面试准备、面试技巧、谈薪职级 &#x1f449; 公众号 : 大摩羯先生 本篇来聊聊一个老生常谈的话题————“面试”。利用近三周工作午休时间整理了这篇洋洋洒洒却饱含真诚…

搭建Hexo博客-第4章-绑定自定义域名

搭建Hexo博客-第4章-绑定自定义域名 搭建Hexo博客-第4章-绑定自定义域名 搭建Hexo博客-第4章-绑定自定义域名 在这一篇文章中&#xff0c;我将会介绍如何给博客绑定你自己的域名。其实绑定域名本应该很简单的&#xff0c;但我当初在这上走了不少弯路&#xff0c;所以我觉得有…

腾讯云架构师亲码“redis深度笔记”,从入门到精通,面面俱到

前言 作为这个时代码代码的秃头人员&#xff0c;对Redis肯定是不陌生的&#xff0c;如果连Redis都没用过&#xff0c;还真不好意思出去面试&#xff0c;指不定被面试官吊打多少次。 毕竟现在互联网公司和一些创业公司都要用到Redis&#xff0c;像亚马逊、谷歌、阿里、腾讯都要…

ChatGPT会抢项目经理饭碗?飞项可不这么认为

ChatGPT的火爆&#xff0c;让AI替代人类的言论&#xff0c;又一次甚嚣尘上。有人说ChatGPT注定会改变这个世界&#xff0c;这改变主要聚焦三个方面&#xff1a;有利的是帮助天才和独狼加快创新&#xff0c;不利的是削减工作岗位需求、制造更多的垃圾信息。 比如&#xff0c;Cha…

OnGUI label 控件||Unity 3D GUI教程||OnGUI Background Color 控件

Unity 3D Label 控件用于在设备的屏幕上创建文本标签和纹理标签&#xff0c;和Box 控件类似&#xff0c;可以显示文本内容或图片。Label 控件一般用于显示提示性的信息&#xff0c;如当前窗口的名称、游戏中游戏对象的名字、游戏对玩家的任务提示和功能介绍等。具体使用方法如下…

麦肯锡给CEO的元宇宙指南

ChatGPT突然大张旗鼓地登上全球新闻的头条时&#xff0c;元宇宙似乎如明日黄花般过气了&#xff0c;未来渺茫起来。而麦肯锡的4位合伙人在今年1月给全球CEO们的“元宇宙指南”中强调&#xff0c;“太大元宇宙 &#xff0c;不容忽视”。《元宇宙日爆》编译了这份指南供企业管理者…

git代码提交后jenkins构建和自动部署

利用jenkins和gitlab的webhook结合&#xff0c;实现提交代码之后&#xff0c;自动触发jenkins的构建。顺带介绍一下通过触发器构建&#xff0c;比如直接通过url去触发的方式。 一、jenkins结合webhook 1、jenkins配置 a、首先jenkins得需要安装两个gitlab的插件&#xff1a;(…

进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持

C的编程精华&#xff0c;走过路过千万不要错过啊&#xff01;废话少说&#xff0c;我们直接进入正题&#xff01;&#xff01;&#xff01;&#xff01; 函数高级 C的函数提高 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的。 语法&#xff1a;返…