温馨提示×

Ubuntu如何利用PyTorch进行深度学习

小樊
47
2025-10-02 01:07:32
栏目: 智能运维

Ubuntu环境下使用PyTorch进行深度学习的完整流程

1. 准备工作:系统更新与基础依赖安装

在开始前,确保Ubuntu系统包是最新的,并安装构建PyTorch所需的工具和库:

sudo apt update && sudo apt upgrade -y  # 更新系统包
sudo apt install -y build-essential cmake git wget unzip yasm pkg-config libopenblas-dev liblapack-dev libjpeg-dev libpng-dev  # 安装基础依赖

2. 安装Python与虚拟环境工具

Ubuntu通常预装Python3,需确认pip(Python包管理器)已安装,并创建虚拟环境隔离项目依赖:

sudo apt install -y python3 python3-pip  # 安装Python3和pip
sudo apt install -y python3-venv  # 安装虚拟环境工具
mkdir pytorch_project && cd pytorch_project  # 创建项目目录
python3 -m venv pytorch_env  # 创建虚拟环境
source pytorch_env/bin/activate  # 激活虚拟环境(激活后命令行前会显示环境名)

3. 安装PyTorch(CPU/GPU版本选择)

PyTorch支持CPU和GPU(CUDA)加速,需根据硬件配置选择安装方式:

  • CPU版本(无GPU):直接通过pip安装官方提供的CPU版本:
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
    
  • GPU版本(需NVIDIA GPU)
    ① 先安装CUDA Toolkit(参考NVIDIA官方指南)和cuDNN(需注册NVIDIA开发者账号下载);
    ② 根据CUDA版本选择PyTorch安装命令(以CUDA 11.8为例):
    pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
    

验证安装
运行Python解释器,检查PyTorch版本及GPU可用性:

import torch
print("PyTorch版本:", torch.__version__)  # 输出版本号(如2.1.0)
print("CUDA可用性:", torch.cuda.is_available())  # 若为True,说明GPU支持正常

4. 深度学习项目实战:手写数字识别(MNIST数据集)

以经典的MNIST数据集为例,演示PyTorch的完整训练流程:

  • 数据预处理与加载
    使用torchvision.transforms对图像进行标准化(MNIST像素值范围为0-255,需归一化到[-1,1]),并通过DataLoader批量加载数据:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torchvision import datasets, transforms
    from torch.utils.data import DataLoader
    
    # 定义数据预处理:转Tensor并归一化(均值0.1307,标准差0.3081)
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.1307,), (0.3081,))
    ])
    
    # 加载训练集(50000张)和测试集(10000张)
    train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
    test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
    
    # 创建数据加载器(batch_size=64,训练集打乱顺序)
    train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
    test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
    
  • 定义神经网络模型
    构建一个简单的全连接网络(输入层784维→隐藏层128维→输出层10维,对应10个数字类别):

    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.fc1 = nn.Linear(28*28, 128)  # 输入层(28x28像素展平为784维)
            self.relu = nn.ReLU()             # 激活函数
            self.fc2 = nn.Linear(128, 10)     # 输出层(10个类别)
    
        def forward(self, x):
            x = x.view(-1, 28*28)  # 展平输入(batch_size, 784)
            x = self.relu(self.fc1(x))  # 第一层全连接+激活
            x = self.fc2(x)  # 输出层
            return x
    
    model = Net()  # 实例化模型
    
  • 定义损失函数与优化器
    使用交叉熵损失(适用于分类任务)和SGD优化器(学习率0.01):

    criterion = nn.CrossEntropyLoss()  # 交叉熵损失
    optimizer = optim.SGD(model.parameters(), lr=0.01)  # SGD优化器
    
  • 训练与评估模型
    迭代训练10个epoch(每个epoch遍历整个训练集),并在测试集上评估准确率:

    num_epochs = 10
    for epoch in range(num_epochs):
        # 训练阶段
        model.train()  # 设置模型为训练模式
        running_loss = 0.0
        for batch_idx, (data, target) in enumerate(train_loader):
            optimizer.zero_grad()  # 清空梯度
            output = model(data)   # 前向传播
            loss = criterion(output, target)  # 计算损失
            loss.backward()  # 反向传播
            optimizer.step()  # 更新参数
    
            running_loss += loss.item()
            if batch_idx % 100 == 0:  # 每100个batch打印一次损失
                print(f'Epoch [{epoch+1}/{num_epochs}], Step [{batch_idx}/{len(train_loader)}], Loss: {loss.item():.4f}')
    
        # 测试阶段
        model.eval()  # 设置模型为评估模式
        correct = 0
        total = 0
        with torch.no_grad():  # 不计算梯度
            for data, target in test_loader:
                output = model(data)
                _, predicted = torch.max(output.data, 1)  # 获取预测类别
                total += target.size(0)
                correct += (predicted == target).sum().item()
    
        print(f'Test Accuracy: {100 * correct / total:.2f}%')  # 输出测试准确率
    

5. 关键注意事项

  • GPU加速:若使用GPU版本PyTorch,需将模型和数据移动到GPU设备(通过device = torch.device("cuda" if torch.cuda.is_available() else "cpu")定义设备,再用.to(device)迁移模型和数据)。
  • 扩展项目:可通过修改模型结构(如添加卷积层)、调整超参数(学习率、batch_size)或更换数据集(如CIFAR-10)实现更复杂的深度学习任务。
  • 保存与加载模型:训练完成后,使用torch.save(model.state_dict(), 'mnist_model.pth')保存模型参数,后续通过model.load_state_dict(torch.load('mnist_model.pth'))加载。

通过以上步骤,即可在Ubuntu环境下完成PyTorch的安装与环境配置,并实现一个完整的深度学习项目。

0