1. 什么是 PyTorch? PyTorch 是一个开源的深度学习框架,由 Facebook’s AI Research Lab 开发。它基于动态图机制,具有灵活性和易用性,广泛应用于计算机视觉、自然语言处理等领域。
2. 安装 PyTorch 在开始之前,我们需要先安装 PyTorch。可以使用以下命令在终端中安装:
1 pip install torch torchvision torchaudio
确认安装 安装完成后,可以通过执行以下代码验证安装是否成功:
1 2 import torchprint (torch.__version__)
3. PyTorch 基础 3.1 Tensor Tensor
是 PyTorch 中的核心数据结构,类似于 NumPy 的数组,但支持 GPU 运算。
创建 Tensor 1 2 3 4 5 import torchx = 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 nparray = 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 nnclass 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():.4 f} ' )
5. 数据加载与预处理 5.1 使用 DataLoader
torch.utils.data
提供了用于处理数据集和批处理数据的工具。
示例代码 1 2 3 4 5 6 7 8 9 from torch.utils.data import DataLoader, TensorDatasetdataset = 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 transformsfrom torchvision import datasetstransform = 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():.4 f} ' )
7. 总结 通过本教程,我们从基础到实战,系统学习了 PyTorch。我们了解了 Tensor
的创建与运算,神经网络的构建与训练,以及如何处理数据集并应用于实际的深度学习任务。希望能帮助你在深度学习的旅程上起到良好的助推作用!