天天看點

PyTorch 的 10 條内部用法

作者:冷凍工廠
PyTorch 的 10 條内部用法

歡迎閱讀這份有關 PyTorch 原理的簡明指南[1]。無論您是初學者還是有一定經驗,了解這些原則都可以讓您的旅程更加順利。讓我們開始吧!

1. 張量:構模組化塊

PyTorch 中的張量是多元數組。它們與 NumPy 的 ndarray 類似,但可以在 GPU 上運作。

import torch

# Create a 2x3 tensor
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(tensor)
           

2. 動态計算圖

PyTorch 使用動态計算圖,這意味着該圖是在執行操作時即時建構的。這為在運作時修改圖形提供了靈活性。

# Define two tensors
a = torch.tensor([2.], requires_grad=True)
b = torch.tensor([3.], requires_grad=True)

# Compute result
c = a * b
c.backward()

# Gradients
print(a.grad)  # Gradient w.r.t a
           

3.GPU加速

PyTorch 允許在 CPU 和 GPU 之間輕松切換。利用 .to(device) 獲得最佳性能。

device = "cuda" if torch.cuda.is_available() else "cpu"
tensor = tensor.to(device)
           

4. Autograd:自動微分

PyTorch 的 autograd 為張量上的所有操作提供自動微分。設定 require_grad=True 來跟蹤計算。

x = torch.tensor([2.], requires_grad=True)
y = x**2
y.backward()
print(x.grad)  # Gradient of y w.r.t x
           

5. 帶有 nn.Module 的子產品化神經網絡

PyTorch 提供 nn.Module 類來定義神經網絡架構。通過子類化建立自定義層。

import torch.nn as nn

class SimpleNN(nn.Module):

    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(1, 1)
        
    def forward(self, x):
        return self.fc(x)
           

6. 預定義層和損失函數

PyTorch 在 nn 子產品中提供了各種預定義層、損失函數和優化算法。

loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
           

7. 資料集和DataLoader

為了高效的資料處理和批處理,PyTorch 提供了 Dataset 和 DataLoader 類。

from torch.utils.data import Dataset, DataLoader

class CustomDataset(Dataset):
    # ... (methods to define)
    
data_loader = DataLoader(dataset, batch_size=32, shuffle=True)
           

8.模型訓練循環

通常,PyTorch 中的訓練遵循以下模式:前向傳遞、計算損失、後向傳遞和參數更新。

for epoch in range(epochs):
    for data, target in data_loader:
        optimizer.zero_grad()
        output = model(data)
        loss = loss_fn(output, target)
        loss.backward()
        optimizer.step()
           

9. 模型序列化

使用 torch.save() 和 torch.load() 儲存和加載模型。

# Save
torch.save(model.state_dict(), 'model_weights.pth')

# Load
model.load_state_dict(torch.load('model_weights.pth'))
           

10. Eager Execution and JIT

雖然 PyTorch 預設情況下以 eager 模式運作,但它為生産就緒模型提供即時 (JIT) 編譯。

scripted_model = torch.jit.script(model)
scripted_model.save("model_jit.pt")
           

Reference

[1]Source: https://medium.com/@kasperjuunge/10-principles-of-pytorch-bbe4bf0c42cd