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.002. 动态计算图
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.003. 神经网络构建
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 实战