溫馨提示×

Ubuntu PyTorch遷移學習實踐

小樊
70
2025-05-20 06:48:46
欄目: 智能運維

在Ubuntu環境下進行PyTorch遷移學習的實踐涉及多個步驟,包括環境配置、數據加載、模型定義、訓練和測試等。以下是一個詳細的指南:

環境配置

  1. 安裝Ubuntu和必要的軟件包
  • 建議使用Ubuntu 18.04系統,因為Ubuntu 22.04和20.04可能會遇到一些問題。
  • 安裝顯卡驅動:使用ubuntu-drivers devices命令查看推薦的驅動型號,并使用sudo ubuntu-drivers autoinstall進行安裝。
  • 安裝CUDA和cuDNN:根據PyTorch官網的要求選擇合適的CUDA和cuDNN版本進行安裝,并修改環境變量以便系統識別。
  1. 安裝PyTorch
  • 在PyTorch官網找到適合CUDA版本的PyTorch安裝命令,并在Anaconda環境中進行安裝。

遷移學習實踐

  1. 加載數據集
  • 使用torchvision.datasets加載CIFAR-10數據集或其他自定義數據集,并進行必要的預處理。
  1. 定義模型
  • 使用torchvision.models加載預訓練模型(如ResNet18),并修改最后一層以適應新的任務需求。
  1. 訓練模型
  • 定義損失函數和優化器,編寫訓練和測試函數,并進行模型的訓練。

以下是一個簡單的PyTorch遷移學習示例代碼:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.models as models
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# 加載數據集
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
])

train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False, num_workers=4)

# 定義模型,加載預訓練參數
model = models.resnet18(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 10)

# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# 訓練模型
def train(model, train_loader, criterion, optimizer):
    model.train()
    for inputs, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

# 測試模型
def test(model, test_loader, criterion):
    model.eval()
    with torch.no_grad():
        total_loss = 0.0
        total_corrects = 0
        for inputs, labels in test_loader:
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            _, preds = torch.max(outputs, 1)
            total_loss += loss.item() * inputs.size(0)
            total_corrects += torch.sum(preds == labels.data)
        avg_loss = total_loss / len(test_loader.dataset)
        accuracy = float(total_corrects) / len(test_loader.dataset)
    return avg_loss, accuracy

# 訓練和測試模型
num_epochs = 10
for epoch in range(num_epochs):
    print('Epoch {}/{}'.format(epoch + 1, num_epochs))
    train(model, train_loader, criterion, optimizer)
    test_loss, test_acc = test(model, test_loader, criterion)
    print('Test loss: {:.4f}, Test acc: {:.4f}'.format(test_loss, test_acc))

請注意,為了獲得更好的性能,您可能需要調整超參數、使用數據增強技術或嘗試不同的模型架構。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女