[Pytorch报错问题解决]AttributeError: ‘nn.Sequential‘ object has no attribute ‘append‘
问题
运行深度学习代码的时候遇到了以下报错问题:
Traceback (most recent call last):
File "/home/anaconda3/envs/Text2HOI/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 28, in decorate_context
return func(*args, **kwargs)
File "/media/Projects/Text2HOI/demo/demo.py", line 72, in main
seq_cvae = build_seq_cvae(config, test=True)
File "/media/Projects/Text2HOI/lib/utils/model_utils.py", line 75, in build_seq_cvae
seq_cvae = SeqCVAE(**args_cvae)
File "/media/Projects/Text2HOI/lib/networks/cvae.py", line 37, in __init__
self.encoder = Encoder(
File "/media/Projects/Text2HOI/lib/networks/cvae.py", line 120, in __init__
self.MLP.append(nn.Linear(in_dim, out_dim))
File "/home/anaconda3/envs/Text2HOI/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1177, in __getattr__
raise AttributeError("'{}' object has no attribute '{}'".format(
AttributeError: 'Sequential' object has no attribute 'append'
本人环境如下:
环境 | 版本 |
---|---|
CUDA | 11.1 |
Python | 3.9 |
Pytorch | 1.10.1 |
之所以会报错AttributeError: 'Sequential' object has no attribute 'append'
,是因为Pytorch在1.10.1版本中并没有给Sequential类加入append()方法,至少是在1.11.0版本中加入的,故我们这个Pytorch版本没法调用该方法。
Pytorch 1.11.0版本需要CUDA版本升级,但我CUDA环境也不好变动,服务器上其他人的环境都是依赖于这个CUDA版本的,故我们只能自己动手修改代码。
解决方法
打开定义Sequential的代码所在位置:anaconda3/envs/Text2HOI/lib/python3.9/site-packages/torch/nn/modules/container.py:
注释掉原先Sequential的代码:
进入Pytorch的Github官网,找到Sequential带有append方法的版本源码:
https://github.com/pytorch/pytorch/blob/v1.13.0/torch/nn/modules/container.py#L29
这里的v1.13.0可以根据你自己需要的版本更换,只要是v1.11.0以后的都带有 append 方法。
但是要注意一点的是,太新的Pytorch版本也有问题,以Pytoch v2.5.0为例,里面的Sequential代码用到了Python 11的新特性 Self,如果你贸然用最新版本的Pytorch,那你的Python环境可能也要进行相应更新。
打开源码网站链接后,把带有append方法的新Sequential代码复制,粘贴到你自己本地注释掉的Sequential代码位置下进行运行,问题解决。