PyTorch 常用方法与函数速查指南

PyTorch 常用方法与函数

PyTorch 是目前最流行的深度学习框架之一。本文档总结了 torch 库中使用频率最高的方法和函数,并附带了代码示例,方便快速查阅。

1. 张量创建 (Tensor Creation)

张量(Tensor)是 PyTorch 的核心数据结构,类似于 NumPy 的 ndarray,但支持 GPU 加速。

常用函数

函数描述
torch.tensor(data)直接从数据(如列表、NumPy 数组)创建张量
torch.zeros(shape)创建全 0 张量
torch.ones(shape)创建全 1 张量
torch.randn(shape)创建符合标准正态分布(均值0,方差1)的随机张量
torch.rand(shape)创建 [0, 1) 区间均匀分布的随机张量
torch.arange(start, end, step)创建等差数列张量
torch.from_numpy(ndarray)将 NumPy 数组转换为 Tensor(共享内存)

代码示例

import torch
import numpy as np

# 1. 直接创建
x = torch.tensor([[1, 2], [3, 4]])
print(f"Tensor:\n{x}")

# 2. 随机初始化 (3行4列)
rand_x = torch.randn(3, 4)

# 3. 全0和全1
zeros = torch.zeros(2, 2, dtype=torch.long) # 指定数据类型
ones = torch.ones(2, 2)

# 4. Numpy 互转
np_arr = np.array([1, 2, 3])
tensor_from_np = torch.from_numpy(np_arr)
back_to_np = tensor_from_np.numpy()

2. 张量属性与维度操作 (Shape & Manipulation)

深度学习中,90% 的 Bug 通常来自于维度(Shape)不匹配。

常用函数

函数描述
tensor.shape / tensor.size()获取张量形状
tensor.view(shape)改变形状(需数据连续),相当于 Reshape
tensor.reshape(shape)改变形状(更通用,必要时会复制数据)
tensor.unsqueeze(dim)在指定位置增加一个维度
tensor.squeeze(dim)压缩指定位置为 1 的维度
tensor.permute(dims)交换维度顺序(类似于转置,但支持多维)
torch.cat(tensors, dim)在指定维度拼接多个张量
torch.stack(tensors, dim)在新维度堆叠多个张量

代码示例

x = torch.randn(4, 3) # Shape: [4, 3]

# 1. 改变形状 [4, 3] -> [12]
flat_x = x.view(-1) 

# 2. 增加维度 [4, 3] -> [4, 1, 3]
expanded_x = x.unsqueeze(1)

# 3. 维度交换 [4, 3] -> [3, 4]
permuted_x = x.permute(1, 0)

# 4. 拼接
t1 = torch.randn(2, 3)
t2 = torch.randn(2, 3)
# 按行拼接 -> [4, 3]
cat_res = torch.cat([t1, t2], dim=0) 

3. 数学运算 (Math Operations)

PyTorch 支持丰富的数学运算,支持广播机制(Broadcasting)。

常用函数

函数描述
torch.add(x, y) / x + y加法
torch.mul(x, y) / x * y元素级乘法 (Element-wise)
torch.matmul(x, y) / x @ y矩阵乘法 (Matrix Multiplication)
torch.sum(x, dim)求和
torch.mean(x, dim)求平均值
torch.max(x, dim)求最大值(返回 values 和 indices)
torch.argmax(x, dim)返回最大值的索引

代码示例

x = torch.tensor([[1., 2.], [3., 4.]])
y = torch.tensor([[2., 2.], [2., 2.]])

# 1. 元素乘法
print(x * y) 
# 输出: [[2., 4.], [6., 8.]]

# 2. 矩阵乘法
print(x @ y) 
# 输出: [[6., 6.], [14., 14.]]

# 3. 聚合操作
print(x.sum())       # 所有元素求和
print(x.mean(dim=0)) # 按列求均值 -> [2., 3.]

4. 自动求导 (AutoGrad)

PyTorch 的核心功能,用于反向传播计算梯度。

核心概念

  • requires_grad=True: 告诉 PyTorch 追踪该张量的所有操作。
  • backward(): 自动计算梯度。
  • x.grad: 存储计算出的梯度值。
  • torch.no_grad(): 上下文管理器,用于推理阶段,停止梯度计算以节省显存。

代码示例

# 创建需计算梯度的张量
w = torch.tensor([2.0], requires_grad=True)
x = torch.tensor([3.0])
b = torch.tensor([1.0], requires_grad=True)

# 前向传播: y = w * x + b
y = w * x + b  # y = 2*3 + 1 = 7

# 反向传播
y.backward()

# 查看梯度
# dy/dw = x = 3
print(f"w.grad: {w.grad}") 
# dy/db = 1
print(f"b.grad: {b.grad}") 

5. 神经网络模块 (torch.nn)

torch.nn 提供了构建神经网络所需的层。

常用层

描述
nn.Linear(in, out)全连接层 (Dense Layer)
nn.Conv2d(in, out, k)2D 卷积层 (用于图像)
nn.LSTM(in, hidden)循环神经网络层
nn.ReLU() / nn.Sigmoid()激活函数
nn.Dropout(p)随机失活(防止过拟合)
nn.BatchNorm2d(features)批归一化

常用损失函数

  • nn.MSELoss(): 均方误差(用于回归)。
  • nn.CrossEntropyLoss(): 交叉熵损失(用于分类)。

代码示例

import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        # 定义层
        self.fc1 = nn.Linear(10, 50)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(50, 2)
    
    def forward(self, x):
        # 定义前向传播路径
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

model = SimpleNet()
input_data = torch.randn(5, 10) # Batch size=5, features=10
output = model(input_data)
print(output.shape) # [5, 2]

6. 优化器 (torch.optim)

用于更新模型参数。

常用优化器

  • torch.optim.SGD(params, lr, momentum)
  • torch.optim.Adam(params, lr)

典型训练步骤 (Boilerplate)

import torch.optim as optim

# 1. 定义模型和优化器
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 2. 模拟训练循环
for epoch in range(10):
    # 假设 data 和 targets 是数据
    data = torch.randn(5, 10)
    targets = torch.empty(5, dtype=torch.long).random_(2)
    
    # [关键步骤 1] 清空梯度
    optimizer.zero_grad()
    
    # [关键步骤 2] 前向传播
    outputs = model(data)
    loss = criterion(outputs, targets)
    
    # [关键步骤 3] 反向传播计算梯度
    loss.backward()
    
    # [关键步骤 4] 更新参数
    optimizer.step()
    
    print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

7. 设备管理 (CPU/GPU)

将张量或模型移动到显卡进行加速。

常用命令

命令描述
torch.cuda.is_available()检查 CUDA 是否可用
tensor.to(device)移动张量到指定设备
model.to(device)移动模型参数到指定设备
item.cpu()移回 CPU(如需转 numpy,必须先移回 CPU)

代码示例

# 检测设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 移动张量
x = torch.randn(3, 3).to(device)

# 移动模型
model = SimpleNet().to(device)

print(f"Running on: {device}")

8. 模型保存与加载

函数描述
torch.save(obj, path)保存模型或张量
torch.load(path)加载模型或张量
model.state_dict()获取模型参数字典(推荐保存方式)
model.load_state_dict(dict)加载参数字典

代码示例

# 推荐:只保存参数(权重)
torch.save(model.state_dict(), "model_weights.pth")

# 加载参数
model = SimpleNet() # 先实例化结构
model.load_state_dict(torch.load("model_weights.pth"))
model.eval() # 切换到评估模式

PyTorch 常用方法与函数速查指南
https://hb2cpc.top/2025/12/pytorch
作者
hb2cpc
发布于
2025年12月23日
许可协议