张量是一棵树

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

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

但是给一个二维张量,让我算出它每一行的和,应该用 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. 多个HDFS集群的fs.defaultFS配置一样,造成应用一直连接同一个集群的问题分析

    背景 应用需要对两个集群中的同一目录下的HDFS文件个数和文件总大小进行比对,在测试环境中发现,即使两边HDFS目录下的数据不一样,应用日志显示两边始终比对一致,分下下来发现,应用连的一直是同一个集群 ...

  2. vue第十七单元(电商项目逻辑处理,电商划分)

    第十七单元(电商项目逻辑处理,电商划分) #课程目标 1.什么是电商项目 2.什么是B2B,B2C,C2C模式,常见的电商项目 3.移动端电商项目常见的逻辑处理 4.[知识扩展]传统系统架构及分布式系 ...

  3. NameVirtualHost *:80 has no VirtualHosts

    服务器会包含所有的   .conf     后缀的文件 当出现如标题所示的错误的时候,检查所有 .conf 文件,是否端口占用,或者重复命令行的情况

  4. Hibernate Tools插件在线安装

    1.查看你的Eclipse的版本:Help | About Eclipse Version: Oxygen.2 Release(4.11.0) 2.HibernateTools的下载地址为:http: ...

  5. ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪

    这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  6. ASP.NET Core 3.1使用log4net/nlog/Serilog记录日志

    Serilog中的结构化日志支持非常好,而且配置简便.我能够比其他任何人更轻松地启动和运行Seirlog.Serilog中的日志可以发送到很多目的地.Serilog称这些东西为"接收器&qu ...

  7. 【磁盘/文件系统】第三篇:标准磁盘分区流程针对parted(一般硬盘容量大于2T(但是小于2T也可以进行分区);分区数最大是支持100多个分区)

    说明: 在 Linux 上可以采用 parted 来对磁盘进行分区 1.通过 fdisk -l 可以查看磁盘是否存在, 由于使用的是大磁盘(大于2T),fdisk 不能用来作为分区工具了,而应该使用 ...

  8. 利用COM组件实现对WORD书签各种操作大全,看这一篇就够了

    有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片. 脑海中迅速闪过好几种组件,openxml组件,com组件,npoi.为了减少程序画复杂表格,我们选用了com组件+ ...

  9. ArrayListHashmap嵌套

    package arrayListHashMap; import java.util.ArrayList; import java.util.HashMap; import java.util.Map ...

  10. 算法图解第一章_二分查找_python

    什么是二分查找? 我们先玩一个游戏. 在1至100之间我写下一个数,由你来猜测这个数是多少.我会告诉你高了还是低了. 最简单的办法就是每次取一半. 例如 "50""低了& ...