python中pytorch的广播机制——Broadcasting

news2024/11/17 4:51:08

广播机制

numpy 在算术运算期间采用“广播”来处理具有不同形状的 array ,即将较小的阵列在较大的阵列上“广播”,以便它们具有兼容的形状。Broadcasting是一种没有copy数据的expand

  • 不过两个维度不相同,在前面插入维度1
  • 扩张维度1到相同的维度

例如:Feature maps:[4,32,14,14]
Bias:[32,1,1]=>[1,32,1,1]=>[4,32,14,14]

A:[32,1,1]=>[1,32,1,1]=>[4,32,14,14]
B:[4,32,14,14]
这里就可以进行相同维度的相加

image


比如说一个[4,1]+[1,2]
那么这个[4,1]可以再复制列变为[4,2]
[1,2]可以再复制4行变为[4,2]

首先用1将那个小的维度的tensor扩展成大的维度相同的维度,然后将1扩张成两者的相同维度,如果有两个维度不相同,并且都不是1的话,则不能broadcasting

 

广播规则

当对两个 array 进行操作时,numpy 会逐元素比较它们的形状。从尾(即最右边)维度开始,然后向左逐渐比较。只有当两个维度 1)相等 or 2)其中一个维度是1 时,这两个维度才会被认为是兼容。

如果不满足这些条件,则会抛出 ValueError:operands could not be broadcast together 异常,表明 array 的形状不兼容。最终结果 array 的每个维度尽可能不为 1 ,是两个操作数各个维度中较大的值 。

例如,有一个 256x256x3 的 RGB 值图片 array ,需要将图像中的每种颜色缩放不同的值,此时可以将图像乘以具有 3 个值的一维 array 。根据广播规则排列这两个 array 的尾维度大小,是兼容的:

 图片(3d array): 256 x 256 x 3
缩放(1d array):             3
结果(3d array): 256 x 256 x 3

当比较的任一维度是 1 时,使用另一个,也就是说,大小为 1 的维度被拉伸或“复制”以匹配另一个维度。
在以下示例中,A 和 B 数组都有长度为 1 的维度,在广播操作期间扩展为更大的大小:

A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
result (4d array):  8 x 7 x 6 x 5

以二维为例,更加方便的解释“广播”:
已知 a.shape 是(5,1),b.shape 是(1,6),c.shape 是(6,),d.shape 是(), d 是一个标量, a, b, c,和 d 都可以“广播”到维度 (5,6);

a “广播”为一个 (5,6) array ,其中 a[:,0] 被“广播”到其他列,
b “广播”为一个 (5,6) array ,其中 b[0,:] 被广播到其他行,
c 类似于 (1,6) array ,其中 c[:] 广播到每一行,
d 是标量,“广播”为 (5,6) array ,其中每个元素都一样,重复d值。
 

A      (2d array):      2 x 1
B      (3d array):  8 x 4 x 3 # 倒数第二个维度不兼容
>>> a = np.array([[ 0.0,  0.0,  0.0],
...               [10.0, 10.0, 10.0],
...               [20.0, 20.0, 20.0],
...               [30.0, 30.0, 30.0]])
>>> b = np.array([1.0, 2.0, 3.0])
>>> a + b
array([[  1.,   2.,   3.],
        [11.,  12.,  13.],
        [21.,  22.,  23.],
        [31.,  32.,  33.]])
>>> b = np.array([1.0, 2.0, 3.0, 4.0])
>>> a + b
Traceback (most recent call last):
ValueError: operands could not be broadcast together with shapes (4,3) (4,)

 

 

在某些情况下,广播会拉伸两个 array 以形成一个大于任何一个初始 array 的结果 array 。 

>>> a = np.array([0.0, 10.0, 20.0, 30.0])
>>> b = np.array([1.0, 2.0, 3.0])
>>> a[:, np.newaxis] + b
array([[ 1.,   2.,   3.],
       [11.,  12.,  13.],
       [21.,  22.,  23.],
       [31.,  32.,  33.]])

 

newaxis 运算符将新轴插入到 a 中,使其成为二维 4x1 array 。将 4x1 array 与形状为 (3,) 的 b 组合,产生一个 4x3 array 。 

这里注意要都从右端进行匹配:
A:[                     ]
B:          [           ]
就是这样补充
我们看个例子吧:

a=torch.randn(2,3,4)
b=torch.randn(2,3)
a+b
#The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 2

image


但是这样是可以的

image


也就是(2,3,4)+(2,3)是不可以的,(2,3,4)+(3,4)是可以的,因为他们是右看齐的。

Situation 1:
▪ [4, 32, 14, 14]
▪ [1, 32, 1, 1] => [4, 32, 14, 14]

Situation 2
▪ [4, 32, 14, 14]
▪ [14, 14] => [1, 1, 14, 14] => [4, 32, 14, 14]

Situation 3
▪ [4, 32, 14, 14]
▪ [2, 32, 14, 14]
▪ Dim 0 has dim, can NOT insert and expand to same
▪ Dim 0 has distinct dim, NOT size 1
▪ NOT broadcasting-able

Situation 4
▪ [4, 32, 14, 14]
▪ [4, 32, 14]
这样是不行的,因为我们要右看齐,match from
last dim

Situation 5
▪ [4, 3, 32, 32]
▪ + [32, 32]
▪ + [3, 1, 1]
▪ + [1, 1, 1, 1]
这都是可以的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻盈百搭头戴式耳机——umelody轻律 U1头戴式复古耳机分享

最近买了款热门的轻律U1头戴式耳机,今天和大家来分享一下,看看究竟效果怎样呢? UMELODY轻律品牌将复古潮流文化结合与音频设备之中,一直以来致力于音频领域的研究和创新。产品外观定位时下流行之‘Retro Futurism’ “ 复古未来主…

软件测试工程师岗位核心任务

最近转正,需要完成一个OA任务,其中有一项“你认为软件测试工程师岗位核心任务是什么?”要求写出三到五条,并简单地阐明。 这个问题似乎很好回答,软件测试工程师不就是做测试?仅仅这样吗?小酋抠…

进程相关介绍(一)

目录 进程标识符 查看进程的标识符 ps axj | head -1&& ps axj | grep 程序名 ls /proc/进程标识符 获得进程标识符 getpid()函数 getppid()函数 创建一个子进程 fork函数解析 fork函数返回子进程的pid给父进程的原因 fork函数有两个返回值的原因 一个进程实质上就是一…

【每日一记】OSPF中Hello报文详讲

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

SpringBoot 实现EMQ设备的上下线告警

前言 上下线通知 我遇到了一个难题,即在使用EMQ X 4.4.10的开源版本时,我需要实现设备的上下线状态监控,但该4.4.10开源版本并未内置设备上下线提醒模块,只有企业版才内置了该模块。这为我带来了一些技术上的难题,迫…

远程办公软件的未来趋势:预测2023年及以后的发展方向

随着科技的迅速发展,远程办公已经成为现代工作方式的重要组成部分。远程办公软件在过去几年中取得了巨大的进步,并且在全球范围内被广泛使用。本文将探讨远程办公软件在2023年及以后可能的发展方向,包括增强的协作功能、智能化的辅助工具、改…

坦克 400 Hi4-T:用产品诠释越野新能源

9 月 25 日,坦克 400 Hi4-T 正式上市,新车共推出两款车型配置,售价区间 27.98-28.98 万元。同时,坦克 400 Hi4-T 将上市及即交付。 权益方面,坦克 400 Hi4-T 共有七重好礼: 质保无忧:整车 5 年…

02 认识Verilog HDL

02 认识Verilog HDL ‍ 对于Verilog的语言的学习,我认为没必要一开始就从头到尾认真的学习这个语言,把这个语言所有细节都搞清楚也不现实,我们能够看懂当前FPGA的代码的程度就可以了,随着学习FPGA深度的增加,再不断的…

Autosar诊断实战系列24-0x2E服务代码级分析及ECU-Pending期间的处理

本文框架 前言1. UDS-0x2E服务逻辑整理2. Pending期间ECU的处理3. 相关工程问题思考前言 开始本篇讲述前,先抛出几个问题,UDS 2E服务在执行过程中进行了哪些操作?在2E写期间由于要操作NvM,会执行时间较长导致ECU先回复NRC 0x78,这期间ECU在进行哪些处理?ECU是如何判断2E…

单目标应用:蚁群算法(Ant Colony Optimization,ACO)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、蚁群算法ACO 蚁群算法(Ant Clony Optimization, ACO)由意大利学者Colorni A., Dorigo M. 等于1991年提出&#xff0c…

开啥玩笑?一个SSD硬盘可以使用100多年?MTBF正解

在之前文章中,有一个参数“平均无故障时间”,对应的参数是MTBF,比如这个盘MTBF150万小时。 小编发现有一些朋友对这个参数还有误解。大家看到这个参数误认为盘可以使用150万小时都没有发生故障。如果真的是这样,那么这盘的质量简直…

基于springboot实现家具销售电商平台管理系统项目【项目源码+论文说明】

基于springboot实现家具销售电商平台管理系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的交易方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高&am…

【OSPF宣告——network命令与多区域配置实验案例】

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

ChatGLM2-6B微调实践-P-Tuning方案

ChatGLM2-6B微调实践 环境准备安装部署1、安装 Anaconda2、安装CUDA3、安装PyTorch4、安装 ChatGLM2-6B 微调实践1、准备数据集2、安装python依赖3、微调并训练新模型4、微调后模型的推理与评估5、验证与评估微调后的模型6、微调模型优化7、P-Tuning微调灾难性遗忘问题 微调过程…

vulnhub_Inferno靶机渗透测试

Inferno靶机 靶机地址:https://www.vulnhub.com/entry/inferno-11,603/ 文章目录 Inferno靶机信息收集web渗透获取权限横向移动权限提升靶机总结 信息收集 1.通过nmap扫描得到靶机开放22和80端口,看来是主web端渗透了 使用dirsearch目录扫描没得到结果…

【Mybatis】动态 SQL

动态 SQL \<if>标签\<trim>标签\<where>标签\<set>标签\<foreach>标签 动态 sql 是 Mybatis 的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 <if>标签 前端用户输入时有些选项是非必填的, 那么此时传到后端的参数是不确…

面试总结(mysql定精度/oom排查/spring三级缓存/stream流)

Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同&#xff0c;它是以字符串形式存储的。假设一个字段为DECIMAL(3,0)&#xff0c;当我们存入100时&#xff0c;实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…

Linux 基本指令(下)

时间相关的指令 date显示 date 指定格式显示时间&#xff1a; date %Y:%m:%d date 用法&#xff1a;date [OPTION]... [FORMAT] 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中常用的标记列表如下 %…

1010hw

using namespace std; class Per {friend const Per operator-(const Per &L,const Per &R);friend bool operator<(const Per &L,const Per &R);int a;int b; public://有参构造Per(int a,int b):a(a),b(b){}//无参构造Per(){}//运算符重载const Per opera…

MyBatis注解开发实现学生管理页面(分页pagehelper,多条件搜索,查看课程信息)

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …