10. Flatten, Reshape, And Squeeze Explained - Tensors For Deep Learning With PyTorch
我们开始用tensor进行简单操作
对于tensor的操作主要有四种
- 重塑操作
- 元素操作
- 元素还原操作
- 元素访问操作
最后这个len(t.shape)代表知道t的秩
先把t.shape变成tensor类,再用prod求tensor 的数量,也就是包含12个分量
或者用这个特定 的函数方法,这个numel就是number element的缩写
张量的重塑操作:只改变形状,不会变张量的数量,只要重塑的形状乘积是12就可以了。
在下面这些例子中我们用两个因子使秩保持在2,但是如果我们使用三个元素,我们可以改变秩
我们可以通过squeezing(压缩)和unsqueezing(解压缩)它们
squeezing是压缩一个向量可以移除所有长度为1的轴,而解压缩一个张量则是增加一个长度为1的维度,这些函数允许我们扩大或者缩小张量的秩
flatten一个tensor意味着除去所有的轴,只保留一个,它创造了一个单轴的张量,它包含了张量的元素,所以本质上是把一个张量拉平,我们创建了一个一维数组,它包含了张量的所有标量分量。
一个flatten操作是当我们从一个卷积层过度到一个全连接层时必须在神经网络中发生的操作,我们从卷积层获得输出,它以输出通道的形式给我们
我们把这些通道变平成一个单一的一维数组
当我们建立 CNN的时候,我们会看到这一点
因为输入的张量是任何形状的,我们通过-1来表示重塑函数的第二个参数,在pytorch中-1会告诉reshape函数,根据一个张量中的包含的其他值和元素的个数来求出值应该是多少(可以理解为占位符?),因为t有12个元素,这个被重塑的函数能够计算出第二个轴的长度是12个,以确保一个张量中的元素空间足够大
这个flatten后的结果
实际上可以通过重塑方法可以实现flatten操作的另一种方法,就是t.reshape(-1)
张量的拼接操作
我们可以使用Pytorch的cat函数来组合两个张量来做到这一点,就两个张量的形状而言,我们计算他们的方式会影响输出张量结果的形状。
dim=0是按照轴为0,也就是横着排列
dim=1是按照轴为1,也就是竖着排列