python打卡训练营打卡记录day48

发布于:2025-06-09 ⋅ 阅读:(17) ⋅ 点赞:(0)
知识点回顾:
  1. 随机张量的生成:torch.randn函数
  2. 卷积和池化的计算公式(可以不掌握,会自动计算的)
  3. 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中,我们通常使用加法、乘法等操作时会触发广播。

广播机制要点总结

核心价值:避免不必要的内存复制,提升计算效率

触发场景:所有逐元素操作(+, -, *, / 等)

应用场景:

   归一化操作(张量 ± 标量)

   特征图与偏置项相加

   不同维度的张量运算

@浙大疏锦行


网站公告

今日签到

点亮在社区的每一天
去签到