关于Pytorch使用torchsummy中的summary函数出现tuple index out of range的报错
问题
我在复现Attention Unet代码时,出现了如下报错信息:
File "/root/autodl-tmp/projects/UnetWithResNet/model/Attention_UNet.py", line 163, in <module>summary(model, (3, 512, 512))File "/root/miniconda3/lib/python3.8/site-packages/torchsummary/torchsummary.py", line 72, in summarymodel(*x)File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1110, in _call_implreturn forward_call(*input, **kwargs)File "/root/autodl-tmp/projects/UnetWithResNet/model/Attention_UNet.py", line 134, in forward
python-BaseExceptionattention1 = self.attention1(g=up1, x=down4) # 512, 64, 64File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1131, in _call_implhook_result = hook(self, input, result)File "/root/miniconda3/lib/python3.8/site-packages/torchsummary/torchsummary.py", line 19, in hooksummary[m_key]["input_shape"] = list(input[0].size())
IndexError: tuple index out of range
报错信息显示代码在运行到
attention1 = self.attention1(g=up1, x=down4) # 512, 64, 64
时,torchsummary.py
文件的
summary[m_key]["input_shape"] = list(input[0].size())
出现了元组索引溢出异常。
解决方法
方法一
博主一元童鞋给出了一个解决方法,就是注释掉torchsummary.py
文件的:
# summary[m_key]["input_shape"] = list(input[0].size())
# summary[m_key]["input_shape"][0] = batch_size
并加入:
if len(input) != 0:summary[m_key]["input_shape"] = list(input[0].size())summary[m_key]["input_shape"][0] = batch_size
else:summary[m_key]["input_shape"] = input
因为我是在远程服务器上跑的代码,直接修改torchsummary.py
会很麻烦,所以该方法是否可以解决问题,我没有进行尝试。
方法二
观察我的代码:
attention1 = self.attention1(g=up1, x=down4) # 512, 64, 64
这段代码的实现是:
self.attention1 = Attention_block(F_g=filters[3], F_l=filters[3], F_int=filters[2])
Attention_block
类的实现是:
class Attention_block(nn.Module):"""注意力机制"""def __init__(self, F_g, F_l, F_int):super(Attention_block, self).__init__()self.W_g = nn.Sequential(nn.Conv2d(F_g, F_int, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(F_int))self.W_x = nn.Sequential(nn.Conv2d(F_l, F_int, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(F_int))self.psi = nn.Sequential( # psi是一个卷积层,用于将F_int通道的特征图转换为1通道的特征图nn.Conv2d(F_int, 1, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(1),nn.Sigmoid())self.relu = nn.ReLU(inplace=True)def forward(self, g, x):g1 = self.W_g(g) # 512, 32, 32 -> 256, 32, 32x1 = self.W_x(x) # 512, 32, 32 -> 256, 32, 32psi = self.relu(g1 + x1) # 256, 32, 32psi = self.psi(psi) # 256, 32, 32 -> 1, 32, 32return x * psi # 512, 32, 32
这有可能是调用self.attention1
时,参数的传递出了问题,将其改为:
attention1 = self.attention1(up1, down4) # 512, 64, 64
也就是将:
attention1 = self.attention1(g=up1, x=down4) # 512, 64, 64
改为
attention1 = self.attention1(up1, down4) # 512, 64, 64
up1
和down4
应该是不需要指定参数名称的,只需按顺序传入即可。但是原因到底是不是这样,我没有进行深究。
参考
https://blog.csdn.net/onermb/article/details/116149599
https://github.com/LeeJunHyun/Image_Segmentation/issues/69
关于Pytorch使用torchsummy中的summary函数出现tuple index out of range的报错相关推荐
- actions vuex 请求_vue中vuex的actions里面请求接口,提交给mutations报错
问题描述 vue中vuex的actions里面请求接口,提交给mutations报错 问题出现的环境背景及自己尝试过哪些方法 相关代码 // 请把代码文本粘贴到下方(请勿用图片代替代码) action ...
- SLAM十四讲 ch7 orb_self.cpp中402行代码:cv::DMatch m{i1, 0, 256}报错
orb_self.cpp中402行代码:cv::DMatch m{i, 0, 256}; 报错:warning: narrowing conversion of 'i' from 'size_t {a ...
- vue3项目使用了element-plus中的el-table表格组件,缩放浏览器网页时,报错如下: ResizeObserver loop limit exceeded at eval (w
错误描述: vue3项目使用了element-plus中的el-table表格组件,缩放浏览器网页时,报错如下: ResizeObserver loop limit exceeded at eval ...
- matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)
最近在做有关ODE45的微分方程求解,在微分方程中,运用到了erf函数,虽然之前也出现过类似的问题,已经解决,但是这次丝毫找不到问题的原因所在,毫无头绪. 主程序如下: [code] %------x ...
- 多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
时间:2020.9.29,XMoba第一次Demo 子线程调用UNITY的相关变量或函数导致程序执行过程断掉,且不报任何错误的一个BUG 一,问题现象 网络异步连接的回调函数中使用了一个函数XLog. ...
- js中页面与页面传参遇到Uncaught SyntaxError: Unexpected token =报错
首先准备了两个页面进行传参的测试 结果发现报错如下 这是首页 点击a标签跳转到另一个页面的时候发现参数传递过来可以打印,但是值是空,获取代码如下 这是第二个页面 之后尝试另一种传递参数的方法,使用#号 ...
- maven 依赖公司另一项目中的对象,对象里的部分属性set值报错not found
背景 项目A依赖项目B(B是公司自己开发的另一个项目),在install 时,报错.根据错误日志发现:项目A有一个依赖项目B的对象,属性在set值时一直报错,not found,其他属性都可以set. ...
- Spring 中,有两个 id 相同的 bean,会报错吗
我们知道,spring容器里面的bean默认是单例的,所以id是唯一的.但是需要注意,同一类型的bean可以有不同的id,比如有id1->bean,也可以有id2->bean. 下面再来详 ...
- 微信小程序中this指向作用域问题this.setData is not a function报错
在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({index1: e.detail.value}) 比如在函数里面修改数据 bindFaChange1: funct ...
- 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?...
复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...
最新文章
- mysql5.1 mysiam,将MySQL 5.1 MyISAM 转换成 INNODB 存储引擎
- TextView显示不同颜色的文本,及文本变色可点击工具类
- 【机器视觉】 dev_update_var算子
- Django扩展自定义manage命令
- android骰子游戏代码_真神器!不用手写一行代码就能做网站~
- “==”和“===”,难道不是多一个的区别吗?
- Dubbo 是如何控制并发数和限流的?
- Python 输出到文件两种方式
- Windows系统下输入法变为繁体字
- 南京大学学生用7000张照片算出院系“平均脸”
- 几种不同的方式用Python连接数据库
- 北大计算机所有专业都分学硕和专硕,毕业后才明白,学硕和专硕的差距不是一星半点,幸好当年没选错...
- 程序员为什么工资是用10k表示10000?
- matlab 的 符号,MATLAB符号计算
- ecm工作原理 usb_ECM的工作原理.ppt
- ILRuntime学习(之一)
- 20210130上午新初一(GW+JZ)比赛总结
- aplus翻译_promise/A+规范翻译以及手写实现
- win10连接打印机共享显示0x0000011b错误代码怎么办?
- linux常用基本命令大全(超详细,建议多操作,多练)