广播 (broadcasting)
飞桨(PaddlePaddle,以下简称Paddle)和其他框架一样,提供的一些API支持广播(broadcasting)机制,允许在一些运算时使用不同形状的张量。 通常来讲,如果有一个形状较小和一个形状较大的张量,希望多次使用较小的张量来对较大的张量执行一些操作,看起来像是较小形状的张量的形状,首先被扩展到和较大形状的张量一致,然后做运算。 值得注意的是,这期间并没有对较小形状张量的数据拷贝操作。
飞桨的广播机制主要遵循如下规则(参考 Numpy 广播机制 ):

  1. 每个张量至少为一维张量
  2. 从后往前比较张量的形状,当前维度的大小要么相等,要么其中一个等于一,要么其中一个不存在
    例如:
    import paddle

x = paddle.ones((2, 3, 4))
y = paddle.ones((2, 3, 4))

两个张量 形状一致,可以广播

z = x + y
print(z.shape)

[2, 3, 4]

x = paddle.ones((2, 3, 1, 5))
y = paddle.ones((3, 4, 1))

从后向前依次比较:

第一次:y的维度大小是1

第二次:x的维度大小是1

第三次:x和y的维度大小相等

第四次:y的维度不存在

所以 x和y是可以广播的

z = x + y
print(z.shape)

[2, 3, 4, 5]

相反

x = paddle.ones((2, 3, 4))
y = paddle.ones((2, 3, 6))

此时x和y是不可广播的,因为第一次比较 4不等于6

z = x + y

InvalidArgumentError: Broadcast dimension mismatch.

现在知道什么情况下两个张量是可以广播的,两个张量进行广播语义后的结果张量的形状计算规则如下:

  1. 如果两个张量的形状的长度不一致,那么需要在较小形状长度的矩阵向前添加1,直到两个张量的形状长度相等。
  2. 保证两个张量形状相等之后,每个维度上的结果维度就是当前维度上较大的那个。
    例如:
    import paddle

x = paddle.ones((2, 1, 4))
y = paddle.ones((3, 1))
z = x + y
print(z.shape)

z的形状: [2,3,4]

x = paddle.ones((2, 1, 4))
y = paddle.ones((3, 2))

z = x + y

ValueError: (InvalidArgument) Broadcast dimension mismatch.

Paddle广播 (broadcasting)相关推荐

  1. 2.15 Python 中的广播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.14 向量化 Logistic 回归的梯度输出 回到目录 2.16 关于 Python Numpy 向量的说明 Python 中的广播 (Broadcasting in ...

  2. numpy-自定义ufunc函数和广播

    import numpy as npdef triangle_wave(x, c, c0, hc):x = x - int(x) # 三角波的周期为1,因此只取 x 坐标的小数部分进行计算if x & ...

  3. 快速掌握TensorFlow中张量运算的广播机制

    相信大家在使用numpy和tensorflow的时候都会遇到如下的错误 ValueError: operands could not be broadcast together with shapes ...

  4. 07.Numpy广播和ufunc

    ufunc运算 ufunc 是 universal function 的缩写,它是一种能对数组的每个元素进行操作的函数.numpy 内置的许多 ufunc 函数都是在C语言级别实现的,因此它们的计算速 ...

  5. Eigen入门之密集矩阵 6 - Reductions, visitors and broadcasting

    简介 本文介绍一下Dense Matrix的3中操作: reduction, visitor, broadcasting. 归约计算reduction. Eigen的归约计算是这样的一类计算,它是对矩 ...

  6. NumPy 学习 第三篇:矢量化和广播

    矢量化 矢量化是指用数组表达式替换显式的for循环,在Python中循环数组或其他跟数组类似的数据结构时,使用循环会涉及很多开销.NumPy中的矢量化操作把内部循环委托给高度优化的C和Fortran函 ...

  7. numpy中矩阵运算的特点

    简 介: 在numpy中的一维和二维数组与线性代数中的矩阵和向量的概念有区别,也有联系.恰当掌握numpy中的矩阵运算特点可以大大提高程序的编写的效率.这其中需要不断的做斗争的就是区分一维向量与一维矩 ...

  8. PaddleNLP_基于seq2seq的对联生成

    知识点回顾 1.以下哪些场景涉及文本生成? A.机器翻译 B.垃圾邮件识别 C.智能写作 D.生成式文本摘要 答案 ACD 2.paddlenlp.datasets类和paddle.io.Datase ...

  9. PaddlePaddle高层API,基于seq2seq的对联生成

    PaddlePaddle高层API学习笔记与代码实践记录 课程链接:https://aistudio.baidu.com/aistudio/course/introduce/6771 对联,是汉族传统 ...

最新文章

  1. SAP QM Multiple Specifications的使用II
  2. linux重定向文件容加时间,linux – 如何在Bash中将stdout重定向到文件时添加时间戳?...
  3. 20190101.DDD笔记
  4. 【学术相关】U.S.News正式发布最新的2022最佳全球院校排名
  5. Boost:分配服务的实例
  6. Android中实现日期时间选择器(DatePicker和TimePicker)
  7. 达拉斯大学计算机硕士专业排名,美国大学研究生专业排名:人机交互
  8. Docker 内程序时间设置,很重要
  9. springboot多环境加载yml和logback配置
  10. 我们一定要有自立的飞秋觉悟
  11. python可以实现的功能_Python 实现某个功能每隔一段时间被执行一次的功能方法...
  12. 方案改进:直接通过User Control生成HTML
  13. 天空象棋——网站与用户
  14. python讲解-详解python中@的用法
  15. OpenCV3.4.2+VS2015开发环境搭建
  16. CSS ::before 和 ::after 伪元素用法
  17. 2PC 二阶段提交协议与3PC
  18. CSRF跨站请求伪造漏洞修复方案
  19. 触摸屏怎么禁止浏览器窗口的缩放
  20. radiogroup多选_为何多组RadioGroup 里面的RadioButton 会出现多选状态​?

热门文章

  1. 快速通过nginx配置域名访问
  2. 受用一生的高效 PyCharm 使用技巧(六)
  3. LeetCode简单题之买卖股票的最‭佳时机
  4. LeetCode简单题之数组中两元素的最大乘积
  5. LeetCode简单题之判断字符串的两半是否相似
  6. 2021年大数据ZooKeeper(六):ZooKeeper选举机制
  7. Cache Aside Pattern(缓存模式)
  8. 【CV】吴恩达机器学习课程笔记 | 第1-2章
  9. sh计算机,计算机教程:shellII(sh).pdf
  10. java程序语句是_Java-语言编程