本节你会学到
- 说清楚「一个 PyTorch 模型训练的完整流程」解决的核心问题
- 知道它在「AI 入门与 PyTorch 基础(1~20)」中的位置
- 把 DataLoader、Linear 层、Pipeline 这些关键词联系起来
从准备数据、定义模型、选择损失函数和优化器,到训练循环和验证评估,把 PyTorch 训练主线串起来。
学习路线:AI 入门与 PyTorch 基础(1~20) · 第 18 课
从 AI 基本概念、机器学习任务、深度学习直觉、PyTorch 入门到中文文本分类项目全貌。
学完本阶段你能做到:能说清 AI、机器学习、深度学习、PyTorch 训练流程和一个中文文本分类项目的大致链路。
推荐读法:零基础建议顺序阅读;已有基础的读者可以把它当作路线地图和查漏补缺清单。
查看完整阶段 · 20 篇先看目标,再带着问题读正文。读完后用练习确认自己真的理解了。
先检查模型参数、输入 Tensor、标签 Tensor 是否在同一个设备上。常见修正是把它们统一 `.to(device)`。
因为训练是否正确经常取决于 shape、dtype、device 和梯度流,API 名字只能告诉你工具,不会保证数据契约正确。
`输入数据 → forward → loss → backward → optimizer.step()`,并知道本文主题位于这条链路的哪一环。
学 PyTorch 时,单个概念看懂不难,真正容易乱的是完整训练流程。
这篇文章先不追求复杂模型,只把一条最基础的训练主线串起来。
训练模型前,先要把数据整理成模型能吃的形式。
通常会经历几步:
如果数据这一步没处理好,后面模型再复杂也很难救回来。
PyTorch 里通常会继承 nn.Module 定义模型:
from torch import nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(10, 2)
def forward(self, x):
return self.linear(x)
这里 __init__ 定义模型有哪些层,forward 定义数据怎么流过这些层。
损失函数负责衡量模型预测错了多少。
分类任务常见:
loss_fn = nn.CrossEntropyLoss()
回归任务常见:
loss_fn = nn.MSELoss()
损失函数要和任务类型匹配,这一点很重要。
优化器负责根据梯度更新参数。
常见写法:
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
这里 model.parameters() 告诉优化器要更新哪些参数,lr 是学习率。
最核心的训练循环通常长这样:
for x, y in train_loader:
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
这几行非常重要。
可以按顺序理解:
这就是 PyTorch 训练模型的核心骨架。
训练时还需要在验证集上观察效果。
验证阶段通常不需要计算梯度,所以会写:
model.eval()
with torch.no_grad():
for x, y in val_loader:
pred = model(x)
这样可以减少显存占用,也避免误更新模型。
一个 PyTorch 训练流程可以压缩成这样:
数据 -> 模型 -> loss -> backward -> optimizer.step -> 验证
刚开始不要急着堆复杂结构。
先把这条主线真正跑通,后面再换模型、调参数、加可视化,都会轻松很多。
留言讨论