绿豆沙の小窝

Back

PyTorch 入门

为什么选 PyTorch#

深度学习框架分两大阵营:PyTorch(Meta)和 TensorFlow(Google)。2026 年,PyTorch 已在学术界和工业界全面领先——论文复现、顶会代码、HuggingFace 生态几乎全基于 PyTorch。

核心优势:动态计算图(define-by-run),调试和修改跟在写 Python 一样自然。

安装#

# CPU 版
pip install torch

# CUDA 版(有 NVIDIA 显卡)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

# 验证
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
bash

张量:PyTorch 的基本单元#

张量(Tensor)就是多维数组,和 NumPy 的 ndarray 几乎一样,但可以在 GPU 上运算。

张量运算#

自动求导:深度学习的魔法#

# 需要求导的张量设置 requires_grad=True
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x[0]**2 + x[1]**3       # y = 4 + 27 = 31

# 反向传播
y.backward()
print(x.grad)   # dy/dx = [2*x0, 3*x1^2] = [4.0, 27.0]

# 梯度清零(每次 backward 前都需要)
x.grad.zero_()
python

训练循环中的标准 pattern:

# 典型训练一步
optimizer.zero_grad()   # 清零梯度
loss = model(x, y)      # 前向计算
loss.backward()         # 反向求梯度
optimizer.step()        # 更新参数
python

构建神经网络#

常用层速查#

nn.Linear(in, out)       # 全连接层
nn.Conv2d(in_c, out_c, k)# 二维卷积
nn.BatchNorm2d(c)        # 批归一化
nn.LayerNorm(dim)        # 层归一化(Transformer 标配)
nn.LSTM(in, hidden)      # LSTM 层
nn.Dropout(p)            # Dropout 正则化
nn.Embedding(vocab, dim) # 词嵌入层
python

激活函数#

F.relu(x)       # 最常用,负数归零
F.gelu(x)       # Transformer 标配
F.sigmoid(x)    # 输出 0~1,二分类
F.tanh(x)       # 输出 -1~1
F.softmax(x, dim=-1)  # 多分类概率
python

数据加载#

完整训练循环#

评估与预测#

@torch.no_grad()  # 关闭梯度计算,节省显存
def evaluate(model, loader):
    model.eval()
    correct = 0
    total = 0
    for data, target in loader:
        data, target = data.to(device), target.to(device)
        data = data.view(data.size(0), -1)
        output = model(data)
        _, predicted = output.max(1)       # 取概率最大的类别
        total += target.size(0)
        correct += predicted.eq(target).sum().item()
    return correct / total

print(f"准确率: {evaluate(model, test_loader):.2%}")
python

保存与加载#

# 保存(推荐保存 state_dict)
torch.save(model.state_dict(), 'model.pth')
# 保存 checkpoint(含优化器状态,方便断点续训)
torch.save({
    'epoch': epoch,
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'loss': loss,
}, 'checkpoint.pth')

# 加载
model = SimpleNet(784, 256, 10)
model.load_state_dict(torch.load('model.pth'))
model.eval()  # 推理模式
python

常见问题排查#

学习路线#

阶段内容预计时间
入门张量运算 + 自动求导1 天
基础自己写 MLP + 训练循环2 天
进阶CNN/LSTM/Transformer + 数据加载1 周
实战复现一篇论文的代码1-2 周
进阶torch.compile / FSDP / 混合精度边用边学

常用速查#

操作代码
张量创建torch.randn(n, m)
GPU 迁移x.to('cuda')
矩阵乘法x @ y.T
自动求导loss.backward()
定义模型class Net(nn.Module):
损失函数nn.CrossEntropyLoss()
优化器optim.Adam(model.parameters(), lr=1e-3)
数据加载DataLoader(dataset, batch_size, shuffle)
推理模式@torch.no_grad()
保存参数torch.save(model.state_dict(), path)
PyTorch 入门
https://lvdousha26.github.io/blog/pytorch-tutorial
Author lvdousha
Published at May 18, 2026