张量是一棵树

长久以来,张量和其中维度的概念把我搞的晕头转向。

一维的张量是数组,二维的张量是矩阵,这也很有道理。

但是给一个二维张量,让我算出它每一行的和,应该用 sum(dim=0) 还是 sum(dim=1)? 这个问题还得让我想个一会儿。

更别说四维的张量是什么,一百维的张量又是什么,这种问题了,我不知道,想想就头大。

但是直到把张量看成一棵树,许多问题就迎刃而解~

如下图所示,分别表示三种不同形状的张量:

基本规律是:

  1. 不算最上边的树根节点,剩下的节点有几层,那这个张量就是几维的。(换种说法:张量的维数=树高-1)
  2. 维度dim=0对应树中的第二层,维度dim=1对应树中的第三层,以此类推。
  3. 每一层的维度 = 这一层的每个节点有几个亲兄弟节点。

带有维度的运算

张量以某个维度进行运算,就是:

  1. 把对应树中这个维度的亲兄弟节点都移动至重叠状态
  2. 上述移动会导致部分叶子节点重叠,把重叠的叶子节点进行相应运算
  3. 删除该维度

以 shape 为 [1, 2, 2] 的张量t 举例说明:

t.sum(dim=1)



最终张量的shape是 [1, 2]

t.sum(dim=0)

第0维的节点只有一个,所以不用进行兄弟节点之间的合并,自然也不会有重叠的叶子节点,所以就不用运算,只需要删除第0维即可。



最终张量的shape是 [2, 2]

t.sum(dim=2)



删掉的恰好是最后一层叶子节点,数据上移到新的叶子节点中。

最终张量的shape是 [1, 2]

增加删除维度

给张量增加一个维度等价于给树增加一层。

给张量删除一个维度等价于给树删除一层。

但是,增删的维度是有限制的:维度必须为1。

删除一个维度为1的层

增加一个维度为1的层

示例1

示例2

总结

将张量看成一个树形结构能在某种程度更加直观的理解张量的概念及其相关运算。

Pytorch 中张量的理解的更多相关文章

  1. tensorflow中张量的理解

    自己通过网上查询的有关张量的解释,稍作整理. TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中 ...

  2. pytorch之张量的理解

    张量==容器 张量是现代机器学习的基础,他的核心是一个容器,多数情况下,它包含数字,因此可以将它看成一个数字的水桶. 张量有很多中形式,首先让我们来看最基本的形式.从0维到5维的形式 0维张量/标量: ...

  3. [转载]Pytorch中nn.Linear module的理解

    [转载]Pytorch中nn.Linear module的理解 本文转载并援引全文纯粹是为了构建和分类自己的知识,方便自己未来的查找,没啥其他意思. 这个模块要实现的公式是:y=xAT+*b 来源:h ...

  4. pytorch中tensor张量数据基础入门

    pytorch张量数据类型入门1.对于pytorch的深度学习框架,其基本的数据类型属于张量数据类型,即Tensor数据类型,对于python里面的int,float,int array,flaot ...

  5. 对pytorch中Tensor的剖析

    不是python层面Tensor的剖析,是C层面的剖析. 看pytorch下lib库中的TH好一阵子了,TH也是torch7下面的一个重要的库. 可以在torch的github上看到相关文档.看了半天 ...

  6. pytorch中的激励函数(详细版)

          初学神经网络和pytorch,这里参考大佬资料来总结一下有哪些激活函数和损失函数(pytorch表示)      首先pytorch初始化:   import torch import t ...

  7. 关于Pytorch中autograd和backward的一些笔记

    参考自<Pytorch autograd,backward详解>: 1 Tensor Pytorch中所有的计算其实都可以回归到Tensor上,所以有必要重新认识一下Tensor. 如果我 ...

  8. PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()

    torch.mul() 函数功能:逐个对 input 和 other 中对应的元素相乘. 本操作支持广播,因此 input 和 other 均可以是张量或者数字. 举例如下: >>> ...

  9. PyTorch 中 torch.matmul() 函数的文档详解

    官方文档 torch.matmul() 函数几乎可以用于所有矩阵/向量相乘的情况,其乘法规则视参与乘法的两个张量的维度而定. 关于 PyTorch 中的其他乘法函数可以看这篇博文,有助于下面各种乘法的 ...

随机推荐

  1. [IOI1994]The Castle

    开了博客之后一直没动今天水完题手痒想起这个就来水一篇陈年水题(雾 题目链接<< 题意:给一张n*m个格子的地图信息,求连通块个数以及最大连通块面积. 每个格子四个方向可以有墙,输入用一个十 ...

  2. 带你探究Python的诞生和由来

    最近,Python语言越来越火,那什么是Python?它怎么诞生的?它跟C语言.shell语言有什么区别?语言环境是怎么样的?下面,跟着我的步伐,一起去了解一下吧~ Python 诞生在一个圣诞节 P ...

  3. ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)

    原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...

  4. 深入浅出 Git

    开篇 你可能遇到过 如果你遇到这个场景,那你可能需要版本控制. 什么是版本控制 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么内容等信息忠实地了已录下来.每一次文件的改变 ...

  5. JDBC(六)—— 数据库事务

    数据库事务 事务 一组逻辑操作单元,使数据从一种状态变换到另一种状态 事务处理 保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式. 当在一个事务中执行多个操作时,要么所有事 ...

  6. Servlet3.0提供的@WebServlet注解引用参数详情介绍

    Servlet3.0提供的@WebServlet注解: servlet3.0所提供的@webservlet注解,用来将某个类注解为一个servlet类,简化了web.xml上的servlet配置, @ ...

  7. psql: could not connect to server: No such file or directory

    postgresql报错: psql: could not connect to server: No such file or directory         Is the server run ...

  8. Vs2017编译器提示:不能将“const char *”类型的值分配到“char *”类型的实体

    在项目属性中将语言符合模式改成否即可

  9. saltstack批量管理文件和计划任务

    简介 saltstack是由thomas Hatch于创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统.用来管理你的基础架构,可轻松管理成千上万台服务器. 关于saltstack更多功能本 ...

  10. Spark学习进度-Transformation算子

    Transformation算子 intersection 交集 /* 交集 */ @Test def intersection(): Unit ={ val rdd1=sc.parallelize( ...