PyTorch 核心实战
PyTorch 是当前最主流的深度学习框架之一,掌握其核心 API 是入门深度学习的必经之路。
Tensor 张量运算
- 创建:
torch.tensor()、torch.zeros()、torch.ones()、torch.randn()、torch.arange() - 属性:
shape、dtype、device、requires_grad - 运算:
+-*/@(矩阵乘法)、torch.matmul、torch.mm - 变形:
reshape()、view()、transpose()、permute()、squeeze()、unsqueeze() - 索引与切片
- GPU 张量:
tensor.to('cuda')、tensor.cuda() - 与 NumPy 互转:
torch.from_numpy()、tensor.numpy()
Autograd 自动求导
requires_grad=True跟踪计算图backward()自动计算梯度grad属性查看梯度detach()分离计算图with torch.no_grad():推断时关闭梯度- 计算图动态构建(Define-by-Run)
nn.Module 模型构建
- 继承
nn.Module,实现__init__和forward - 内置层:
nn.Linear、nn.Conv2d、nn.LSTM、nn.Transformer - 激活函数:
nn.ReLU、nn.Sigmoid、nn.GELU - 损失函数:
nn.MSELoss、nn.CrossEntropyLoss、nn.BCELoss Sequential序贯模型
训练循环
python
for epoch in range(num_epochs):
for x, y in dataloader:
x, y = x.to(device), y.to(device)
pred = model(x)
loss = criterion(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()model.train()/model.eval()模式切换- 验证循环:
with torch.no_grad():
DataLoader 数据加载
Dataset接口:实现__len__和__getitem__TensorDataset包装张量DataLoader参数:batch_size、shuffle、num_workers、pin_memorytransforms数据增强:torchvision.transforms
优化器
torch.optim.SGD、Adam、AdamW、RMSpropoptimizer.zero_grad()清零梯度- 学习率调度:
torch.optim.lr_scheduler.StepLR、CosineAnnealingLR、ReduceLROnPlateau
模型保存与加载
torch.save(model.state_dict(), 'model.pth')model.load_state_dict(torch.load('model.pth'))- 保存完整模型 vs 仅保存参数
- 断点续训:保存 epoch + optimizer + loss
完整示例:手写数字分类
- MNIST 数据集加载
- 简单 CNN 模型
- 完整训练 + 验证 + 测试流程
总结
- Tensor + Autograd + nn.Module = PyTorch 三大核心
- Dataset + DataLoader = 数据管線
- 训练循环通用模板