PyTorch 框架总结

1. 深度学习基础

深度学习是机器学习的一个分支,以人工神经网络为核心模型结构,通过多层非线性变换自动学习数据特征。

主要特点

  • 自动提取特征,减少人工特征工程
  • 依赖大量数据和较强计算能力
  • 能处理复杂的非线性关系
  • 可解释性相对较差

常见模型

  • ANN:人工神经网络
  • CNN:卷积神经网络,常用于图像任务
  • RNN:循环神经网络,常用于序列任务
  • Transformer:当前大模型的重要基础结构
  • GAN:生成对抗网络
  • BERT / GPT:典型自然语言处理模型

应用场景

  • NLP:聊天机器人、语音翻译、文本生成、大模型
  • CV:图像识别、图像分割、目标检测
  • 推荐系统:电商推荐、视频推荐、音乐/文章推荐
  • 多模态:文本、图像、语音等联合处理

2. PyTorch 核心概念

PyTorch 是一个深度学习框架,核心数据结构是 Tensor,支持张量计算、GPU 加速、自动求导、神经网络构建和模型训练。

核心模块:

  • torch:张量创建与运算
  • autograd:自动微分
  • torch.nn:神经网络层和损失函数
  • torch.optim:优化器
  • torch.utils.data:数据集与数据加载器

3. Tensor 张量基础

创建张量

torch.tensor(data, dtype=...)
torch.empty(size)
torch.arange(start, end, step)
torch.linspace(start, end, steps)
torch.rand(size)
torch.randn(size)
torch.randint(low, high, size)
torch.zeros(size)
torch.ones(size)
torch.full(size, fill_value)

常用补充:

  • torch.zeros_like(tensor):创建形状相同的全 0 张量
  • torch.ones_like(tensor):创建形状相同的全 1 张量
  • torch.full_like(tensor, value):创建形状相同的指定值张量

指定数据类型

torch.tensor([1, 2, 3], dtype=torch.float32)
tensor.float()
tensor.double()
tensor.int()
tensor.long()

常见类型:

  • torch.float32
  • torch.float64
  • torch.int32
  • torch.int64

4. Tensor 与 NumPy 转换

tensor.numpy()
torch.from_numpy(ndarray)
torch.tensor(ndarray)
tensor.item()

注意:

  • tensor.numpy() 与原 Tensor 通常共享内存
  • torch.from_numpy() 与原 NumPy 数组共享内存
  • torch.tensor(ndarray) 会复制数据,不共享内存
  • tensor.item() 用于提取单个元素的 Python 数值
  • requires_grad=True 的张量不能直接转 NumPy,需要先 detach()
tensor.detach().numpy()

5. Tensor 运算

基本运算

x + y
x - y
x * y
x / y

torch.add(x, y)
torch.sub(x, y)
torch.mul(x, y)
torch.div(x, y)
torch.neg(x)

带下划线的方法会修改原数据:

x.add_(y)
x.sub_(y)
x.mul_(y)
x.div_(y)

点乘与矩阵乘法

点乘是元素级乘法,要求形状能对应:

x * y
torch.mul(x, y)

矩阵乘法遵循行乘列规则:

x @ y
torch.matmul(x, y)

形状规则:

(n, m) @ (m, p) = (n, p)

常用函数

tensor.sum(dim=...)
tensor.mean(dim=...)
tensor.max(dim=...)
tensor.min(dim=...)
torch.sqrt(x)
torch.log(x)
torch.log2(x)
torch.log10(x)
torch.pow(x, exponent)
torch.exp(x)

dim 不写时,对所有元素计算;写 dim 时,沿指定维度计算。

6. Tensor 索引与形状操作

索引

tensor[0]
tensor[:, 0]
tensor[0:3]
tensor[0:5:2]
tensor[tensor[:, 0] > 10]

说明:

  • 正向索引从 0 开始
  • 反向索引从 -1 开始
  • : 表示取该维度的全部数据
  • 布尔索引用于按条件筛选数据

形状操作

tensor.reshape(shape)
tensor.view(shape)
tensor.squeeze(dim)
tensor.unsqueeze(dim)
tensor.transpose(dim0, dim1)
tensor.permute(dims)
tensor.contiguous()
tensor.is_contiguous()

重点:

  • reshape 更通用,连续和非连续张量通常都能处理
  • view 要求张量内存连续,不连续时先用 contiguous()
  • squeeze 删除维度值为 1 的维度
  • unsqueeze 增加一个维度值为 1 的维度
  • transpose 交换两个维度
  • permute 可以重新排列多个维度

7. Tensor 拼接

cat:拼接,不增加新维度

torch.cat([t1, t2], dim=0)

例子:

两个 [2, 3] 张量
cat dim=0 -> [4, 3]
cat dim=1 -> [2, 6]

stack:堆叠,会增加新维度

torch.stack([t1, t2], dim=0)

例子:

两个 [2, 3] 张量
stack dim=0 -> [2, 2, 3]
stack dim=1 -> [2, 2, 3]
stack dim=2 -> [2, 3, 2]

记忆:

cat 是沿已有维度拼接
stack 是新增一个维度后堆叠

8. 自动微分 autograd

自动微分用于计算梯度,梯度用于更新模型参数。

梯度下降更新公式:

w_new = w_old - lr * grad

常用概念:

  • requires_grad=True:让张量参与自动求导
  • loss.backward():反向传播,计算梯度
  • .grad:保存梯度值
  • optimizer.zero_grad():清空梯度
  • detach():从计算图中分离张量

示例:

w = torch.tensor(1.0, requires_grad=True)
loss = w ** 2
loss.backward()
print(w.grad)

注意:PyTorch 默认会累加梯度,所以每轮训练前要清零。

optimizer.zero_grad()

9. PyTorch 回归模型训练流程

基本步骤

  1. 准备特征数据 X 和标签数据 y
  2. TensorDataset 构建数据集
  3. DataLoader 按批次加载数据
  4. 定义模型,例如 nn.Linear()
  5. 定义损失函数,例如 nn.MSELoss()
  6. 定义优化器,例如 optim.SGD()
  7. 循环训练:前向传播、计算损失、清空梯度、反向传播、更新参数

典型代码

import torch
from torch import nn, optim
from torch.utils.data import TensorDataset, DataLoader

dataset = TensorDataset(X, y)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

model = nn.Linear(in_features, out_features)
loss_fn = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

for epoch in range(epochs):
for x_batch, y_batch in dataloader:
y_pred = model(x_batch)
loss = loss_fn(y_pred, y_batch)

optimizer.zero_grad()
loss.backward()
optimizer.step()

训练口诀:

前向预测 -> 计算损失 -> 梯度清零 -> 反向传播 -> 参数更新

英文记忆:

forward -> loss -> zero_grad -> backward -> step

10. 易错点速记

  • dtype 不是 dtypes
  • requires_grad 不是 requries_grad
  • nn.MSELoss() 不是 nn.MSEloss()
  • TensorDataset 不是 tensordatasets
  • subtract 不是 substract
  • torch.Tensor([1, 2, 3]) 默认会创建浮点张量
  • 自动微分张量转 NumPy 前要先 detach()
  • loss.backward() 要求 loss 通常是标量
  • 训练时要用 optimizer.zero_grad() 清空梯度
  • cat 不增加维度,stack 会增加维度
  • view 要求连续张量,reshape 更通用

11. 总结

PyTorch 是一个深度学习框架,核心包括 Tensor 张量计算、autograd 自动求导、nn 神经网络模块和 optim 优化器。

训练模型时,通常先用 TensorDatasetDataLoader 构建数据集,再定义模型、损失函数和优化器。训练循环中先前向传播得到预测值,再计算 loss,然后通过 optimizer.zero_grad() 清空梯度,调用 loss.backward() 反向传播计算梯度,最后用 optimizer.step() 更新模型参数。

Tensor 操作方面,需要掌握张量创建、类型转换、索引切片、形状变换、拼接堆叠、矩阵乘法和常用数学函数。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇