[Pytorch]Broadcasting广播机制

这篇具有很好参考价值的文章主要介绍了[Pytorch]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)

[Pytorch]Broadcasting广播机制

另一个示例:

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

[Pytorch]Broadcasting广播机制文章来源地址https://www.toymoban.com/news/detail-509059.html

到了这里,关于[Pytorch]Broadcasting广播机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据分析之道-NumPy(四)】numpy广播机制

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2023年04月19日
    浏览(29)
  • pytorch 入门1-tensor 广播 view reshape

    tensor 的四则运算 broadcast 常见的构造Tensor的方法: out:

    2024年02月12日
    浏览(32)
  • 区块链记账流程,广播如何验证?区块链共识机制之POA

    目录 区块链记账流程,广播如何验证? 细说区块链共识机制之POA 利用区块链技术实现不记密码加密存

    2024年02月11日
    浏览(36)
  • redis发布订阅广播模式的使用&结合jeecg的Redis网关路由刷新机制

    本质和传统的消息发布和订阅机制是差不多的,但是相较于其他几款MQ产品,Redis的使用更加便捷,也更加轻量化,不需要搭建一套繁重的MQ框架。 但是也它致命的缺点,redis的消息不会被持久化,服务器出现问题,消息会丢失,导致数据问题。对于数据一致性要求比较高的场

    2023年04月20日
    浏览(57)
  • Tensorflow2.0笔记 - Broadcasting和Tile

            关于broadcasting的介绍,参考这篇文章。         https://blog.csdn.net/python_LC_nohtyp/article/details/104097417         运行结果

    2024年01月20日
    浏览(25)
  • pytorch注意力机制

    最近看了一篇大佬的注意力机制的文章然后自己花了一上午的时间把按照大佬的图把大佬提到的注意力机制都复现了一遍,大佬有一些写的复杂的网络我按照自己的理解写了几个简单的版本接下来就放出我写的代码。顺便从大佬手里盗走一些图片,等我有时间一起进行替换,

    2024年02月05日
    浏览(22)
  • Pytorch自动求导机制详解

    目录   1. 自动求导 1.1 梯度计算 1.1.1 一阶导数  1.1.2 二阶导数  1.1.3 向量  1.2 线性回归实战   在深度学习中,我们通常需要训练一个模型来最小化损失函数。这个过程可以通过梯度下降等优化算法来实现。梯度是函数在某一点上的变化率,可以告诉我们如何调整模型的参数

    2024年02月16日
    浏览(24)
  • MIMO Broadcasting for Simultaneous Wireless Information and Power Transfer

    在本节中,我们讨论了EH和ID接收器位于同一位置的情况,从而拥有与发射器相同的信道,即 G = H G = H G = H ,因此 N E H = N I D ≜ N N_{mathrm{EH}}=N_{mathrm{ID}} triangleq N N EH ​ = N ID ​ ≜ N 。我们首先研究了这种情况下问题(P3)的最优解,从中我们获得了R-E区域可实现的速率-功率对

    2024年01月18日
    浏览(31)
  • 一维pytorch注意力机制

    最近在研究一维数据,发现目前网络上的注意力机制都是基于二维来构建的,对于一维的,没有查到什么可直接加在网络中的代码,因此本次文章主要介绍常用的三种注意力机制–SENet,CBAM和ECA其一维的代码。 SE模块允许对特征重新校准,其核心是通过全连接层对全局信息学习

    2024年02月15日
    浏览(27)
  • 【深度学习注意力机制系列】—— SCSE注意力机制(附pytorch实现)

    SCSE注意力模块 (来自论文[1803.02579] Concurrent Spatial and Channel Squeeze Excitation in Fully Convolutional Networks (arxiv.org))。其对SE注意力模块进行了改进,提出了 cSE、sSE、scSE 三个模块变体,这些模块可以 增强有意义的特征,抑制无用特征 。今天我们就分别讲解一下这三个注意力模块。

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包