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.float32torch.float64torch.int32torch.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 回归模型训练流程
基本步骤
- 准备特征数据
X和标签数据y - 用
TensorDataset构建数据集 - 用
DataLoader按批次加载数据 - 定义模型,例如
nn.Linear() - 定义损失函数,例如
nn.MSELoss() - 定义优化器,例如
optim.SGD() - 循环训练:前向传播、计算损失、清空梯度、反向传播、更新参数
典型代码
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不是dtypesrequires_grad不是requries_gradnn.MSELoss()不是nn.MSEloss()TensorDataset不是tensordatasetssubtract不是substracttorch.Tensor([1, 2, 3])默认会创建浮点张量- 自动微分张量转 NumPy 前要先
detach() loss.backward()要求loss通常是标量- 训练时要用
optimizer.zero_grad()清空梯度 cat不增加维度,stack会增加维度view要求连续张量,reshape更通用
11. 总结
PyTorch 是一个深度学习框架,核心包括 Tensor 张量计算、autograd 自动求导、nn 神经网络模块和 optim 优化器。
训练模型时,通常先用 TensorDataset 和 DataLoader 构建数据集,再定义模型、损失函数和优化器。训练循环中先前向传播得到预测值,再计算 loss,然后通过 optimizer.zero_grad() 清空梯度,调用 loss.backward() 反向传播计算梯度,最后用 optimizer.step() 更新模型参数。
Tensor 操作方面,需要掌握张量创建、类型转换、索引切片、形状变换、拼接堆叠、矩阵乘法和常用数学函数。