首页 > 其他分享 >PyTorch项目实战05——Tensor的广播机制

PyTorch项目实战05——Tensor的广播机制

时间:2023-04-22 13:31:49浏览次数:47  
标签:运算 05 广播 x2 PyTorch 维度 x1 Tensor

1 广播机制介绍

矩阵运算,往往只能在两个矩阵维度相同或者相匹配时才能运算。比如加减法需要两个矩阵的维度相同,乘法需要前一个矩阵的列数与后一个矩阵的行数相等。

当参与运算的两个维度不同也不匹配的矩阵进行运算时,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。通常情况下,小一点的数组会被 broadcast 到大一点的,这样才能保持大小一致。

2 广播机制的规则

2.1 广播机制的适用规则

两个张量要进行广播运算,需要遵循以下规则:

  • 每个 Tensor 至少要有一个维度;
  • 遍历 Tensor 所有维度时,从末尾开始遍历(即从右往左开始遍历),两个Tensor 可能存在下列情况:
  1. Tensor 维度相等;
  2. Tensor 维度不等且其中一个维度为1;
  3. Tensor 维度不等且其中一个维度不存在。

2.2 广播机制的使用规则

如果两个 Tensor 的维度不同,则在维度较小的 Tensor 前面(即左侧)增加维度,使它们维度相等。

对于每个维度,计算结果的维度值取两个 Tensor 中较大的那个值。

两个 Tensor 扩展维度的过程是将数值进行复制。

3 广播机制的使用

3.1 创建张量

分别创建一个1行3列和一个3行1列的Tensor。

PyTorch项目实战05——Tensor的广播机制_与运算


3.2 判断是否适用广播机制

当执行 x1 + x2 对这两个张量做相加运算时,因其维度不同,需要首先判断是否适用进行广播:

  • x1, x2 至少有一个维度,符合条件1;
  • x1的维度是(1,3),x2的维度是(3,1) 因此答 Tensor 维度不等且其中一个维度为1 这个条件。由此可见,可以进行广播。

3.3 广播机制推演

当对x1和x2执行相加运算时,

首先取第一行最后一列,x1为3,x2为10,进行相加运算;

再取第二行最后一列时,x1中没有第二行,因此把第一行的数据复制到第二行,此时第二行最后一列为3,x2在该位置为20,进行相加运算;

当取第三行最后一列时,x1中没有第三行,再把第二行的数据复制到第三行,此时第三行最后一列为3,x2在该位置为30,进行相加运算;

然后开始取从右向左数的第二列第一行的数据,x1为2,x2中没有该列,因此把最右侧一列的数据复制到该列,此时x2在该列第一行为10,进行相加运算;

依此类推,最后x1,x2 在运算过程中,都通过广播机制,变成了相同维度的3行3列张量,最后得到的结果也是一个3行3列的张量。

PyTorch项目实战05——Tensor的广播机制_广播机制_02

计算结果

PyTorch项目实战05——Tensor的广播机制_数组_03

3.4 无法使用广播机制的情况

参与运算的 Tensor 维度不等,但是其中一个维度大于1。

PyTorch项目实战05——Tensor的广播机制_广播机制_04

参与运算的 Tensor 其中一个没有任何,其中的 c2 没有任何维度。

PyTorch项目实战05——Tensor的广播机制_广播机制_05

标签:运算,05,广播,x2,PyTorch,维度,x1,Tensor
From: https://blog.51cto.com/u_113754/6215261

相关文章

  • Yolov5_DeepSort_Pytorch:基于 Yolov5 + Deep Sort 的实时多目标跟踪器
    Yolov5_DeepSort_Pytorch:基于Yolov5+DeepSort的实时多目标跟踪器 视界君 Python视界 昨天Python视界分享简介该存储库包含一个两阶段跟踪器。YOLOv5(一系列在COCO数据集上预训练的对象检测架构和模型)生成的检测被传递到跟踪对象的DeepSort算法。它可以跟踪Yolov5模型......
  • 05-目录-计算机基础(组成原理、微机原理、汇编、操作系统、网络)
    :链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接12:链接13:链接14:链接15:链接16:链接17:链接18:链接19:链接20:链接:链接:链接:链接:链接:......
  • 1053 等重路径
    给定一个非空的树,树根为 R。树中每个节点 Ti 的权重为 Wi。从 R 到 L 的路径权重定义为从根节点 R 到任何叶节点 L 的路径中包含的所有节点的权重之和。现在给定一个加权树以及一个给定权重数字,请你找出树中所有的权重等于该数字的路径(必须从根节点到叶节点)。例如......
  • Counting Rectangles UVA - 10574
    给出n个点。问选出4个点作为定点,能够组成多少个平行与坐标轴的矩形。 点按照x排序 n^2挑选出垂直x轴的线段,按照y1排序  #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e5;structT{ intx......
  • Kaggle上使用Tensorboard
    Kaggle上使用Tensorboard1.前言想在Kaggle上使用Tensorboard,找了一圈。参考了Kaggle上的一个Code:TensorboardonKaggle但发现有些变化,Code中用到的内网穿透工具Ngrok需要加一个Token,所以需要注册一个Ngrok账号,免费获取一个通道的Token。2.Kaggle上使用Tensorboard2.......
  • 05 基础的数据操作
    05基础的数据操作在创建了数据库和数据库表之后,我们就可以在表中进行数据操作了。基础操作分为添加删除修改查询以上4种操作又简称为CURD(Create,Update,Retrieve,Delete)一.添加数据插入数据的类型:添加一行中所有列对应的数据,不写列名添加一行中某些列对应的......
  • nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned in
    在封装非MFC环境的静态库时调用了依赖MFC环境的静态库时编译测试程序报错如下:nafxcw.lib(afxmem.obj):errorLNK2005:"void*__cdecloperatornew(unsignedint)"(??2@YAPAXI@Z)已经在LIBCMT.lib(new.obj)中定义nafxcw.lib(afxmem.obj):errorLNK2005:"void*__cde......
  • 005 PPT 防止字体丢失
    方法一:字体矢量化即,使用形状通过布尔运算,将文字转为形状的操作方式操作步骤:插入形状==》选择文本+按住Ctrl+选择形状==》合并形状==》剪除(实现将文字转为形状)方法二:字体转图片选择文本==》剪切==》复制为图片方法三:嵌入字体即通过设置实现字体的嵌入,但不是所有字......
  • 剑指 Offer II 005. 单词长度的最大乘积
    题目链接:剑指OfferII005.单词长度的最大乘积方法:转化为二进制位+位运算解题思路将\(words[i]\)字符串中包含的字母转换为二进制位上的\(1\),字符'a'对应二进制中的第\(0\)位上的\(1\),这样每个字符串就对应一个二进制数。通过两个字符串的二进制数进行'&'运算,......
  • ORB305与CISCO路由器构建L2TP over IPSec VPN操作手册
    1、网络拓扑在思科路由器与ORB305之间建立一个安全隧道,对客户路由器端设备子网,与思科路由器端服务器子网之间的数据流进行安全保护,组网拓扑图如图所示。2、思科路由器端配置指导(此处以多数客户使用专线上网形式为例)Cisco(AR1)配置配置1.AAA配置aaanew-model//启用AAAaaaaut......