温馨提示×

Ubuntu PyTorch深度学习教程

小樊
45
2025-10-18 23:06:57
栏目: 智能运维

Ubuntu下PyTorch深度学习实战教程

一、环境准备:系统依赖与工具安装

在Ubuntu上使用PyTorch前,需先安装系统级依赖和开发工具,确保后续步骤顺利进行。

  1. 更新系统包:运行sudo apt update && sudo apt upgrade -y,同步系统软件包列表并升级现有包。
  2. 安装Python与pip:Ubuntu 20.04及以上版本默认包含Python 3.8+,通过sudo apt install python3 python3-pip python3-venv -y安装Python解释器和包管理工具(venv用于创建虚拟环境)。
  3. 安装系统工具sudo apt install -y build-essential cmake git wget unzip yasm pkg-config libopenblas-dev liblapack-dev libjpeg-dev libpng-dev,这些工具用于编译PyTorch扩展或处理图像数据。

二、PyTorch安装:选择CPU/GPU版本

PyTorch支持CPU和GPU加速(需NVIDIA GPU及CUDA支持),推荐通过pipconda安装预编译版本。

1. 创建虚拟环境(隔离项目依赖)

python3 -m venv pytorch_env  # 创建名为pytorch_env的虚拟环境
source pytorch_env/bin/activate  # 激活环境(终端提示符会显示环境名)

2. 安装PyTorch

  • CPU版本(无GPU加速):
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
  • GPU版本(需CUDA支持,以CUDA 11.8为例):
    pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118

    注:CUDA版本需与GPU驱动兼容(可通过nvidia-smi查看驱动支持的CUDA版本)。

三、验证安装:确认PyTorch可用性

打开Python终端,运行以下代码验证安装:

import torch
print("PyTorch版本:", torch.__version__)  # 输出版本号(如2.1.0)
print("CUDA可用性:", torch.cuda.is_available())  # GPU版本应返回True

若输出版本号且torch.cuda.is_available()True,则安装成功。

四、深度学习基础流程:从数据到模型

1. 数据准备:使用torchvision加载MNIST数据集

MNIST是手写数字图像数据集(28x28像素),适合入门图像分类任务。

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 定义数据预处理:转换为张量并归一化(均值0.1307,标准差0.3081)
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载训练集(下载到./data目录)
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)  # 批大小64,打乱数据

# 加载测试集
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)

2. 构建模型:定义简单卷积神经网络(CNN)

CNN适合处理图像数据,通过卷积层提取特征。

import torch.nn as nn
import torch.nn.functional as F

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)  # 输入通道1(灰度图),输出通道32
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)  # 下采样
        self.fc1 = nn.Linear(64 * 7 * 7, 128)  # 全连接层(输入维度7x7x64,输出128)
        self.fc2 = nn.Linear(128, 10)  # 输出层(10个类别)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))  # 第一层卷积+ReLU+池化
        x = self.pool(F.relu(self.conv2(x)))  # 第二层卷积+ReLU+池化
        x = x.view(-1, 64 * 7 * 7)  # 展平张量(-1表示自动计算批量大小)
        x = F.relu(self.fc1(x))  # 全连接层+ReLU
        x = self.fc2(x)  # 输出层(无激活函数,用于分类)
        return x

model = CNN()  # 创建模型实例
print(model)  # 查看模型结构

3. 训练模型:定义损失函数与优化器

使用交叉熵损失(适用于分类任务)和Adam优化器(自适应学习率)。

import torch.optim as optim

criterion = nn.CrossEntropyLoss()  # 交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器(学习率0.001)

# 训练循环(5个epoch)
for epoch in range(5):
    model.train()  # 设置为训练模式
    running_loss = 0.0
    for images, labels in train_loader:
        optimizer.zero_grad()  # 清空梯度
        outputs = model(images)  # 前向传播
        loss = criterion(outputs, labels)  # 计算损失
        loss.backward()  # 反向传播
        optimizer.step()  # 更新参数
        running_loss += loss.item()
    print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader):.4f}")  # 打印平均损失

4. 评估模型:测试集准确率

model.eval()  # 设置为评估模式(关闭Dropout等层)
correct = 0
total = 0
with torch.no_grad():  # 不计算梯度
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)  # 获取预测类别(argmax)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f"Test Accuracy: {100 * correct / total:.2f}%")  # 输出测试集准确率

5. 保存与加载模型

# 保存模型参数
torch.save(model.state_dict(), 'mnist_cnn.pth')

# 加载模型参数
model = CNN()  # 重新创建模型实例
model.load_state_dict(torch.load('mnist_cnn.pth'))
model.eval()  # 设置为评估模式

五、常见问题解决

  1. CUDA版本不兼容:通过nvidia-smi查看驱动支持的CUDA版本,选择对应的PyTorch安装命令(如CUDA 12.1对应cu121)。
  2. 虚拟环境未激活:运行source pytorch_env/bin/activate激活环境,激活后终端提示符会显示环境名。
  3. 安装速度慢:使用国内镜像源(如清华源),例如pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

通过以上步骤,你可在Ubuntu上完成PyTorch环境搭建,并实现一个完整的图像分类任务。后续可尝试更复杂的模型(如ResNet)或迁移学习(如使用预训练的BERT模型处理NLP任务)。

0