Python深度学习:PyTorch实战教程

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

Python深度学习: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爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读