PyTorch 深度学习快速入门教程 🚀
PyTorch 是一个 灵活且易用 的深度学习框架,支持 动态图计算,广泛用于 学术研究 和 工业应用。本教程将带你快速掌握 PyTorch 的 基本用法,涵盖 张量(Tensor)操作、自动求导(Autograd)、构建神经网络 以及 模型训练。
1. 安装 PyTorch 🔧
在终端或命令行中运行以下命令安装 PyTorch:
pip install torch torchvision torchaudio
安装 CUDA 版本(如果有 NVIDIA GPU):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
🔹 可前往 PyTorch 官网选择合适版本:https://pytorch.org/get-started/locally/
2. PyTorch 基础:张量(Tensor) 🧮
张量(Tensor
)是 PyTorch 的 核心数据结构,类似于 NumPy 的 ndarray
,但 支持 GPU 加速。
创建张量
import torch# 直接创建
x = torch.tensor([[1, 2], [3, 4]])
print(x)# 全 0 / 全 1 / 随机张量
zeros = torch.zeros((2, 3))
ones = torch.ones((2, 3))
rand = torch.rand((2, 3)) # 0-1 之间的随机数
print(zeros, ones, rand)
张量运算
a = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([4.0, 5.0, 6.0])# 加法
print(a + b)# 矩阵乘法
mat1 = torch.rand((2, 3))
mat2 = torch.rand((3, 2))
print(torch.matmul(mat1, mat2)) # 矩阵相乘# 维度变换
x = torch.randn(4, 4)
y = x.view(2, 8) # 重新调整形状
print(y.shape)
使用 GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
x = torch.rand((3, 3)).to(device) # 发送到 GPU
print(x)
3. 自动求导(Autograd) 🔄
PyTorch 的 autograd
让 反向传播(Backpropagation) 变得 自动化,是 深度学习优化 的核心。
计算梯度
x = torch.tensor(2.0, requires_grad=True) # 需要计算梯度
y = x ** 3 + 3 * x# 反向传播
y.backward()# x 的梯度 dy/dx = 3x^2 + 3
print(x.grad) # 输出:15.0
4. 构建神经网络 🧠
PyTorch 提供了 torch.nn
用于构建 神经网络模型。
定义一个简单的 MLP(多层感知机)
import torch.nn as nn
import torch.nn.functional as Fclass MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.fc1 = nn.Linear(784, 128) # 输入层(28x28 展平为 784 维)self.fc2 = nn.Linear(128, 10) # 输出 10 类def forward(self, x):x = F.relu(self.fc1(x)) # ReLU 激活x = self.fc2(x) # 输出层(未加 Softmax)return x
5. 训练神经网络 🎯
使用 MNIST 手写数字 数据集,训练一个简单的分类器。
加载数据集
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])# 下载数据集
train_dataset = datasets.MNIST(root="./data", train=True, transform=transform, download=True)
test_dataset = datasets.MNIST(root="./data", train=False, transform=transform, download=True)# 创建 DataLoader
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
定义模型、损失函数、优化器
import torch.optim as optimmodel = MLP().to(device) # 使用 GPU
criterion = nn.CrossEntropyLoss() # 交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam 优化器
训练模型
for epoch in range(5): # 训练 5 轮for images, labels in train_loader:images = images.view(-1, 784).to(device) # 展平成 (batch, 784)labels = labels.to(device)# 前向传播outputs = model(images)loss = criterion(outputs, labels)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch [{epoch+1}/5], Loss: {loss.item():.4f}")
测试模型
correct = 0
total = 0
with torch.no_grad():for images, labels in test_loader:images = images.view(-1, 784).to(device)labels = labels.to(device)outputs = model(images)_, predicted = torch.max(outputs, 1) # 预测类别total += labels.size(0)correct += (predicted == labels).sum().item()print(f"Test Accuracy: {100 * correct / total:.2f}%")
6. 保存与加载模型 💾
保存模型
torch.save(model.state_dict(), "model.pth")
加载模型
model.load_state_dict(torch.load("model.pth"))
7. PyTorch 进阶
🔹 CNN(卷积神经网络):用于图像分类
🔹 RNN/LSTM(循环神经网络):用于 NLP、时间序列预测
🔹 Transformer/BERT:用于 NLP 任务
🔹 分布式训练:适用于大型数据集
你可以查阅官方教程深入学习:https://pytorch.org/tutorials/
8. 结语
你现在已经掌握了 PyTorch 的基本使用 🎉,可以尝试搭建自己的 深度学习模型!如果有任何问题,欢迎随时交流 😃🚀