MMSeg搭建模型的坑

Input type(torch.suda.FloatTensor) and weight type (torch.FloatTensor) should be same

自己搭建模型的时候,经常会遇到二者不匹配,以这种情况为例,是因为部分模型没有加载到CUDA上面造成的。
在这里插入图片描述注意搭建模型的时候,所有层都应该在init函数中完成初始化
其次,对于List、Tuple这种类型,不建议直接用。
以下是错误代码,我搞了半天,不理解为什么总是不对,正确的应该是self.aspp = nn.ModuleList()

self.aspp = [] # 注意这里不能直接用list[]。类似元组,tuple[]也不能用,要不然会导致weight不在cuda上
for dilation in dilations:self.aspp.append(ConvModule(self.in_channels,self.channels,1 if dilation == 1 else 3,dilation=dilation,padding=0 if dilation == 1 else dilation,conv_cfg=self.conv_cfg,norm_cfg=self.norm_cfg,act_cfg=self.act_cfg))

搭建代码时,希望记住。没有系统教学,只能自己在网上摸索。

Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by passing the keyword argument find_unused_parameters=True to torch.nn.parallel.DistributedDataParallel, and by making sure all forward function outputs participate in calculating loss.

多GPU的坑,翻译为

  • 在开始新的迭代之前,应已在上一次迭代中完成缩减。此错误表示您的模块具有未用于产生损失的参数。通过将关键字参数find_unused_parameters=True传递给torch.nn.parallel,可以启用未使用的参数检测。DistributedDataParallel,和
    确保所有“正向”函数输出都参与计算损失。
    关键在于
This error indicates that your module has parameters that were not used in producing loss. 

即有参数未参与到loss生成过程中,换句话说就是有参数在init中定义,但是未在forward中使用,就会造成这样的结果。原来为了不断调优模型,我将几个待选网络模块都写在了init函数中,然后这样只需要在forward中改变调用的模块就可以了。在单机运行中这样是可行的无错的,但是在DDP中由于需要多卡进行loss的reduce,为了防止出错,ddp就强行设置了这样的规则,但是可以通过如上错误提示里面的参数更改此设置,但是尽量不要修改。
解决方法:
可以通过 (1) 将关键字参数 find_unused_parameters=True 传递给 torch.nn.parallel.DistributedDataParallel 来启用未使用的参数检测;
(2) 确保所有 forward 函数的所有输出都参与计算损失。解决方法:将init函数中未使用到的模块注释掉即可。
一般推荐2,
因为我只修改了骨干网络,骨干网络是我自己创建的,仔细检查发现,复制粘贴的时候,有个地方忘记修改

 x = self.aspp2(x[3]) # 此处是aspp2,之前是aspp3

修改之后,就可以跑通了
拓展:
也有推荐用如下代码检查,我试了一下,但是将所有的都输出来了,不知道是不是放的位置不对:
在mmseg/models/segmentors/encoder_decoder.py中的losses.update(loss_decode)语句下加入下段代码

for name, p in self.decode_head.named_parameters():#  print(name)if p.grad is None:print(name)

在这里插入图片描述

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

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

相关文章

【氮化镓】液态Ga在GaN(0001)和(0001̅)表面上的三维有序排列随温度的变化

文章标题是《Temperature dependence of liquid-gallium ordering on the surface of epitaxially grown GaN》,作者是Takuo Sasaki等人,发表在《Applied Physics Express》上。文章主要研究了在分子束外延(MBE)条件下,液态镓(Ga)在GaN(0001)…

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似RTT打印功能 简单分析

参考: 有关于 SDI printf 更多的信息和资料吗? 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf 0.前言 有段时间没有看CH32V单片机的开发了,今天帮新来的同事调试时候看到debug.c里面有…

java-spring 06 图灵 getBean方法和 doGetBean方法

01.一般的流程是,这里是从上一章的preInstantiateSingleton方法顺序过来的。 getBean() -> doGetBean() -> createBean() -> doCreateBean() -> createBeanInstance() -> populateBean() -> initializeBean() 02.getBean方法,一般就…

稳扎稳打进入科研方向的三个阶段

摘要: 本贴以多标签学习方法为例, 描述如何稳扎稳打进入科研方向. 学习阶段(读懂 5 篇论文及相应代码;相信已有工作) 1.1 知道问题的定义:输入、输出、优化目标 1.2 知道论文的基本思想:多标签问题转化为二分类问题&a…

optim.lr_scheduler.StepLR学习

torch.optim.lr_scheduler.StepLR 是 PyTorch 中的一个学习率调整器,按照一定的步长调整学习率。 torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma0.1, last_epoch-1, verboseFalse) optimizer:要使用该调度器的优化器。step_size&#…

项目十:学会python爬虫数据保存(小白圆满级)

前言 上篇我们学会的文本文件、csv文件和excel文件的相关基础知识和操作,这一次我们再来了解一下四个文件操作方式 存储方法 HTML文件 将数据保存为HTML格式,可以直接在浏览器中查看。 使用字符串拼接将数据保存为HTML格式。 代码案例 # 创建数据…

Cookie、Session以及Token的区别

Cookei、Session以及Token总的来说都是为了实现客户端访问服务器数据而利用的一种手段,可以把服务器数据看成是密码箱,而它们是三种不同的钥匙。 一、定义 1.Cookie 客户端第一次访问服务器时,服务器返回cookie给客户端A,客户端…

010 springboot整合mybatis-plus 登录页面和首页不拦截

文章目录 customer.sqlConfigRegistCenter.javaCustomerController.javaCustomer.javaLoginCustomer.javaJwtInterceptor.javaCustomerMapper.javaICustomerService.javaCustomerServiceImpl.javaJwtUtil.javaServerResult.javaServletInitializer.javaSpringbootLoginApplicat…

NB14 牛群编号的回文顺序

原题链接 牛群编号的回文顺序_牛客题霸_牛客网 (nowcoder.com) 一种可行的思路 先遍历链表, 将节点的值(1-9)用 StringBuffer 给存起来 用动态规划来解题 然后再用 dp 来解题 状态转移方程为: dp[i][j] dp[i 1][j - 1] && strB[i] strB[j] (i > j 1) dp[…

vue中多个.vue文件中style里定义同一个class的样式 会相互覆盖吗?

在Vue项目中&#xff0c;每个Vue文件&#xff08;通常是一个.vue单文件组件&#xff09;中定义的样式默认情况下是局部作用域的&#xff0c;也就是说&#xff0c;它们不会影响到其他组件&#xff0c;也不会被其他组件中的样式所覆盖。这是通过Vue单文件组件中的<style>标…

ABTest如何计算最小样本量-工具篇

如果是比例类指标&#xff0c;有一个可以快速计算最小样本量的工具&#xff1a; https://www.evanmiller.org/ab-testing/sample-size.html 计算样本量有4个要输入的参数&#xff1a;①一类错误概率&#xff0c;②二类错误概率 &#xff08;一般是取固定取值&#xff09;&…

第 394 场 LeetCode 周赛题解

A 统计特殊字母的数量 I 哈希&#xff1a;遍历然后枚举 class Solution {public:int numberOfSpecialChars(string word) {unordered_map<char, int> m;for (auto ch : word)m[ch] 1;int res 0;for (char ch a; ch < z; ch)if (m.count(ch) && m.count(A …

VSCode 常用配置

文章目录 插件安装插件设置 推荐设置1. 控制具有未保存更改的编辑器的 自动保存2. 启用自动猜测编码3. 平滑滚动和光标闪烁的设置4. 自动格式化的设置5. 自动换行功能6. 按下回车键时如何接受代码建议的行为7. 建议列表中如何预先选择建议8. 启用自定义对话框样式9. 控制着是否…

【SpringCloud】OpenFeign高级特性

【SpringCloud】OpenFeign高级特性 文章目录 【SpringCloud】OpenFeign高级特性1. 超时控制1.1 全局配置1.2 指定配置 2. 重试机制3. 替换Http客户端3.1 引入依赖3.2 配置 4. 请求/响应压缩5. 日志打印6. 综合配置 1. 超时控制 默认OpenFeign客户端等待60秒钟&#xff0c;但是服…

使用Python实现简单的Web服务器

Python是一种非常灵活的编程语言&#xff0c;它不仅能够处理复杂的数据分析和机器学习任务&#xff0c;还能用于创建简单的Web应用。本文将介绍如何使用Python内置的HTTP服务器模块来创建一个基本的Web服务器&#xff0c;并展示如何通过源码实现简单的路由和请求处理。 环境准…

【运维】docker-compose部署redis

部署Redis使用docker-compose是一种简便且流行的方式。以下是基本的docker-compose.yml文件示例&#xff0c;用于部署单节点Redis服务 方案一 直接使用docker安装单机版 创建.env环境文件并配置管理密码 echo REDIS_PWDredis123456 > .env创建docker-compose.yml环境文件…

8.4.1 实验1:创建 VLAN 和划分端口

1、实验目的 通过本实验可以掌握&#xff1a; VLAN的概念。创建VLAN的方法。把交换机端口划分到VLAN中的方法。 2、实验拓扑 创建 VLAN 和划分端口的实验拓扑如下图所示。 图8-5 创建 VLAN 和划分端口的实验拓扑 3、实验步骤 &#xff08;1&#xff09;实验准备 S1#eras…

创建一个空的maven项目,整合SpringBoot和Redis

创建一个空的maven项目&#xff0c;整合SpringBoot和Redis 创建空的maven项目 在最新版的idea中创建maven项目的时候会让选择模板 如下图&#xff1a; 我们选择quickstart快速开始模板&#xff0c;quickstart快速开始模板创建的maven项目里面什么都不带&#xff0c;只有一个…

苹果手机里的HEIC图片可以转换成普通的JPG格式吗?什么是HEIC图片格式?

在现代社会中&#xff0c;随着智能手机技术的不断发展&#xff0c;我们越来越依赖于手机来记录生活的点滴。其中&#xff0c;拍照成为了人们记录生活的重要手段之一。苹果手机作为市场上的热门品牌&#xff0c;其拍摄的照片质量自然也是备受赞誉。然而&#xff0c;苹果手机默认…

Java面试八股之Java中==和equals()的区别

Java中和equals()的区别 操作符&#xff1a; 对于基本数据类型&#xff08;如int、char、boolean等&#xff09;&#xff0c;比较的是它们的值是否相等。 对于对象引用类型&#xff0c;比较的是两个对象的内存地址&#xff08;即是否指向同一个对象实例&#xff09;。也就是…