在centos系統(tǒng)上利用pytorch進行深度學習,需要分步操作:
一、pytorch安裝
您可以選擇Anaconda或pip兩種方式安裝PyTorch。
A. Anaconda安裝
-
下載Anaconda: 從Anaconda官方網站下載適用于centos系統(tǒng)的Anaconda3安裝包。按照安裝向導完成安裝。
-
創(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,并選擇相應的PyTorch版本。以下命令安裝包含CUDA 11.8支持的PyTorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch
-
驗證安裝: 啟動Python交互式環(huá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,并使用清華大學鏡像源加速下載:
pip install torch torchvision torchaudio -f https://pypi.tuna.tsinghua.edu.cn/simple
-
驗證安裝: 與Anaconda方法相同,運行以下代碼驗證安裝:
import torch print(torch.__version__) print(torch.cuda.is_available())
二、深度學習實踐
以下是一個簡單的MNIST手寫數字識別示例,演示如何使用PyTorch進行深度學習:
-
導入庫:
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms
-
定義模型: 這是一個簡單的卷積神經網絡 (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) #調整全連接層輸入維度 def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = torch.flatten(x, 1) # 展平 x = self.fc1(x) return x
-
準備數據: 下載MNIST數據集并進行預處理:
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)
-
初始化模型、損失函數和優(yōu)化器:
model = SimpleCNN() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 使用Adam優(yōu)化器
-
訓練模型:
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}%')
這個例子提供了一個基本的框架。您可以根據自己的需求修改模型結構、數據集和超參數。 記住在運行之前創(chuàng)建./data目錄。 這個例子使用了Adam優(yōu)化器,通常比SGD收斂更快。 也調整了全連接層的輸入大小以適應池化層后的輸出。