核心要点
继承 nn.Module 定义 forward
配置 Dataset/DataLoader、loss、optimizer
能写出完整训练/验证循环
知道 model.train()/eval() 与设备迁移
简要回答
PyTorch 建模范式:定义 nn.Module 子类实现 forward → 准备 DataLoader → 选 loss 和 optimizer → 写训练循环(zero_grad、forward、backward、step)→ 验证与保存 checkpoint。
标准回答
1. 定义模型:继承 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)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 → backward → step。
5. 验证:model.eval() + torch.no_grad() 算验证指标。
6. 持久化:torch.save(model.state_dict(), 'ckpt.pt')。
也可用 nn.Sequential 快速堆叠简单层。复杂架构(残差、注意力)建议自定义 Module。详见 深度学习基础。
回答思路
【定义】用一句话说清「在 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。可用回调或手写逻辑,避免在验证集上过拟合超参。
🔗 相似问题
同一考点的不同问法,换着练更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习
