Pytorch 中张量的理解
张量是一棵树
长久以来,张量和其中维度的概念把我搞的晕头转向。
一维的张量是数组,二维的张量是矩阵,这也很有道理。
但是给一个二维张量,让我算出它每一行的和,应该用 sum(dim=0) 还是 sum(dim=1)? 这个问题还得让我想个一会儿。
更别说四维的张量是什么,一百维的张量又是什么,这种问题了,我不知道,想想就头大。
但是直到把张量看成一棵树,许多问题就迎刃而解~
如下图所示,分别表示三种不同形状的张量:

基本规律是:
- 不算最上边的树根节点,剩下的节点有几层,那这个张量就是几维的。(换种说法:张量的维数=树高-1)
- 维度dim=0对应树中的第二层,维度dim=1对应树中的第三层,以此类推。
- 每一层的维度 = 这一层的每个节点有几个亲兄弟节点。
带有维度的运算
张量以某个维度进行运算,就是:
- 把对应树中这个维度的亲兄弟节点都移动至重叠状态
- 上述移动会导致部分叶子节点重叠,把重叠的叶子节点进行相应运算
- 删除该维度
以 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 中张量的理解的更多相关文章
- tensorflow中张量的理解
自己通过网上查询的有关张量的解释,稍作整理. TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中 ...
- pytorch之张量的理解
张量==容器 张量是现代机器学习的基础,他的核心是一个容器,多数情况下,它包含数字,因此可以将它看成一个数字的水桶. 张量有很多中形式,首先让我们来看最基本的形式.从0维到5维的形式 0维张量/标量: ...
- [转载]Pytorch中nn.Linear module的理解
[转载]Pytorch中nn.Linear module的理解 本文转载并援引全文纯粹是为了构建和分类自己的知识,方便自己未来的查找,没啥其他意思. 这个模块要实现的公式是:y=xAT+*b 来源:h ...
- pytorch中tensor张量数据基础入门
pytorch张量数据类型入门1.对于pytorch的深度学习框架,其基本的数据类型属于张量数据类型,即Tensor数据类型,对于python里面的int,float,int array,flaot ...
- 对pytorch中Tensor的剖析
不是python层面Tensor的剖析,是C层面的剖析. 看pytorch下lib库中的TH好一阵子了,TH也是torch7下面的一个重要的库. 可以在torch的github上看到相关文档.看了半天 ...
- pytorch中的激励函数(详细版)
初学神经网络和pytorch,这里参考大佬资料来总结一下有哪些激活函数和损失函数(pytorch表示) 首先pytorch初始化: import torch import t ...
- 关于Pytorch中autograd和backward的一些笔记
参考自<Pytorch autograd,backward详解>: 1 Tensor Pytorch中所有的计算其实都可以回归到Tensor上,所以有必要重新认识一下Tensor. 如果我 ...
- PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()
torch.mul() 函数功能:逐个对 input 和 other 中对应的元素相乘. 本操作支持广播,因此 input 和 other 均可以是张量或者数字. 举例如下: >>> ...
- PyTorch 中 torch.matmul() 函数的文档详解
官方文档 torch.matmul() 函数几乎可以用于所有矩阵/向量相乘的情况,其乘法规则视参与乘法的两个张量的维度而定. 关于 PyTorch 中的其他乘法函数可以看这篇博文,有助于下面各种乘法的 ...
随机推荐
- Flutter AS设备连接显示loading解决方案
看了网上很多解决方案,基本都是要杀dart进程后,删除lockfile 文件,然后运行检查命令flutter doctor. 这个方式有一定的意义,但是确实不一定解决这个问题. 今天就遇到了这样的问题 ...
- 干货满满:python实现二维图制作
python全代码如下 import re import csv import matplotlib.pyplot as plt x=[] y=[] m=eval(input()) #输入折线条数 f ...
- Java 细粒度锁续篇
在上篇文章中大概介绍了 Java 中细粒度锁的几种实现方式,并且针对每种方式都做了优缺点说明,在使用的时候就需要根据业务需求选择更合适的一种.上篇文章中的最后一种弱引用锁的实现方式,我在里面也说了其实 ...
- windows服务器安装exe文件出错
今天在安装exe文件的时候出现了错误,记录如下: 服务器环境为windows 2016数据中心标准英文版.要安装的软件为***.exe.按照在本地电脑上安装的方法,直接双击打开,然后错误出现如下图: ...
- 解决uiautomator截取不到手机App界面信息
今天在使用uiautomatorviewer进行安卓app控件定位的时候,出现以下异常,(用的是真机测试Android版本是10,据说是Android 8以后sdk自带的uiautomator直接打开 ...
- python基本输入与输出
内置函数print()用于输出信息到标准控制台或指定文件,语法格式为: print(value1,value2,... , sep=' ', end='\n', file=sys.stdout, fl ...
- 线程 - Java中的Copy-On-Write容器
http://ifeve.com/java-copy-on-write/ 什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直 ...
- Java IO流 FileOutputStream、FileInputStream的用法
FileOutputStream.FileInputStream的使用 FileOutputStream是OutputStream的继承类,它的主要功能就是向磁盘上写文件.FileOutputStre ...
- java.util.Collections
p.p1 { margin: 0; font: 11px Monaco } span.s1 { text-decoration: underline } span.s2 { color: rgba(1 ...
- 三、hadoop、yarn安装配置
本文hadoop的安装版本为hadoop-2.6.5 关闭防火墙 systemctl stop firewalld 一.安装JDK 1.下载java jdk1.8版本,放在/mnt/sata1目录下, ...