在Ubuntu上訓練PyTorch模型的步驟如下:
首先,確保你的Ubuntu系統已經安裝了Python。推薦使用Python 3.6或更高版本。
sudo apt update
sudo apt install python3 python3-pip
訪問PyTorch官網,根據你的CUDA版本選擇合適的安裝命令。以下是使用pip安裝的示例:
CPU版本:
pip3 install torch torchvision torchaudio
GPU版本(CUDA 11.7):
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
你需要準備用于訓練的數據集。常見的做法是將數據集放在一個目錄中,并使用torchvision.transforms進行預處理。
import torchvision.transforms as transforms
import torchvision.datasets as datasets
transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomCrop(32, padding=4),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True, num_workers=2)
testset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False, num_workers=2)
你可以使用PyTorch提供的預定義模型,或者自己定義一個模型。
import torch.nn as nn
import torchvision.models as models
model = models.resnet18(pretrained=False)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 10) # CIFAR-10有10個類別
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
for epoch in range(10): # 多個epoch
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if i % 200 == 199: # 每200個batch打印一次
print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 200:.3f}')
running_loss = 0.0
print('Finished Training')
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total:.2f}%')
PATH = './cifar_net.pth'
torch.save(model.state_dict(), PATH)
model = models.resnet18(pretrained=False)
model.fc = nn.Linear(num_ftrs, 10)
model.load_state_dict(torch.load(PATH))
通過以上步驟,你可以在Ubuntu上訓練一個PyTorch模型。根據具體需求,你可以調整數據預處理、模型結構、損失函數和優化器等參數。