知识点回顾:
- 随机张量的生成:torch.randn函数
- 卷积和池化的计算公式(可以不掌握,会自动计算的)
- pytorch的广播机制:加法和乘法的广播机制
ps:numpy运算也有类似的广播机制,基本一致
- **
torch.randn
**:快速生成随机张量,适用于初始化和数据增强。 - 卷积与池化:通过滑动窗口提取局部特征,公式决定输出尺寸。
- 广播机制:自动扩展维度,简化代码逻辑,提升计算效率。
1. 随机张量的生成:
torch.randn
函数torch.randn
是 PyTorch 中用于生成服从标准正态分布(均值为 0,标准差为 1)的随机数的函数。其核心参数是张量的形状(*size
),其他参数如数据类型、设备(CPU/GPU)等为可选配置。关键特性:
- 形状参数:通过
*size
指定张量维度,例如torch.randn(3, 4)
生成一个 3x4 的张量。 - 可选参数:
dtype
:数据类型(默认float32
)。device
:指定设备(如cuda:0
表示 GPU)。requires_grad
:是否跟踪梯度(默认False
)。
- 应用场景:初始化神经网络权重、生成随机噪声等。
-
import torch # 生成 2x3 的标准正态分布张量 tensor = torch.randn(2, 3) print(tensor) # 生成均值为 2、标准差为 0.5 的正态分布张量 custom_tensor = torch.randn(2, 2, mean=2, std=0.5) print(custom_tensor)
2. 卷积和池化的计算公式
卷积和池化是深度学习中常用的特征提取操作,其核心是滑动窗口内的数学运算。
卷积计算公式(以一维为例):
离散卷积公式:
(f∗g)(n)=∑if(i)⋅g(n−i)(f * g)(n) = \sum_{i} f(i) \cdot g(n-i)(f∗g)(n)=∑if(i)⋅g(n−i) - 输入信号:长度为 MMM 的序列 xxx。
- 卷积核:长度为 NNN 的滤波器 hhh。
- 输出长度:M+N−1M + N - 1M+N−1(无填充且步长为 1)。
-
PyTorch 中的卷积参数:
kernel_size
:卷积核大小。stride
:滑动步长。padding
:填充大小。dilation
:卷积核元素间距。-
池化计算公式:
池化操作通过降维减少计算量,常用最大池化(Max Pooling)和平均池化(Average Pooling)。
- 输出尺寸:
Oheight=⌊Hin+2P−KS+1⌋O_{height} = \left\lfloor \frac{H_{in} + 2P - K}{S} + 1 \right\rfloorOheight=⌊SHin+2P−K+1⌋
Owidth=⌊Win+2P−KS+1⌋O_{width} = \left\lfloor \frac{W_{in} + 2P - K}{S} + 1 \right\rfloorOwidth=⌊SWin+2P−K+1⌋- Hin/WinH_{in}/W_{in}Hin/Win:输入高度/宽度。
- K:池化核大小。
- S:步长。
- P:填充大小。
-
示例:
输入特征图尺寸为 28×2828 \times 2828×28,使用 2×22 \times 22×2 的最大池化(步长 2,无填充),输出尺寸为 14×1414 \times 1414×14。
-
3. PyTorch 的广播机制
广播机制允许不同形状的张量进行逐元素运算(如加法、乘法),无需显式扩展内存。
广播规则:
- 维度对齐:从右向左逐一对齐维度,若维度大小相等或其中一个为 1,则兼容。
- 扩展维度:若张量缺少某维度,则在左侧补 1。
- 扩展大小为 1 的维度:将大小为 1 的维度扩展为另一张量的对应维度大小。
-
a = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 形状 (2, 3) b = torch.tensor([10, 20, 30]) # 形状 (3,) # 广播后 b 的形状变为 (2, 3) result = a + b print(result) # 输出: # tensor([[11, 22, 33], # [14, 25, 36]])