核心要点

  • 继承 nn.Module 定义 forward

  • 配置 Dataset/DataLoader、loss、optimizer

  • 能写出完整训练/验证循环

  • 知道 model.train()/eval() 与设备迁移

简要回答

PyTorch 建模范式:定义 nn.Module 子类实现 forward → 准备 DataLoader → 选 loss 和 optimizer → 写训练循环(zero_grad、forward、backward、step)→ 验证与保存 checkpoint

标准回答

PyTorch 中创建并训练 神经网络 的标准步骤:

1. 定义模型:继承 nn.Module,在 init 中声明层,在 forward 中写前向逻辑。

python
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(784, 10)
    def forward(self, x):
        return self.fc(x.view(x.size(0), -1))
model = Net().to(device)

2. 数据管道Dataset + DataLoader(batch、shuffle、num_workers)。

3. 损失与优化器criterion = nn.CrossEntropyLoss()optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

4. 训练循环model.train() → 遍历 batch → zero_grad → forward → loss → backwardstep

5. 验证model.eval() + torch.no_grad() 算验证指标。

6. 持久化torch.save(model.state_dict(), 'ckpt.pt')

也可用 nn.Sequential 快速堆叠简单层。复杂架构(残差、注意力)建议自定义 Module。详见 深度学习基础

回答思路

  • 【定义】用一句话说清「在 PyTorch 中创建神经网络模型的步骤」

  • 【原理】讲清关键机制或步骤(2~3 点)

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

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

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

延伸学习

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

常见误区

⚠️ 常见踩坑

验证时忘记 model.eval() 导致 Dropout/BatchNorm 行为错误;训练时未 zero_grad;把 DataLoader 当无限流不控制 epoch 数。

追问

追问 1nn.Module 和 nn.Sequential 怎么选?

Sequential 适合线性堆叠层;需要多输入输出、跳跃连接、条件分支时必须自定义 Module。Sequential 本身也是 Module 子类。

追问 2model.to(device) 要注意什么?

模型和每批数据都要 .to(device);多 GPU 可用 nn.DataParallel 或 DistributedDataParallel。保存时建议存 state_dict 而非整个 model 对象。

追问 3如何实现早停(Early Stopping)?

监控验证 loss,若连续 N epoch 无改善则停止并恢复最佳 checkpoint。可用回调或手写逻辑,避免在验证集上过拟合超参。

🔗 相似问题

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

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

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