问题

我在复现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

up1down4应该是不需要指定参数名称的,只需按顺序传入即可。但是原因到底是不是这样,我没有进行深究。

参考

https://blog.csdn.net/onermb/article/details/116149599
https://github.com/LeeJunHyun/Image_Segmentation/issues/69

关于Pytorch使用torchsummy中的summary函数出现tuple index out of range的报错相关推荐

  1. actions vuex 请求_vue中vuex的actions里面请求接口,提交给mutations报错

    问题描述 vue中vuex的actions里面请求接口,提交给mutations报错 问题出现的环境背景及自己尝试过哪些方法 相关代码 // 请把代码文本粘贴到下方(请勿用图片代替代码) action ...

  2. 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 ...

  3. vue3项目使用了element-plus中的el-table表格组件,缩放浏览器网页时,报错如下: ResizeObserver loop limit exceeded at eval (w

    错误描述: vue3项目使用了element-plus中的el-table表格组件,缩放浏览器网页时,报错如下: ResizeObserver loop limit exceeded at eval ...

  4. matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)

    最近在做有关ODE45的微分方程求解,在微分方程中,运用到了erf函数,虽然之前也出现过类似的问题,已经解决,但是这次丝毫找不到问题的原因所在,毫无头绪. 主程序如下: [code] %------x ...

  5. 多线程中使用UNITY变量导致线程执行断掉却又不报错的问题

    时间:2020.9.29,XMoba第一次Demo 子线程调用UNITY的相关变量或函数导致程序执行过程断掉,且不报任何错误的一个BUG 一,问题现象 网络异步连接的回调函数中使用了一个函数XLog. ...

  6. js中页面与页面传参遇到Uncaught SyntaxError: Unexpected token =报错

    首先准备了两个页面进行传参的测试 结果发现报错如下 这是首页 点击a标签跳转到另一个页面的时候发现参数传递过来可以打印,但是值是空,获取代码如下 这是第二个页面 之后尝试另一种传递参数的方法,使用#号 ...

  7. maven 依赖公司另一项目中的对象,对象里的部分属性set值报错not found

    背景 项目A依赖项目B(B是公司自己开发的另一个项目),在install 时,报错.根据错误日志发现:项目A有一个依赖项目B的对象,属性在set值时一直报错,not found,其他属性都可以set. ...

  8. Spring 中,有两个 id 相同的 bean,会报错吗

    我们知道,spring容器里面的bean默认是单例的,所以id是唯一的.但是需要注意,同一类型的bean可以有不同的id,比如有id1->bean,也可以有id2->bean. 下面再来详 ...

  9. 微信小程序中this指向作用域问题this.setData is not a function报错

    在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({index1: e.detail.value}) 比如在函数里面修改数据 bindFaChange1: funct ...

  10. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?...

    复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...

最新文章

  1. mysql5.1 mysiam,将MySQL 5.1 MyISAM 转换成 INNODB 存储引擎
  2. TextView显示不同颜色的文本,及文本变色可点击工具类
  3. 【机器视觉】 dev_update_var算子
  4. Django扩展自定义manage命令
  5. android骰子游戏代码_真神器!不用手写一行代码就能做网站~
  6. “==”和“===”,难道不是多一个的区别吗?
  7. Dubbo 是如何控制并发数和限流的?
  8. Python 输出到文件两种方式
  9. Windows系统下输入法变为繁体字
  10. 南京大学学生用7000张照片算出院系“平均脸”
  11. 几种不同的方式用Python连接数据库
  12. 北大计算机所有专业都分学硕和专硕,毕业后才明白,学硕和专硕的差距不是一星半点,幸好当年没选错...
  13. 程序员为什么工资是用10k表示10000?
  14. matlab 的 符号,MATLAB符号计算
  15. ecm工作原理 usb_ECM的工作原理.ppt
  16. ILRuntime学习(之一)
  17. 20210130上午新初一(GW+JZ)比赛总结
  18. aplus翻译_promise/A+规范翻译以及手写实现
  19. win10连接打印机共享显示0x0000011b错误代码怎么办?
  20. linux常用基本命令大全(超详细,建议多操作,多练)

热门文章

  1. 机器学习基础:大数据与深度学习的关系
  2. 【python】pyinstaller打包基于PyQt5的程序以及将图片资源文件打包到exe中
  3. 物联网模组从低价竞争到壁垒渐起
  4. 解决no st-link detected问题
  5. openxlsx包:读取/输出excel数据
  6. 软件危机和软件生存期
  7. jquery中on绑定click事件在苹果手机中不起作用
  8. FreeBSD 9.1内核文件编译分析
  9. git并行开发工作流说明
  10. 干货 | 20个Python教程,掌握时间序列的特征分析(附代码)