小编对于张量的理解一直很模糊,今天用Excel来帮助大家理解,希望对大家有所帮助。
首先,张量是多维数组,这里不多赘述,可以去查阅相关资料。今天重点介绍的是张量的维度。
张量有一维、二维、三维、四维等。
正如我们的Eecel表里的3个数字就组成一维数据。
你也可以把它理解为一行数据,即由单个元素组成的一组数据。
二维就是一维的叠加。
前面所说可以把“一行”看作一维
那么二维就是多行,也就相当于Excel里的一个工作部(下方的sheet1)
但是这里要注意,代码最外面有两个中括号,如果只有一个中括号,就会报错。
这里简单记忆可以理解为:有几维,最外面的中括号就有几个
torch.Size([1,2,3]),第一个1表示1个深度,你可以理解为Excel的一个工作部,如果是2,那就是两个工作部。
第二个数字表示2行,第三个数字表示3列。
三维就相当于Excel里的多个工作部
上图所示是深度为1,即1个Excel工作部,接下来我们来看深度为2的,即2分Excel工作部:
这里就有两个深度,相当于一个Excel文件中的两个工作部,sheet1和sheet2。
注意:标黄处是两个工作部的分隔
前文所说,有几个维度就有几个维度。标黄处是2个中括号,即标黄中括号里的数据是第二维,那么这两个中括号中的二维数据(即多行数据)一叠加就成了我们的三维数据(即一个或多个Excel工作部)
如图
现在已经介绍完三维了,也就是多个工作部,那这些工作部最终就能组成一个Excel文件,即第四维。
这里的torch.Size([1,1,2,3]),左边第一个数字 1表示这个张量在第四维占了一个,即一个Excel表,第二个数字1表示三维上的1,即1个工作部
第三个数字2表示每个工作部里有2行,当然,这里就1个工作部
第四个数字3表示每个工作部里有3列。
接下来,我们就要介绍tensor的升维与降维,降维用到的函数是torch.squeeze()函数。
那么升维用到的就是torch.unsqueeze()函数。
为什么要降维呢?
小编认为这是为了减少计算耗时,就像你的一个Excel文件,里面有10个工作部,但只有第一个工作部有数据,那其他9个工作部在大部分时候就是无用的,此时就需要用到降维。
我们看下面这个代码,这里,第三维第4维都是只有一个占位(维数)的,也就是说,此时我们在第3维,第4维看到的数据都是一样的,那么就可以降去第3维和第4维。
而第二维有3个占位(维数),如果去掉这一维,那么数据就会收到影响。
以下是降维的具体代码
这里的torch.squeeze(A,0)的0时什么意思呢?
在第0个位置,这个函数就是,如果第0个位置的维度是1,那么就删除该维度
在原本的维度(1,1,3,2)中,从左向右一次是位置0,1,2,3,。没有第四位
如果我们输入torch.squeeze(A,2),看一看结果:
一个维度也没降,因为第2位置的维度是3,自然不会删除该维度。
那我们再来看看如果输入torch.squeeze(A,4)会是什么结果呢
(哈哈,当然会报错啦)
同样,也可以输入负数的,负数就有-4,如果是负数,那从左向右一次是-4,-3,-2,-1
介绍完降维,我们来介绍一下升维吧
降维理解了,升维就不难理解了
b=a.unsqueeze(0)即在索引0对应的位置增加一个维度
下面是咋索引1对应位置增加一个维度
这是在索引2位置增加:
同样的,这里也没有3,但是可以有负数,就不一一赘述了。