t1 = torch.tensor([[1,2],[3,4]
], dtype=torch.float32)
t2 = torch.tensor([[9,8],[7,6]
], dtype=torch.float32)

我们先创建了两个秩为2,形状为 2×22 \times 22×2的张量,这意味着我们有两个轴,他们都有两个元素的长度,第一个轴的元素是数组,第二个轴的元素是数字。


两个张量必须具有相同数量的元素才能执行一个element-wise操作。也就是说两个张量必须具有相同的形状才能执行一个元素操作,具有相同的形状意味着每一个对应的轴上有相同数量的轴,并且他们的长度相同。


在相应位置的每一对元素被加在一起,产生一个具有相同形状的新张量,所以加法是一个element-wise运算。所有其他的算数运算,比如减法、乘法、除法也是元素运算。

我们通常用张量看到的运算是使用标量值的算数运算,而下面这些例子打破了我们建立的规则,即元素的操作需要在张量有相同的形状的前提下进行,所有的标量值都是零阶张量,这就意味着他们没有形状,我们的张量t1是一个2×22 \times 22×2的二阶张量,那么这时如何调整的呢?

可能想到的第一个解决方案是,操作只是简单地使用单个标量值,并对一个张量中的每个元素进行操作,这种逻辑是可行的,然而这有点误导人,它打破了一个更普遍的情况,即我们没有使用标量的情况,要以不同的方式来思考这些操作,我们需要引入张量广播的概念。

广播定义了在元素操作过程中如何处理不同形状的张量。

我们重新考虑一下t1+2运算,标量张量被扩展到张量t1的形状,然后进行元素运算,通过对numpy函数的广播,我们可以看到在标量值上的广播是什么样子:

下面看一个稍微复杂一点的情况:

即使这些张量有不同的shape,但依然可以相加,这正是得益于广播机制,较低的秩向量t2将通过广播进行转换,以匹配更高阶张量t1的形状,而元素将像往常一样执行。我们可以使用广播到numpy函数来检查广播转换,然后运行操作:

可以看出t2被广播成了shape为2×22 \times 22×2的tensor,这样t1 + t2就是相同shape之间的操作。而这就是torch内部自动帮我们做的,我们无需手动执行广播。

Pytorch教程(十五):element-wise、Broadcasting相关推荐

  1. PyTorch教程(五):Broadcasting

    Broadcasting可以自动进行维度的扩展,而且不需要拷贝数据. 例如: import torcha = torch.rand(3,4) # tensor([[0.0422, 0.9152, 0. ...

  2. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 上一讲我们说了CubeMX配置SDRAM的一些基本配置,还有FMC跟SDRAM的讲解,这一讲我们 ...

  3. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(一)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 本文 1首先讲解什么是FMC及SDRAM,W9825G6KH芯片原理,2基于CubeMx创建工程 ...

  4. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  5. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...

  6. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云( ...

  7. nCode:DesignLife案例教程十五

    nCode:DesignLife 案例十五--蠕变分析 15.1 案例文件 15.2 目标 15.3 设计问题 在本案例中,我们将使用DesignLife的Creep Engine和Hybrid Lo ...

  8. WebGL简易教程(十五):加载gltf模型

    文章目录 1. 概述 2. 实例 2.1. 数据 2.2. 程序 2.2.1. 文件读取 2.2.2. glTF格式解析 2.2.2.1. 场景节点 2.2.2.2. 网格 2.2.2.3. 缓冲,缓 ...

  9. 【小白学习PyTorch教程】五、在 PyTorch 中使用 Datasets 和 DataLoader 自定义数据

    「@Author:Runsen」 有时候,在处理大数据集时,一次将整个数据加载到内存中变得非常难. 因此,唯一的方法是将数据分批加载到内存中进行处理,这需要编写额外的代码来执行此操作.对此,PyTor ...

  10. twisted系列教程十五–测试twisted代码

    Introduction 在这个系列中我们也已经写了很多twisted 代码了,但目前为止我们忽略了一个很重要的事情-测试.你可能也一直在想我们怎样用一个同步的测试框架unitest来测试我们的异步的 ...

最新文章

  1. python中的绘图模块turtle的使用
  2. rest-framework 响应器(渲染器)
  3. JavaScript网页换肤
  4. 阿里云边缘云荣获“分布式云创新奖”与“先进边缘云架构奖”
  5. 大型双标现场?摩托车举报特斯拉逆行反被罚
  6. 设计灵感|引导页设计中如何借助图形来展现场景?
  7. 添加rabbitmq守护进程
  8. 那些让程序员提升30-80%的快捷键大全整理
  9. 【react】 react 中 前后端数据的交互方式 (原生的ajax、jq的ajax、axios、fetch )...
  10. 简易呼吸灯c语言程序,51单片机(呼吸灯)C语言版.docx
  11. WAREZ无形帝国(盗版之源)
  12. 什么是网络安全网格?
  13. 数据分析与可视化(四)Pandas学习基础一:统计分析基础
  14. leetcode#248 中心对称数 III
  15. 共模和差模信号及其噪音抑制
  16. 2021年10月世界编程语言排行
  17. 小象学院 零基础Python入门 3/4 python开发环境配置
  18. Wps格式怎么转换成word,只要三分钟轻松搞定
  19. python输出间隔_Python:print输出间隔,换行
  20. 按键(独立按键、矩阵键盘)——附带程序

热门文章

  1. 网站安全狗”响应内容保护“网页错误返回页面优化功能介绍
  2. 软件需求包括3个不同的层次 - 业务需求、用户需求和功能需求
  3. 软件专业毕业生之一个月攻略
  4. 获取工作流活动的返回值
  5. java中的字符,字符串,数字之间的转换(亲测)
  6. Linux下创建用于并指定该用户的主目录和相关权限
  7. 收集的48个Shell脚本小技巧
  8. Java opengl openal_项目里用到了openal,特分享一下openal全教程
  9. 徐州技师学院计算机程序设计,徐州技师学院2021年有哪些专业
  10. java内存区域_JVM学习之—Java内存区域