Tensorflow2.0之Broadcasting

ROS学习-写一个tf broadcaster(C++) 本博客主要介绍如果广播坐标框架到tf中。 我们将通过本博客以及后续一篇博客来重现tf 介绍教程中的例子。之后,我们再通过后续的教程来实现 tf 更高级的特性。 创建一个learning_tf包 开始之前,我们需要创建一个新的ros包(参考:ROS学习-创建一个Package包),假设包的名字为learning_tf,依赖于tf、roscpp 、rospy、和turtlesim 等包。 # 切换到自己的工作空间的src文件夹下 $ cd %YOUR_CATKIN_WORKSPACE_HOME%/src 阅读详情

Tensorflow2.0之Broadcasting

什么是Broadcasting:

Broadcasting 也叫广播机制(自动扩展也许更合适),它是一种轻量级张量复制的手段,在逻
辑上扩展张量数据的形状,但是只要在需要时才会执行实际存储复制操作。对于大部分场
景,Broadcasting 机制都能通过优化手段避免实际复制数据而完成逻辑运算,从而相对于tf.tile 函数,减少了大量计算代价。

对于所有长度为1 的维度,Broadcasting 的效果和tf.tile 一样,都能在此维度上逻辑复制数据若干份,区别在于tf.tile 会创建一个新的张量,执行复制IO 操作,并保存复制后的张量数据,Broadcasting 并不会立即复制数据,它会逻辑上改变张量的形状,使得视图上变成了复制后的形状。Broadcasting 会通过深度学习框架的优化手段避免实际复制数据而完成逻辑运算,至于怎么实现的用户不必关系,对于用于来说,Broadcasting 和tf.tile 复制的最终效果是一样的,操作对用户透明,但是Broadcasting 机制节省了大量计算资源,建议在运算过程中尽可能地利用Broadcasting 提高计算效率。

考虑的Y = X@W + 𝒃的例子,X@W的shape 为[2,3],𝒃的shape 为[3],我们可以通过结合tf.expand_dims 和tf.tile 完成实际复制数据运算,将𝒃变换为[2,3],然后与X@W完成相加。但实际上,我们直接将shape 为[2,3]与[3]的𝒃相加:

x = tf.random.normal([2,4])
w = tf.random.normal([4,3])
b = tf.random.normal([3])
y = x@w+b

上述加法并没有发生逻辑错误,那么它是怎么实现的呢?这是因为它自动调用Broadcasting函数tf.broadcast_to(x, new_shape),将2 者shape 扩张为相同的[2,3],即上式可以等效为:

y = x@w + tf.broadcast_to(b,[2,3])

也就是说,操作符+在遇到shape 不一致的2 个张量时,会自动考虑将2 个张量Broadcasting 到一致的shape,然后再调用tf.add 完成张量相加运算,这也就解释了我们之前一直存在的困惑。通过自动调用tf.broadcast_to(b, [2,3])的Broadcasting 机制,既实现了增加维度、复制数据的目的,又避免实际复制数据的昂贵计算代价,同时书写更加简洁高效。

那么有了Broadcasting 机制后,所有shape 不一致的张量是不是都可以直接完成运算?很明显,所有的运算都需要在正确逻辑下进行,Broadcasting 机制并不会扰乱正常的计算逻辑,它只会针对于最常见的场景自动完成增加维度并复制数据的功能,提高开发效率和运行效率。这种最常见的场景是什么呢?这就要说到Broadcasting 设计的核心思想。

Broadcasting 机制的核心思想是普适性,即同一份数据能普遍适合于其他位置。在验证普适性之前,需要将张量shape 靠右对齐,然后进行普适性判断:对于长度为1 的维度,默认这个数据普遍适合于当前维度的其他位置;对于不存在的维度,则在增加新维度后默认当前数据也是普适性于新维度的,从而可以扩展为更多维度数、其他长度的张量形状.

考虑 shape 为[ , 1]的张量A,需要扩展为shape:[𝑏, ℎ, , 𝑐],如图 4.7 所示,上行为欲扩展的shape,下面为现有shape:
在这里插入图片描述
首先将2 个shape 靠右对齐,对于通道维度c,张量的现长度为1,则默认此数据同样适合当前维度的其他位置,将数据逻辑上复制𝑐 − 1份,长度变为c;对于不存在的b 和h 维度,则自动插入新维度,新维度长度为1,同时默认当前的数据普适于新维度的其他位置,即对于其它的图片、其他的行来说,与当前的这一行的数据完全一致。这样将数据b,h 维度的长度自动扩展为b,h,如下图所示:

在这里插入图片描述
通过 tf.broadcast_to(x, new_shape)可以显式将现有shape 扩张为new_shape:

In [87]:
A = tf.random.normal([32,1])
tf.broadcast_to(A, [2,32,32,3])
Out[87]:
<tf.Tensor: id=13, shape=(2, 32, 32, 3), dtype=float32, numpy=
array([[[[-1.7571245 , -1.7571245 , -1.7571245 ],
[ 1.580159 , 1.580159 , 1.580159 ],
[-1.5324328 , -1.5324328 , -1.5324328 ],...

可以看到,在普适性原则的指导下,Broadcasting 机制变得直观好理解,它的设计是非常符合人的思维模式。
我们来考虑不满足普适性原则的例子,如下图所示:
在这里插入图片描述
在 c 维度上,张量已经有2 个特征数据,新shape 对应维度长度为c(𝑐 ≠ 2,比如c=3),那么当前维度上的这2 个特征无法普适到其他长度,故不满足普适性原则,无法应用Broadcasting 机制,将会触发错误:

In [88]:
A = tf.random.normal([32,2])
tf.broadcast_to(A, [2,32,32,4])
Out[88]:
InvalidArgumentError: Incompatible shapes: [32,2] vs. [2,32,32,4]
[Op:BroadcastTo]

在进行张量运算时,有些运算可以在处理不同shape 的张量时,会隐式自动调用Broadcasting 机制,如+,-,*,/等运算等,将参与运算的张量Broadcasting 成一个公共shape,再进行相应的计算,如图 4.10 所示,演示了3 种不同shape 下的张量A,B 相加的
例子:

在这里插入图片描述
简单测试一下基本运算符的自动Broadcasting 机制:

a = tf.random.normal([2,32,32,1])
b = tf.random.normal([32,32])
a+b,a-b,a*b,a/b

这些运算都能Broadcasting 成[2,32,32,32]的公共shape,再进行运算。熟练掌握并运用
Broadcasting 机制可以让代码更简洁,计算效率更高。

TensorFlow2.0(2):数学运算 1 基本运算:(+、-、*、/、//、%) 基本运算中所有实例都以下面的张量a、b为例进行: In [1]: import tensorflow as tf In [2]: a = tf.random.uniform([2, 3], minval=1, maxval=6,dtype=tf.int32) ...: b = tf.random.uniform([2, 3], minval=1,... 阅读详情

相关推荐

〖TensorFlow2.0笔记7〗TensorFlow2.0中的broadcasting!

tensorFlow2.0中的broadcasting! 文章目录一、broadcasting广播机制1.1、简单的例子理解二、why broadcasting? 为什么使用广播机制三、broadcastable? 什么时候能使用广播机制3.1、具体的例子理解3.2、广播机制的好处3.3、broadcast VS tile 一、broadcasting广播机制 是一个运行时的优化手段 1....

AI新视界 1584

tf.broadcast_to() 详解

语法: tf.broadcast_to( input, shape, name=None ) 作用:利用广播将原始矩阵成倍增加,广播是使数组具有兼容形状以进行算术运算的过程。 如果对于每个尺寸对,两个形状是相等的或其中之一是一个,则两个形状是兼容的。 举个栗子: >>>x = tf.constant([1, 2, 3]) >>>y = tf.broa...

Asdas_的博客 7650

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 436

tensorflow2.0中的Broadcasting用法

Broadcasting是tensorflow2.0中一个很重要的用法,张量维度扩张的手段,但是没有在数据层面上的复制。是一种数据优化的手段。高效且直观。 Broadcasting的机制 ①进行维度的扩展。 ②不进行数据的复制,不另外开辟空间。 ③本质和tf.tile不一样。 ④tf.broadcast_to 主要过程 1.给需要位置插入一个维度,例如[2,2,3,4]+[3,4]的运算,其中[3,4]这组数据,首先扩展为[1,1,3,4]. 2.给dim为1的扩展为所需要的数量。上面那个例子。[3,4]

starlet_kiss的博客 580

CS5511芯片实战:如何用DP转LVDS驱动高刷显示器(附配置代码)

本文详细解析了CS5511芯片在DP转LVDS高刷显示器驱动方案中的应用,包括核心架构、寄存器配置、时序优化及典型问题排查。通过实战案例和配置代码,帮助开发者快速实现120Hz高刷新率显示,特别适合医疗影像和工业HMI等严苛场景。

m3n5b7v8c9x的博客 1077

电磁炉线圈加热仿真全流程:用Ansys Maxwell分析涡流效应与热损耗

本文详细介绍了使用Ansys Maxwell进行电磁炉线圈加热仿真的全流程。通过构建2D轴对称涡流场模型,深入分析了高频下的涡流效应、趋肤效应与热损耗分布,为优化线圈设计、提升加热效率与均匀性提供了量化依据和实用指南。

sss66的博客 969

Tensor 数据结构与操作:张量的本质、广播机制与动态图差异

Python语法转换为 TF 图操作if ...:显式控制流包装print(...)Python 列表需使用替代Python 标量变量推荐全部转为 Tensor好的,那我们继续深入第三章,补充更多底层细节与高级用法tf.Tensor内部机制(storage layout、device 属性)和 AutoGraph 中的作用机制更高阶的广播技巧(多维广播陷阱)使用导出图结构和签名AutoGraph 中嵌套循环 + 梯度追踪的协同运作很多用户以为和冲突,其实它们是完全兼容的!

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1349

Python爬虫实战:携程/飞猪酒店信息爬取与动态价格分析

在当今数字化旅游时代,酒店预订平台的复杂筛选条件和动态定价机制为数据分析和价格监控带来了巨大挑战。本文将深入探讨如何使用最新的Python爬虫技术来抓取携程和飞猪平台的酒店信息,处理复杂的筛选条件,并解析动态价格数据。本文详细介绍了如何使用最新的Python爬虫技术来抓取携程和飞猪平台的酒店信息。通过结合httpxplaywrightparsel强大的反反爬虫能力:通过浏览器指纹伪装、请求签名、智能延迟等技术应对各种反爬措施高效的数据解析:使用CSS选择器和XPath精确提取所需信息灵活的数据存储。

2201_76125261的博客 414

tensotflow中tf.title()和tf.broadcast()

其中,input表示要复制的张量,multiples表示每个维度上复制的次数,可以是一个整数或一个整数列表。如果multiples是一个整数,则表示在所有维度上复制相同的次数;如果multiples是一个整数列表,则表示在每个维度上复制不同的次数。name表示操作的名称。tf.tile()函数会将输入张量沿着每个维度复制指定次数,得到一个新的张量。例如,如果输入张量的形状是multiples是一个整数列表,表示在第二个和第三个维度上复制两次,那么输出张量的形状会变为。结合一个例子来讲解一下假设有一个形状为。

Leiroy的博客 1113

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1109

嵌入式面试题精选100道及参考答案(4万字长文)

指针是C语言中一种特殊的变量,它存储的是另一个变量的内存地址。指针的使用提供了一种间接访问和操作内存的方法。地址操作:通过使用运算符,可以获取变量的地址,并将这个地址赋值给指针变量。间接引用:使用运算符可以访问指针指向的变量的值。动态内存分配:指针用于动态地分配和释放内存。数组操作:指针可以用于遍历和操作数组。函数参数:指针作为函数参数可以改变原始数据。字符串操作:在C语言中,字符串通常以字符数组的形式存在,并通过字符指针进行操作。// 指向数组的第一个元素i < 5;++i) {在这个例子中,

大模型大数据攻城狮的专栏 1973

tensorflow2.0基础之Broadcasting

tensorflow基础之Broadcasting

shengxing_stu的博客 168

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1606

Tensorflow2.0——3、Broadcasting

Broadcasting ■ expand ■ without copying data ■ VS tf.tile ■ tf. broadcast to key idea ■ Insert 1 dim ahead if needed ■ Expand dims with size 1 to same size Feature maps: [4, 32, 32, 3] Bias: [3]→[1,1,...

lzw964684894的博客 251

华为OD机试双机位C卷-分披萨 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【分披萨】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 分披萨。

qq_45776114的博客 1397

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

tensorflow2.0 的 Broadcasting

Broadcasting就是维度扩展的意思。将维度扩展成指定的要求,参与数学运算。 Broadcasting的前提是:1、维度为1,可以扩展。2、缺少维度,可以插入。除此之外,不能broadcasting。 Broadcasting是默认操作。并不需要明确调用。 Tf.broadcast_to:显示调用。显示的将第一个参数扩展成第二个参数。 Tile是...

葛明的博客 626

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

07. Tensorflow2.0中的broadcasting

1. Broadcasting 1.1. Outline expand without copying data VS tf.tile tf.broadcast_to 1.2. Key idea Insert 1 dim ahead if needed Expand dims with size 1 to same size Feature maps: [4, 32, 32, 3] B...

236

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

tensorflow 2.0 基础操作 之 Broadcasting机制

3.4_ BroadcastingBroadcasting 机制主要过程理解优点能否 Broadcasting练习tf.broadcast_toBroadcast VS Tile 张量维度扩张的手段,但是没有在数据层面上的复制。 是一种数据优化的手段。高效且直观。 Broadcasting 机制 expand without copying data VS tf.tile 进行数据层面上的 c...

记录求学阶段的技术学习、项目实践与成长思考。 3564

TensorFlow2.0学习笔记---broadcasting

之前遇到过一个问题,w@x +b 时, w@x.shape = [b,10] b.shape = [10] ,两个shape不一样的矩阵在数学上是不能相加的,但是为什么在TensorFlow这里可以相加呢,?broadcasting就是解决这个问题的。 从这个图中可以看出来,broadcasting的操作是将两个shape不同的矩阵进行数据平移复制,从而使他们可以相加。 shape中,靠右的维度是小维度,靠左的维度是大维度。从上面两个例子可...

希望和大家多多交流技术! 264

Tensorflow2.0笔记 - Broadcasting和Tile

Broadcasting和Tile扩展维度

vivo01的专栏 817

tensorflow2.0基本操作五broadcasting

#broadcasting----张量维度扩张的手段,是指对某一个维度重复N多次,它没有复制数据但是呈现出来其数据已经被扩张 #方法实现——tf.broadcast_to,原理:在旧维度上与要扩展的维度数不一致的地方填上1,然后将其扩展成对应的维度(比如[3,3]→[1,1,3,3]→[2,2,3,3]才能与[2,2,3,2]进行运算) #broadcasting操作的好处 #1,for real demanding#对每个维度的同时调整 #2,memory consumption#内存空间的节约

优快云XXCQ的博客 217

tensorflow2是指_【2】TensorFlow2.0:数学运算

本文授权转载自机器学习算法与Python实战禁止二次转载大家好,我是老表阅读文本大概需要 26分钟系列推文【1】TensorFlow2.0:基本数据结构——张量1 基本运算:(+、-、*、/、//、%) 基本运算中所有实例都以下面的张量a、b为例进行:import tensorflow as tfa = tf.random.uniform([2, 3], minval=1, maxva...

weixin_42358733的博客 198

Tensor的Broadcasting操作

针对tensorflow2.0版本 Broadcasting的主要特点:expand without copying data(扩展了维度,但是不复制数据,不占用内存空间) (1)隐式的Broadcasting tensor的一些操作符已经包含了Broadcasting,比如下面这个: In [3]: a = tf.random.normal([4,28,28,3]) In [4]: ...

Mrweng1996的博客 1147

取余运算怎么算_TensorFlow2.0(2):数学运算

点击“机器学习算法与Python实战”,“置顶”公众号重磅干货,第一时间送达TensorFlow2.0(1):基本数据结构——张量1 基本运算:(+、-、*、/、//、%) 基本运算中所有实例都以下面的张量a、b为例进行:import tensorflow as tfa = tf.random.uniform([2, 3], minval=1, maxval=6,dtype=tf.int...

weixin_39765869的博客 839

深度学习2.0-4.tensorflow的基础操作之维度变换与broadcasting

文章目录1.维度变换1.shape、reshape与ndim2.tf.transpose矩阵的转置3.增加一个维度或减少一个维度2.broadcasting3.数学运算1.元素2.矩阵相乘 1.维度变换 1.shape、reshape与ndim Views Reshape 2.tf.transpose矩阵的转置 View基于最新的content 3.增加一个维度或减少一个维度 2.broadcasting 张量维度的扩张手段,指对某一维度重复n次,但没有在数据上显示出来 小维度先右对齐,如

柳杰的博客 346

【2】TensorFlow2.0:数学运算

本文授权转载自机器学习算法与Python实战禁止二次转载大家好,我是老表阅读文本大概需要 26分钟系列推文【1】TensorFlow2.0:基本数据结构——张量1 基本运算:(+、-、...

简说Python的博客 830
上一篇: Tensorflow2.0之4维张量
下一篇: Tensorflow2.0之合并与分割
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值