核心要点

  • 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 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

工具:PyTorch。知识库:深度学习基础。术语:神经网络

常见误区

⚠️ 常见踩坑

误区一:容易答偏的地方:用 Sequential 硬塞残差连接;不知道 Sequential 也是 Module;复杂模型过度用 Sequential 导致代码难读。

追问

追问 1Sequential 能嵌套吗?

可以,nn.Sequential( conv_stack, nn.Sequential(fc_layers) ),仍要求整体前向是线性的,不能有跳跃连接。

追问 2ModuleList 和 Sequential 区别?

ModuleList 只注册子模块,不定义前向;需在 forward 里手动循环或索引。适合动态层数或共享块。

追问 3如何访问 Sequential 中某一层?

model[0] 或 model.layer_name(若用 OrderedDict 命名)。方便冻结前几层:for p in model[0].parameters(): p.requires_grad=False。

🔗 相似问题

同一考点的不同问法,换着练更稳

延伸学习

按主题分类的相关资源,便于系统复习