在centos系統(tǒng)上利用pytorch進(jìn)行深度學(xué)習(xí),需要分步操作:
一、pytorch安裝
您可以選擇Anaconda或pip兩種方式安裝PyTorch。
A. Anaconda安裝
-
下載Anaconda: 從Anaconda官方網(wǎng)站下載適用于centos系統(tǒng)的Anaconda3安裝包。按照安裝向?qū)瓿砂惭b。
-
創(chuàng)建虛擬環(huán)境: 打開終端,創(chuàng)建名為pytorch的虛擬環(huán)境并激活:
conda create -n pytorch Python=3.8 conda activate pytorch
-
安裝PyTorch: 在激活的pytorch環(huán)境中,使用conda安裝PyTorch。如果您需要GPU加速,請確保已安裝CUDA和cuDNN,并選擇相應(yīng)的PyTorch版本。以下命令安裝包含CUDA 11.8支持的PyTorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch
-
驗(yàn)證安裝: 啟動(dòng)Python交互式環(huán)境,運(yùn)行以下代碼驗(yàn)證PyTorch是否安裝成功,并檢查GPU可用性:
import torch print(torch.__version__) print(torch.cuda.is_available())
B. pip安裝
-
安裝pip: 如果您的系統(tǒng)未安裝pip,請先安裝:
sudo yum install python3-pip
-
安裝PyTorch: 使用pip安裝PyTorch,并使用清華大學(xué)鏡像源加速下載:
pip install torch torchvision torchaudio -f https://pypi.tuna.tsinghua.edu.cn/simple
-
驗(yàn)證安裝: 與Anaconda方法相同,運(yùn)行以下代碼驗(yàn)證安裝:
import torch print(torch.__version__) print(torch.cuda.is_available())
二、深度學(xué)習(xí)實(shí)踐
以下是一個(gè)簡單的MNIST手寫數(shù)字識別示例,演示如何使用PyTorch進(jìn)行深度學(xué)習(xí):
-
導(dǎo)入庫:
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms
-
定義模型: 這是一個(gè)簡單的卷積神經(jīng)網(wǎng)絡(luò) (cnn):
class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1) self.pool = nn.MaxPool2d(2, 2) self.fc1 = nn.Linear(32 * 14 * 14, 10) #調(diào)整全連接層輸入維度 def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = torch.flatten(x, 1) # 展平 x = self.fc1(x) return x
-
準(zhǔn)備數(shù)據(jù): 下載MNIST數(shù)據(jù)集并進(jìn)行預(yù)處理:
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform) test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1000, shuffle=False)
-
初始化模型、損失函數(shù)和優(yōu)化器:
model = SimpleCNN() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 使用Adam優(yōu)化器
-
訓(xùn)練模型:
epochs = 2 for epoch in range(epochs): running_loss = 0.0 for i, data in enumerate(train_loader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 100 == 99: print(f'[{epoch + 1}, {i + 1}] loss: {running_loss / 100:.3f}') running_loss = 0.0 print('Finished Training')
-
模型評估:
correct = 0 total = 0 with torch.no_grad(): for data in test_loader: images, labels = data outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Accuracy: {100 * correct / total}%')
這個(gè)例子提供了一個(gè)基本的框架。您可以根據(jù)自己的需求修改模型結(jié)構(gòu)、數(shù)據(jù)集和超參數(shù)。 記住在運(yùn)行之前創(chuàng)建./data目錄。 這個(gè)例子使用了Adam優(yōu)化器,通常比SGD收斂更快。 也調(diào)整了全連接層的輸入大小以適應(yīng)池化層后的輸出。