You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2.7下PyTorch传递模块列表出现语法错误的解决方法

Python 2.7中nn.Sequential多列表解包的语法错误修复

这个问题我太熟悉了——你碰到的是Python版本之间的语法兼容坑!Python 2.7不支持在函数调用里连续使用多个*对可迭代对象进行解包,这个特性是Python 3.5及以后版本才新增的,所以你写的nn.Sequential(*list1, *list2)在Python2里直接触发语法错误。

给你两种在Python2.7下能正常运行的解决办法:

方法1:先合并列表,再一次性解包

最直观的方式是把两个模块列表先合并成一个大列表,再传入nn.Sequential:

# 合并两个模块生成函数返回的列表
down1_layers = make_conv_bn_relu(in_channels, 16, kernel_size=3, stride=1, padding=1) + \
               make_conv_bn_relu(16, 32, kernel_size=3, stride=2, padding=1)
# 解包合并后的列表传入Sequential
self.down1 = nn.Sequential(*down1_layers)

方法2:用itertools.chain链式合并(无额外列表变量)

如果不想多定义一个变量,可以用itertools.chain把多个列表链接成一个迭代器,再解包传入:

from itertools import chain

self.down1 = nn.Sequential(*chain(
    make_conv_bn_relu(in_channels, 16, kernel_size=3, stride=1, padding=1),
    make_conv_bn_relu(16, 32, kernel_size=3, stride=2, padding=1)
))

两种方法都能实现你想要的把多组Conv-BN-ReLU模块串进nn.Sequential的效果,完美适配Python2.7的语法限制。

内容的提问来源于stack exchange,提问作者Avijit Dasgupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:46:39