核心要点
继承 nn.Module 定义 forward
配置 Dataset/DataLoader、loss、optimizer
能写出完整训练/验证循环
知道 model.train()/eval() 与设备迁移
简要回答
PyTorch 建模范式:定义 nn.Module 子类实现 forward → 准备 DataLoader → 选 loss 和 optimizer → 写训练循环(zero_grad、forward、backward、step)→ 验证与保存 checkpoint。
标准回答
一、先给出结论和背景
- 核心回答:在 PyTorch 中创建并训练 神经网络 的标准步骤:
- 定义模型:继承 nn.Module,在 init 中声明层,在 forward 中写前向逻辑。
示例代码可以这样理解:
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) - 数据管道:Dataset + DataLoader(batch、shuffle、num_workers)。
二、拆开关键步骤和判断点
- 损失与优化器:criterion = nn.CrossEntropyLoss();optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)。
- 训练循环:model.train() → 遍历 batch → zero_grad → forward → loss → backward → step。
三、补上落地边界和取舍
- 验证:model.eval() + torch.no_grad() 算验证指标。
- 持久化:torch.save(model.state_dict(), 'ckpt.pt')。
也可用 nn.Sequential 快速堆叠简单层。复杂架构(残差、注意力)建议自定义 Module。详见 深度学习基础。
面试里不要只停在公式或名词,可以补 在 PyTorch 中创建神经网络模型的步骤有哪些 对训练稳定性、泛化、收敛速度或显存/算力的影响。再说明一个常见调参或排错场景,面试官会更容易判断你真的用过这些方法。
回答思路
【定义】用一句话说清「在 PyTorch 中创建神经网络模型的步骤」
【原理】讲清关键机制或步骤(2~3 点)
【例子】举一个真实项目、论文或产品中的例子
【对比】与易混淆概念或替代方案比较(如有)
【收尾】总结适用场景 + 一个局限或风险
追问
追问 1:nn.Module 和 nn.Sequential 怎么选?
Sequential 适合线性堆叠层;需要多输入输出、跳跃连接、条件分支时必须自定义 Module。Sequential 本身也是 Module 子类。
追问 2:model.to(device) 要注意什么?
模型和每批数据都要 .to(device);多 GPU 可用 nn.DataParallel 或 DistributedDataParallel。保存时建议存 state_dict 而非整个 model 对象。
追问 3:如何实现早停(Early Stopping)?
监控验证 loss,若连续 N epoch 无改善则停止并恢复最佳 checkpoint。可用回调或手写逻辑,避免在验证集上过拟合超参。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
