欢迎阅读这份有关 PyTorch 原理的简明指南。无论您是初学者还是有一定经验,了解这些原则都可以让您的旅程更加顺利。让我们开始吧!
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")