[Pytorch]Broadcasting广播机制

news/2025/2/4 14:57:46/

文章目录

  • Broadcasting广播机制
    • Broadcastable
    • Broadcasting

Broadcasting广播机制

Broadcasting机制用于在不同维度的张量进行运算时进行维度的自动增加与扩展,Broadcasting机制使用的前提是两个参与运算的张量是可broadcastable的。

Broadcastable

怎样的两个向量是Broadcastable的,也就是可使用Broadcasting机制的?
规定右边的维度为小维度,即shape(2,32,13,13)中右边的13为最小的维度
张量x和张量y如果符合以下条件就是broadcastable的:

  • 将x的shape与y的shape按照最右边的最小维度对齐,从小维度开始向左看:对于每一个二者都有的维度,如果x在该维度的大小为1或y在该维度的大小为1或二者都是1,或者二者在该维度的大小都不是1但是二者维度大小相等。

例如:

example 1: x,y,z中任意两个张量是broadcastable的
x.shape = [2, 3, 4]
y.shape =     [3, 4]
z.shape =         [4]

对于x和z,按照小维度对齐后,在最小的维度上x和z的维度大小都是4,符合规则。
对于x和y,按照小维度对齐后,在最小的维度上x和y的维度大小都是4,在次小维度上x和y的维度大小都是3,也符合规则。

example 2:x,y不是broadcastable的
x.shape = [4, 5, 13, 13]
y.shape =      [4, 13, 1]

对于x和y,按照小维度对齐后,最小维度上y的维度大小为1,该维度符合,次小维度上x的维度大小和y的维度大小相等,该维度符合,但是在第三小维度上x的维度大小为5,而y的维度大小为4,二者非1且不相等,所以不符合broadcasting的规则。

Broadcasting

当两个broadcastable的符合broadcasting规则的张量在进行相加时,会自动使用维度增加和扩展运算使两个张量拥有相同的维度并计算,维度增加和扩展的规则如下:

  • 将x的shape与y的shape按照最右边的最小维度对齐,从小维度开始向左看:对于每一个二者都有的维度,将该维度扩展到二者的最大值;当其中一个张量的维度已经不存在,而另一个张量维度更多时,则给维度少的张量插入新的维度,使二者维度数量保持一致,同时也要将该维度扩展到二者中在该维度大小的最大值。

例如:

  • tensor a = [1, 2, 3]
  • tensor b = [10,
                      20,
                      30,
                      40]

将维度对齐后:

  • tensor b.shape = [4, 1]
  • tensor a.shape =     [3]

张量a和b扩展的详细过程:

  • 最小维度上,张量a的维度大小为3是最大值,张量b在该维度上扩展至大小3: [4,1] => [4,3]
  • 在次小维度上,张量a在该维度上不存在,则插入一个新的维度给张量a:[3] => [1,3]
  • 插入新的维度后在次小维度上,张量b在该维度上的维度大小为4是最大值,张量a在该维度上进行扩展至大小4:[1,3] => [4,3]
  • 维度扩展的方式就是在该维度上将原数据进行复制(逻辑复制,不开辟实际内存)
a = torch.tensor([1, 2, 3])
b = torch.tensor([[10],[20],[30],[40],
])
print(f"{a.shape} + {b.shape} = {(a+b).shape}")
print(a+b)

在这里插入图片描述

另一个示例:

x = torch.randint(0, 2, [3, 1])
y = torch.randint(0, 2, [4])
print(f"{x.shape} + {y.shape} = {(x+y).shape}")

在这里插入图片描述


http://www.ppmy.cn/news/528840.html

相关文章

英特尔hd630驱动_HD 630和驱动程序的兼容性问题

我的英语不是很好。 所以我用翻译google ...哈哈 我买了DESKMINI 110 细节 H110芯片组STX主板 英特尔g4600 CPU 三星ddr4 12800 4GB x 2ea 8GB 三星850 Evo SSD 500GB Windows 10 Home 64bit 我第一次安装LOL(英雄联盟),但我不能玩..因为fps 10~11(在游戏图形模式下…

32 x 8段液晶驱动HT1622 程序

软件平台IAR for STM8 V1.30 #include #define uchar unsigned char #define uint unsigned int #define LCD_ON 0x03 //启动偏压发生器 #define LCD_OFF 0x02 //关闭偏压发生器 #define SYS_DIS 0x00 …

hdoj2660

感觉这道题更像dp&#xff0c;但数据范围小&#xff0c;可以用dfs做 # include <iostream> # include <cstring> using namespace std; int n,k,m,a[25],b[25],ma,tmp,qian,sum,zl,mark[25];void dfs(int x,int y,int zhi,int w) {int i;if(yk&&w<m){i…

( SSD ; HHD ; HDD )

硬盘三大种类&#xff08;SSD&#xff1b;HHD&#xff1b;HDD&#xff09; 固态硬盘&#xff08;Solid State Drive&#xff09;: 用固态电子存储芯片阵列而制成的硬盘&#xff0c;由控制单元和存储单元&#xff08;FLASH芯片、DRAM芯片&#xff09;组成。固态硬盘在接口的规范…

SSOP24 LCD液晶驱动显示芯片VKL060兼容HT系列驱动芯片,适用于医疗仪器等产品资料

产品品牌&#xff1a;VINKA/永嘉微电 产品型号&#xff1a;VKL060 封装形式: SSOP24 概述 VKL060是15X4的字段式液晶显示驱动显示驱动芯片&#xff0c;工作电压2.5-5.5V&#xff0c;I2C串行接口&#xff0c;内置振荡电路&#xff0c;低功耗设计&#xff0c;适用于有段式LCD面板…

HT1622 驱动断码屏

目录 1、根据时序图了解通讯协议格式 2、写驱动函数 HT1622数据手册(嘉立创) 1、根据时序图了解通讯协议格式 根据HT1622数据手册中的时序图可知&#xff1a; 向HT1622传送指令时序图 向HT1622传送数据时序图 1&#xff09;从N1处可知&#xff0c;当CS处于低电平时&#xf…

图的广度优先遍历和深度优先遍历

前言&#xff1a;在上一篇博客我们学习了图的基本操作&#xff0c;包括图的建立、结点插入与删除等操作&#xff0c;怎么判断我们建立的图是否正确&#xff0c;很简单把它输出出来就是&#xff0c;但是如何输出它&#xff0c;这就是图的遍历问题了。 一.图的遍历 图的遍历是指…

Word技巧之【文档自动保存】

打工人的噩梦—电脑突然坏掉&#xff0c;文档还没保存&#xff01;你是否遇到这种情况&#xff1f; 如果Word文档设置了自动保存&#xff0c;就不用太过担心了&#xff0c;只需要几个简单的操作就能设置好。还不知道的小伙伴&#xff0c;跟着小编一起看看吧。 设置Word文档自动…