# 创建张量 x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32) y = torch.randn(3, 3)
# 张量运算 z = torch.matmul(x, y) print(z.shape) # torch.Size([2, 3])
自动微分(Autograd)
PyTorch的autograd模块自动计算梯度,是神经网络训练的基础。
1 2 3 4
x = torch.tensor([1.0, 2.0], requires_grad=True) y = x ** 2 + 3 * x + 1 y.backward() print(x.grad) # tensor([5., 7.])
神经网络模块(nn.Module)
所有神经网络模型都继承自nn.Module:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
import torch.nn as nn
classSimpleNet(nn.Module): def__init__(self): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(784, 256) self.relu = nn.ReLU() self.fc2 = nn.Linear(256, 10) defforward(self, x): x = x.view(-1, 784) x = self.relu(self.fc1(x)) x = self.fc2(x) return x
训练循环
1 2 3 4 5 6 7 8 9 10 11
model = SimpleNet() criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch inrange(100): for batch_x, batch_y in dataloader: optimizer.zero_grad() outputs = model(batch_x) loss = criterion(outputs, batch_y) loss.backward() optimizer.step()
GPU加速
1 2
device = torch.device('cuda'if torch.cuda.is_available() else'cpu') model = model.to(device)
总结
PyTorch凭借其简洁的API和动态图特性,已成为深度学习研究的首选框架。
graph LR
A[数据] --> B[DataLoader]
B --> C[模型]
C --> D[损失函数]
D --> E[优化器]
E --> F[反向传播]
F --> C