ubuntu

如何在Ubuntu上使用PyTorch进行迁移学习

小樊
47
2025-10-12 09:52:22
栏目: 智能运维

在Ubuntu上使用PyTorch进行迁移学习,可以按照以下步骤进行:

1. 安装必要的软件和库

首先,确保你的Ubuntu系统已经更新到最新版本,并且安装了Python和pip。

sudo apt update
sudo apt upgrade
sudo apt install python3 python3-pip

然后,安装PyTorch。你可以根据你的CUDA版本选择合适的PyTorch安装命令。访问PyTorch官网获取最新的安装命令。

例如,如果你有CUDA 11.7,可以使用以下命令安装PyTorch:

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117

2. 准备数据集

迁移学习通常需要一个预训练模型和一个新的数据集。你可以使用现有的数据集,如ImageNet、COCO等,或者自己收集数据。

假设你已经有了一个新的数据集,可以将其组织成以下结构:

data/
    train/
        class1/
            img1.jpg
            img2.jpg
            ...
        class2/
            img1.jpg
            img2.jpg
            ...
        ...
    val/
        class1/
            img1.jpg
            img2.jpg
            ...
        class2/
            img1.jpg
            img2.jpg
            ...
        ...

3. 加载预训练模型

使用PyTorch加载一个预训练模型。例如,加载ResNet18:

import torchvision.models as models
import torch.nn as nn

# 加载预训练的ResNet18模型
model = models.resnet18(pretrained=True)

4. 修改模型以适应新任务

根据你的新任务,可能需要修改模型的最后一层。例如,如果你有10个类别,可以将最后一层修改为:

# 修改最后一层以适应10个类别
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 10)

5. 定义损失函数和优化器

定义一个损失函数和优化器:

import torch.optim as optim

# 定义损失函数
criterion = nn.CrossEntropyLoss()

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

6. 训练模型

编写训练循环来训练模型:

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

# 定义数据预处理
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

# 加载数据集
train_dataset = datasets.ImageFolder('data/train', transform=transform)
val_dataset = datasets.ImageFolder('data/val', transform=transform)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)

# 训练模型
num_epochs = 10
for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    for inputs, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    
    print(f'Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_loader)}')

    # 验证模型
    model.eval()
    val_loss = 0.0
    correct = 0
    total = 0
    with torch.no_grad():
        for inputs, labels in val_loader:
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            val_loss += loss.item()
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    print(f'Validation Loss: {val_loss/len(val_loader)}, Accuracy: {100 * correct / total}%')

7. 保存和加载模型

训练完成后,可以保存模型:

torch.save(model.state_dict(), 'model.pth')

加载模型:

model.load_state_dict(torch.load('model.pth'))

通过以上步骤,你就可以在Ubuntu上使用PyTorch进行迁移学习了。

0
看了该问题的人还看了