1. 什么是 PyTorch?
PyTorch 是一个开源的深度学习框架,由 Facebook’s AI Research Lab 开发。它基于动态图机制,具有灵活性和易用性,广泛应用于计算机视觉、自然语言处理等领域。
2. 安装 PyTorch
在开始之前,我们需要先安装 PyTorch。可以使用以下命令在终端中安装:
1
| pip install torch torchvision torchaudio
|
确认安装
安装完成后,可以通过执行以下代码验证安装是否成功:
1 2
| import torch print(torch.__version__)
|
3. PyTorch 基础
3.1 Tensor
Tensor
是 PyTorch 中的核心数据结构,类似于 NumPy 的数组,但支持 GPU 运算。
创建 Tensor
1 2 3 4 5
| import torch
x = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) print(x)
|
3.2 Tensor 运算
PyTorch 提供了丰富的数学运算,可以直接在 Tensor 上进行:
1 2 3 4 5 6 7 8
| y = torch.tensor([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]) z = x + y print(z)
a = torch.matmul(x, y.T) print(a)
|
3.3 转换 NumPy 数组
可以方便地在 PyTorch Tensor 和 NumPy 数组之间转换:
1 2 3 4 5 6 7 8 9 10
| import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]]) tensor = torch.from_numpy(array) print(tensor)
array_back = tensor.numpy() print(array_back)
|
4. 深度学习基础
4.1 神经网络
在 PyTorch 中可以使用 torch.nn
构建神经网络。
创建简单的神经网络
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import torch.nn as nn
class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(3, 2) self.fc2 = nn.Linear(2, 1)
def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x
model = SimpleNN() print(model)
|
4.2 训练模型
训练模型包括前向传播、计算损失、反向传播以及优化步骤。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| inputs = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) targets = torch.tensor([[1.0], [0.0]])
criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(100): model.train() optimizer.zero_grad()
outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step()
if (epoch+1) % 10 == 0: print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
|
5. 数据加载与预处理
5.1 使用 DataLoader
torch.utils.data
提供了用于处理数据集和批处理数据的工具。
示例代码
1 2 3 4 5 6 7 8 9
| from torch.utils.data import DataLoader, TensorDataset
dataset = TensorDataset(inputs, targets) dataloader = DataLoader(dataset, batch_size=1, shuffle=True)
for batch_inputs, batch_targets in dataloader: print(batch_inputs, batch_targets)
|
6. 实战案例:手写数字识别
6.1 数据集准备
使用 torchvision
加载 MNIST 数据集。
1 2 3 4 5 6 7 8 9 10
| import torchvision.transforms as transforms from torchvision import datasets
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ])
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True) train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
|
6.2 构建并训练模型
基于前面的知识,可以构建一个更复杂的模型来处理 MNIST。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class MNISTNN(nn.Module): def __init__(self): super(MNISTNN, self).__init__() self.fc1 = nn.Linear(28*28, 128) self.fc2 = nn.Linear(128, 10)
def forward(self, x): x = x.view(-1, 28*28) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x
model = MNISTNN() criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch in range(5): for images, labels in train_loader: optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() print(f'Epoch [{epoch+1}/5], Loss: {loss.item():.4f}')
|
7. 总结
通过本教程,我们从基础到实战,系统学习了 PyTorch。我们了解了 Tensor
的创建与运算,神经网络的构建与训练,以及如何处理数据集并应用于实际的深度学习任务。希望能帮助你在深度学习的旅程上起到良好的助推作用!