torchsummary使用遇到的问题:AttributeError: ‘list‘ object has no attribute ‘size‘解决办法

文章讲述了在使用torchsummary库分析YOLOV5模型时遇到的问题,即当输入和输出包含list或tuple时,torchsummary的默认处理方式导致AttributeError。作者提出了针对list和tuple类型的解决方案,但实施后发现输出中的tuple和list结构仍需额外处理。

使用torchsummary在我的印象中是不会出什么问题的,因为主要就是查看主干网络的输入输出,基本不会出任何问题。

在这里插入图片描述
很不幸,当我使用torchsummary来查看YOLOV5的输出结构时,我遇到了问题:AttributeError: ‘list‘ object has no attribute ‘size‘。
在这里插入图片描述
查看torchsummary的源码,发现处理input的方法都是粗暴使用如下语句:

summary[m_key]["input_shape"] = list(input[0]
### torchsummary 中 `AttributeError` 错误分析 当使用 `torchsummary` 库查看模型架构时,如果遇到 `'int' object has no attribute 'size'` 或者类似的 `'list' object has no attribute 'size'` 的错误,通常是因为输入数据类型的不匹配所引起的。 #### 原因解析 在 `torchsummary` 的实现中,默认情况下会尝试调用 `.size()` 方法来获取张量的形状。然而,在某些特定场景下,传入的数据可能是列表或其他不具备此方法的对象,这就会引发上述异常[^2]。 对于 `'int' object has no attribute 'size'` 这种情况,则表明程序试图在一个整数上执行该操作,显然这是不可能成功的,因为 Python 内置类型 int 并不存在名为 size 的成员函数[^5]。 #### 解决方案 为了修复这个问题,可以考虑以下几种方式: 1. **调整输入格式** 如果可能的话,应该确保传递给 `torchsummary.summary()` 函数的是 PyTorch 张量而不是其他形式的数据结构。例如,创建一个适当维度的随机张量作为输入样本: ```python import torch input_size = (batch_size, channels, height, width) # 定义合适的尺寸 dummy_input = torch.randn(*input_size) from torchsummary import summary model.eval() # 设置为评估模式 summary(model, input_size=input_size[1:]) # 调用summary并指定除批次外的实际输入大小 ``` 2. **修改源代码** 对于更复杂的情况或是第三方库版本较旧的情况下,可以直接编辑安装目录下的 `torchsummary.py` 文件,将所有涉及 `.size()` 的地方改为支持多种类型的逻辑判断。比如先检查变量是否具有所需的方法再决定如何处理它: ```python if isinstance(input, torch.Tensor): shape = list(input.size()) elif hasattr(input, '__len__'): try: shape = [len(input)] + list(input[0].size())[1:] except AttributeError as e: raise TypeError(f"Unsupported type {type(input)}") from e else: raise ValueError("Input must be either a tensor or an iterable of tensors.") ``` 3. **更新依赖包** 确认使用的 `torchsummary` 版本是最新的稳定版,开发者可能会已经针对此类问题进行了修正。可以通过 pip 工具轻松完成升级工作: ```bash pip install --upgrade torchsummary ``` 4. **自定义 Wrapper 类** 创建一个新的类继承自原始模块,并重写有问题的部分以适应不同的需求。这种方法的好处是不会影响全局环境中的原生库文件,同时也便于维护和分享自己的改进成果。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小花猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值