核心要点
Sequential 是 Module 子类,按序堆叠层
自定义 Module 需写 forward
复杂拓扑必须用 Module
理解二者包含关系
简要回答
nn.Sequential 是 nn.Module 的子类,按顺序串联子层,调用时依次执行;自定义 Module 需手写 forward,适合残差、多分支等复杂结构,Sequential 仅适合线性堆叠。
标准回答
一、nn.Sequential
是 nn.Module 的特化子类,将子模块按添加顺序串联:
示例代码可以这样理解:
model = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10),
)
out = model(x) # 依次通过各层
二、自定义
nn.Module**:
示例代码可以这样理解:
class ResBlock(nn.Module):
def init(self, dim):
super().init()
self.fc = nn.Linear(dim, dim)
def forward(self, x):
return F.relu(self.fc(x)) + x # 残差
三、对比
| Sequential | 自定义 Module | |
|---|---|---|
| forward | 自动串联 | 手动定义 |
| 适用 | 线性栈 | 残差、多输入、条件 |
| 灵活性 | 低 | 高 |
面试里不要只停在公式或名词,可以补 PyTorch 的 Sequential 模型是什么 对训练稳定性、泛化、收敛速度或显存/算力的影响。再说明一个常见调参或排错场景,面试官会更容易判断你真的用过这些方法。
四、关系
Sequential 是 Module;可用 nn.ModuleList 动态堆叠仍需自定义 forward。选型:简单 MLP/CNN 特征提取栈 → Sequential;ResNet、U-Net、Transformer → 自定义 Module。详见 PyTorch。
回答思路
【定义】用一句话说清「PyTorch 的 Sequential 模型是什么?与 Module」
【原理】讲清关键机制或步骤(2~3 点)
【例子】举一个真实项目、论文或产品中的例子
【对比】与易混淆概念或替代方案比较(如有)
【收尾】总结适用场景 + 一个局限或风险
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:用 Sequential 硬塞残差连接;不知道 Sequential 也是 Module;复杂模型过度用 Sequential 导致代码难读。
追问
追问 1:Sequential 能嵌套吗?
可以,nn.Sequential( conv_stack, nn.Sequential(fc_layers) ),仍要求整体前向是线性的,不能有跳跃连接。
追问 2:ModuleList 和 Sequential 区别?
ModuleList 只注册子模块,不定义前向;需在 forward 里手动循环或索引。适合动态层数或共享块。
追问 3:如何访问 Sequential 中某一层?
model[0] 或 model.layer_name(若用 OrderedDict 命名)。方便冻结前几层:for p in model[0].parameters(): p.requires_grad=False。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
