在开始前,确保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 # 安装基础依赖
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 # 激活虚拟环境(激活后命令行前会显示环境名)
PyTorch支持CPU和GPU(CUDA)加速,需根据硬件配置选择安装方式:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
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支持正常
以经典的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}%') # 输出测试准确率
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")定义设备,再用.to(device)迁移模型和数据)。torch.save(model.state_dict(), 'mnist_model.pth')保存模型参数,后续通过model.load_state_dict(torch.load('mnist_model.pth'))加载。通过以上步骤,即可在Ubuntu环境下完成PyTorch的安装与环境配置,并实现一个完整的深度学习项目。