ToolkitX
知识库工具箱

PyTorch 入门

动态图、autograd、nn.Module

30min·进阶

01. PyTorch 张量

PyTorch 使用动态计算图,张量操作更加灵活。 Tensor vs NumPy: - Tensor 支持 GPU 加速 - Tensor 支持自动微分 - 动态计算图(Define-by-Run)
python
import torch

# 创建张量
x = torch.tensor([1, 2, 3, 4, 5])
matrix = torch.randn(3, 4)  # 随机正态分布
zeros = torch.zeros(2, 3)
ones = torch.ones(2, 3)

# 张量属性
print("形状:", x.shape)
print("数据类型:", x.dtype)
print("设备:", x.device)

# 张量运算
a = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([4.0, 5.0, 6.0])
print(a + b)    # [5, 7, 9]
print(a * b)    # [4, 10, 18]
print(torch.dot(a, b))  # 32.0

# 自动微分
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 3 * x + 1
y.backward()
print("dy/dx =", x.grad)  # 7.0

02. 动态计算图

PyTorch 使用动态计算图(Define-by-Run),每次前向传播都会构建新的计算图。 优势: - 调试简单:可以使用 Python 调试器 - 灵活控制:可以改变网络结构 - 更直观:代码和计算图一致
python
import torch

# 动态计算图示例
x = torch.tensor(2.0, requires_grad=True)

# 每次前向传播构建新的计算图
def forward(x):
if x.item() > 0:
    return x ** 2
else:
    return -x

y = forward(x)
y.backward()
print("x=2 时梯度:", x.grad)  # 4.0

# 条件分支
x = torch.tensor(-3.0, requires_grad=True)
y = forward(x)
y.backward()
print("x=-3 时梯度:", x.grad)  # -1.0

03. 神经网络构建

PyTorch 使用 nn.Module 构建神经网络。 构建步骤: - 继承 nn.Module - 在 __init__ 中定义层 - 在 forward 中定义前向传播
python
import torch
import torch.nn as nn
import torch.optim as optim

class SimpleNet(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
    super(SimpleNet, self).__init__()
    self.fc1 = nn.Linear(input_size, hidden_size)
    self.relu = nn.ReLU()
    self.fc2 = nn.Linear(hidden_size, num_classes)

def forward(self, x):
    out = self.fc1(x)
    out = self.relu(out)
    out = self.fc2(out)
    return out

# 创建模型
model = SimpleNet(784, 128, 10)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练循环
for epoch in range(10):
# 前向传播
outputs = model(inputs)
loss = criterion(outputs, labels)

# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()

# 保存模型
torch.save(model.state_dict(), 'model.pth')

知识测验

1/6正确 0

PyTorch 动态计算图的主要优势是什么?

下一节

Scikit-learn 实战

下一节