PyTorch 該怎么學(xué)?太簡(jiǎn)單了
挺多小伙伴問過PyTorch該怎么學(xué),經(jīng)過長(zhǎng)期實(shí)踐來看,初學(xué)者需要熟知的概念和用法真的不多,以下總結(jié)的簡(jiǎn)明指南一起看看吧!
構(gòu)建Tensor
PyTorch 中的 Tensors 是多維數(shù)組,類似于 NumPy 的 ndarrays,但可以在 GPU 上運(yùn)行:
import torch
# Create a 2x3 tensor
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(tensor)
動(dòng)態(tài)計(jì)算圖
PyTorch 使用動(dòng)態(tài)計(jì)算圖,在執(zhí)行操作時(shí)即時(shí)構(gòu)建計(jì)算圖,這為在運(yùn)行時(shí)修改圖形提供了靈活性:
# 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
GPU加速
PyTorch 允許在 CPU 和 GPU 之間輕松切換。使用 .to(device) 即可:
device = "cuda" if torch.cuda.is_available() else "cpu"
tensor = tensor.to(device)
Autograd:自動(dòng)微分
PyTorch 的 autograd 為tensor的所有運(yùn)算提供了自動(dòng)微分功能,設(shè)置 requires_grad=True可以跟蹤計(jì)算:
x = torch.tensor([2.], requires_grad=True)
y = x**2
y.backward()
print(x.grad) # Gradient of y w.r.t x
模塊化神經(jīng)網(wǎng)絡(luò)
PyTorch 提供了 nn.Module 類來定義神經(jīng)網(wǎng)絡(luò)架構(gòu),通過子類化創(chuàng)建自定義層:
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)
預(yù)定義層和損失函數(shù)
PyTorch 在 nn 模塊中提供了各種預(yù)定義層、損失函數(shù)和優(yōu)化算法:
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
Dataset 與 DataLoader
為實(shí)現(xiàn)高效的數(shù)據(jù)處理和批處理,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)
模型訓(xùn)練(循環(huán))
通常PyTorch 的訓(xùn)練遵循以下模式:前向傳播、計(jì)算損失、反向傳遞和參數(shù)更新:
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()
模型序列化
使用 torch.save() 和 torch.load() 保存并加載模型:
# Save
torch.save(model.state_dict(), 'model_weights.pth')
# Load
model.load_state_dict(torch.load('model_weights.pth'))
JIT
PyTorch 默認(rèn)以eager模式運(yùn)行,但也為模型提供即時(shí)(JIT)編譯:
scripted_model = torch.jit.script(model)
scripted_model.save("model_jit.pt")