python打卡训练营打卡记录day48
- 随机张量的生成:torch.randn函数
- 卷积和池化的计算公式(可以不掌握,会自动计算的)
- pytorch的广播机制:加法和乘法的广播机制
ps:numpy运算也有类似的广播机制,基本一致
作业:自己多借助ai举几个例子帮助自己理解即可
广播机制(Broadcasting)在PyTorch中的规则:
广播机制允许在不同形状的张量之间进行运算。它的基本规则是:
1. 从尾部(即维度从后往前)开始对齐,比较两个张量的每一个维度。
2. 两个维度必须相等,或者其中一个为1,或者其中一个不存在(即其中一个张量在该维度上没有大小),才能进行广播。
3. 广播会在缺失的维度(通过unsqueeze)和大小为1的维度上扩展(复制)数据。
例如:
张量A的形状为(3, 1, 5),张量B的形状为(2, 1):
从尾部对齐:
A: (3, 1, 5)
B: (2,1)
将B的形状与A的尾部对齐:即A的第三维(5)和B的第二维(1)对齐,A的第二维(1)和B的第一维(2)对齐,A的第一维(3)没有对应的,所以B要在前面加一个维度。
所以实际上,我们这样看:
A: 3×1×5
B: 1×2×1 (在B前面加了一个1,变成3维:1×2×1)
然后每个维度比较:
第一维:3和1 -> 1可以扩展成3
第二维:1和2 -> 1可以扩展成2
第三维:5和1 -> 1可以扩展成5
所以最终形状为(3,2,5)
规则:如果两个张量在某个维度上相同,或者其中一个为1,那么它们就是兼容的。如果其中一个张量在某个维度上缺失(即维度数少于另一个),那么就在该张量的形状前面补1,直到两个张量的维度数相同。
然后,在运算时,每个维度的大小会取两个张量在该维度上的最大值(前提是它们兼容)。
下面举几个例子:
例1:
A: (8,1,6,1)
B: (7,1,5)
首先,将B的维度数补齐到4维(在B前面加一个1):(1,7,1,5)
然后,比较每个维度:
dim0: 8和1 -> 8
dim1: 1和7 -> 7
dim2: 6和1 -> 6
dim3: 1和5 -> 5
所以广播后的形状为(8,7,6,5)
例2:
A: (3,1,5)
B: (1,2,1)
广播后形状为(3,2,5)
例3(不兼容):
A: (3,4)
B: (2,)
首先,将B的维度补齐:(1,2) 然后与A(3,4)比较:
第一维:3和1 -> 3
第二维:4和2 -> 4和2不相等,且都不是1,所以不能广播。
但是,如果B是(4,)呢?
A: (3,4)
B: (4,) -> 补齐为(1,4)
然后比较:第一维3和1 -> 3;第二维4和4 -> 4,所以可以广播成(3,4)
注意:在PyTorch中,我们通常使用加法、乘法等操作时会触发广播。
广播机制要点总结
核心价值:避免不必要的内存复制,提升计算效率
触发场景:所有逐元素操作(+, -, *, / 等)
应用场景:
归一化操作(张量 ± 标量)
特征图与偏置项相加
不同维度的张量运算
@浙大疏锦行