Python深度学习:PyTorch实战教程
在这个数据驱动的时代,深度学习已经成为解决复杂问题的利器。而PyTorch,作为最受欢迎的深度学习框架之一,以其简洁易用和强大的功能,吸引了无数开发者。本文将带你走进PyTorch的世界,通过一个实战项目,让你快速掌握PyTorch的核心用法。

初识PyTorch
PyTorch是一个基于Python的开源机器学习库,由Facebook的人工智能研究团队开发。它最大的特点是动态计算图(Dynamic Computational Graph),这使得它在调试和实验中非常灵活。
安装PyTorch
首先,确保你的Python环境已经搭建好。可以通过以下命令安装PyTorch:
pip install torch torchvision
项目背景:手写数字识别
我们将通过一个经典的手写数字识别项目,来学习PyTorch的基本操作。这个项目使用MNIST数据集,包含60000张训练图片和10000张测试图片。
导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
数据预处理
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
构建神经网络
我们将构建一个简单的全连接神经网络。
class Net(nn.Module):
def __init__(self):
super(Net, 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 = Net()
定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
训练模型
def train(model, device, train_loader, optimizer, epoch):
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
if batch_idx % 100 == 0:
print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} ({100. * batch_idx / len(train_loader):.0f}%)]\tLoss: {loss.item():.6f}')
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
for epoch in range(1, 11):
train(model, device, train_loader, optimizer, epoch)
测试模型
def test(model, device, test_loader):
model.eval()
test_loss = 0
correct = 0
with torch.no_grad():
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
test_loss += criterion(output, target).item()
pred = output.argmax(dim=1, keepdim=True)
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
print(f'\nTest set: Average loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} ({100. * correct / len(test_loader.dataset):.0f}%)\n')
test(model, device, test_loader)
总结
通过这个简单的手写数字识别项目,我们学习了PyTorch的基本操作,包括数据预处理、构建神经网络、定义损失函数和优化器、训练和测试模型。PyTorch的灵活性和易用性,使得它在深度学习领域独树一帜。希望这篇文章能帮助你快速入门PyTorch,开启你的深度学习之旅。
深度学习的世界浩瀚无垠,PyTorch只是你手中的一个工具,但有了它,你将能探索更多的可能性。继续学习,不断实践,你将在数据科学的大道上越走越远。
« 上一篇
Python计算机视觉:OpenCV入门教程