深度学习入门:使用 PyTorch 构建和训练你的第一个神经网络
引言
深度学习是机器学习的一个分支,它利用多层非线性处理单元(即神经网络)来解决复杂的模式识别问题。PyTorch 是一个强大的深度学习框架,它提供了灵活的 API 和动态计算图,非常适合初学者和研究者使用。
安装 PyTorch
确保安装了 Python 和 pip。然后通过以下命令安装 PyTorch:
pip install torch torchvision
导入库
我们需要导入一些必要的库:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
准备数据
首先,我们需要下载并加载 MNIST 数据集:
# 设置数据转换
transform = transforms.Compose([
transforms.ToTensor(), # 转换成 Tensor
transforms.Normalize((0.5,), (0.5,)) # 归一化
])
# 下载训练数据集
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=64, shuffle=True)
# 下载测试数据集
test_data = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(test_data, batch_size=64, shuffle=True)
定义模型
接下来定义我们的神经网络模型。这里我们使用一个简单的全连接网络:
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(28 * 28, 128) # 输入层到隐藏层
self.fc2 = nn.Linear(128, 64) # 隐藏层到隐藏层
self.fc3 = nn.Linear(64, 10) # 最后一层到输出层
def forward(self, x):
x = x.view(-1, 28 * 28) # 展平输入
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
model = SimpleNet()
定义损失函数和优化器
选择适当的损失函数和优化器:
criterion = nn.CrossEntropyLoss() # 多分类任务常用的损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01) # 使用随机梯度下降优化器
训练模型
现在我们可以开始训练模型:
num_epochs = 10
for epoch in range(num_epochs):
running_loss = 0.0
for i, (inputs, labels) in enumerate(train_loader, 0):
# 前向传播 + 反向传播 + 优化
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}")
测试模型
最后,我们需要评估模型在测试集上的性能:
correct = 0
total = 0
with torch.no_grad():
for data in test_loader:
images, labels = data
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total} %')
以上就是使用 PyTorch 构建和训练简单神经网络的完整过程。这个例子展示了如何从零开始建立一个基本的深度学习模型,并通过实际数据集对其进行训练和测试。随着你对 PyTorch 的了解加深,你可以尝试更复杂的模型结构和更高级的技术。