01 它是干嘛的
PyTorch 是一个用来搭建和训练神经网络的编程框架。它把「怎么算」和「怎么自动调参」这两件苦力活封装成简单的函数,让研究者把精力放在模型结构上。它最大的特点是「边写边跑」,调试体验接近普通程序员写脚本,因此在学术界迅速成为默认选择。
02 为什么会有它
在 PyTorch 之前:写 AI 像先画好整张图纸才能开工
早期的深度学习框架(如 TensorFlow 的第一代)用的是「先定义、后运行」的思路:你得先把整个计算过程像画图纸一样完整描述出来,编译成一张固定的图,然后才能把数据灌进去。图纸一旦画错,只能推倒重来,中间想打印一个变量的值看看都不行。
这对写代码的人是折磨。调 AI 模型本来就要反复试,改个结构、看个数、再改回来,循环几百次。而静态图让你每次改都得重新编译,看不到中间结果,出错时也不知道问题出在哪一层,研究进度被大量浪费在等待与猜测上。
PyTorch 换了个更自然的做法:它边算边记录,代码写到哪里就算到哪里,想在哪里插一句打印就插一句打印,和写普通 Python 脚本几乎没有区别。研究者在 2016 年之后逐渐用脚投票,把它推成了 AI 论文里出现最多的框架。
03 它怎么工作
训练的本质是反复做同一套动作:让模型先猜一次,拿它猜的结果和正确答案比较,算出差了多少,再顺着这个差距把模型里的数字微调一点点,如此循环成千上万次。
模型是怎么被「教」出来的:一次完整的训练闭环
- 1① 准备数据与答案
把训练样本(比如图片)和它们的正确答案(比如标签)成对准备,分批喂给模型。
- 2② 前向传播:让模型猜一次
数据穿过模型的各层,得到一次预测结果。这一步和推理时做的完全一样。
- 3③ 计算损失:量出差距
把预测结果与正确答案比较,算出一个表示「错了多少」的数字,这个数字叫损失。
- 4④ 反向传播:算出每个参数的责任
框架自动沿着计算过程倒推,算出每个参数对这个错误负多少责任,也就是梯度。
- 5⑤ 更新参数:朝正确方向挪一步
优化器按梯度把每个参数微调一点,让下次的损失更小,然后回到第 2 步继续循环。
04 谁在用它
AI 领域的论文与开源代码绝大多数基于 PyTorch,复现与对比实验最方便。
图像识别、目标检测、语音识别等任务,用现成的模型库几行代码就能搭起来。
Llama 这类开源大模型的微调工具链,几乎都以 PyTorch 为底座。
训练好用同一套代码导出模型,再部署到服务器或手机端,减少两套技术栈的割裂。
05 怎么用
门槛中等:需要会一点 Python 和线性代数,装好环境后就能跑通第一个例子。
- 01安装环境:用官方指引装好 Python 与 PyTorch,显卡用户注意选择对应显卡驱动的版本。
- 02先跑通官方教程里的一个完整例子(如识别手写数字),建立整体印象。
- 03把自己的数据整理成框架要求的格式,写成可以按批读取的数据集。
- 04搭一个简单模型,定义损失函数与优化器。
- 05写出训练循环:前向、算损失、反向、更新,观察损失是否在下降。
- 06训练完成后保存参数文件,再用它对新数据做预测,即推理。
import torch
import torch.nn as nn
# 1) 准备数据:输入与正确答案成对
x = torch.randn(64, 10)
y = torch.randint(0, 2, (64, 1)).float()
# 2) 定义模型、损失函数与优化器
model = nn.Sequential(nn.Linear(10, 16), nn.ReLU(), nn.Linear(16, 1), nn.Sigmoid())
loss_fn = nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
# 3) 循环多轮:前向 → 算损失 → 反向 → 更新
for step in range(100):
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print("训练完成,最终损失:", loss.item())避坑提示
- !每次反向传播前记得清空上一轮的梯度,否则梯度会累加,训练结果全乱。
- !数据要划分出验证集,只看训练集的表现会高估模型,实际一用就露馅。
- !训练很吃显存,遇到显存不足先减小每批的数据量,往往比换显卡更现实。
06 关键概念
- 神经网络
- 一层层相互连接的计算单元,负责从数据里找出规律,结构越复杂能表达的规律越多。
- 梯度
- 告诉每个参数「往哪个方向调、调多少」才能让错误变小的一组数字。
- 损失函数
- 用数字衡量模型这次猜得有多离谱,训练的目标就是让它越来越小。
- 动态图
- 边算边记录计算过程,因此可以随时插入调试、随时改结构,这是 PyTorch 的招牌。