一、张量tensor

张量的三个特征:秩、轴、形状

pytorch 张量翻转 pytorch的张量_pytorch 张量翻转

张量的秩是指索引的个数,轴是指每一个维度的最大的索引的值,张量的形状提供了维度和索引的数量关系。

经常需要对张量进行重塑

t.reshape(1,9)

利用上述函数可以将张量按任意想要的形状进行重塑

下面我们考虑具体的情况,将张量带入CNN的输入中

这里的张量的秩为4,即[B,C,H,W],其中后两个维度作为每一个像素的长和宽的索引,第三个维度作为RBG或者灰度图的通道的索引,第四个维度作为批的数量的索引。

对于每一张图片,通过卷积运算将被改变其高度、宽度维度以及颜色通道的数量,通道的数量根据在层中使用的滤波器的数量而变化。

pytorch 张量翻转 pytorch的张量_python_02

二、利用函数制造张量

利用numpy

pytorch 张量翻转 pytorch的张量_卷积_03

事先没有数据,创建一些特殊的tensor

pytorch 张量翻转 pytorch的张量_python_04

 

关于创建tensor的不同选项的性能解读

pytorch 张量翻转 pytorch的张量_深度学习_05

 

不难看出,前两种方式相当于在内存中创建了初始数据对象的副本,二后两种方式则是共享数据内存。通常情况下建议使用torch.tensor()来创建tensor对象。

三、常见的tensor操作 

重塑、元素操作、还原和访问

pytorch 张量翻转 pytorch的张量_深度学习_06

tensor的重塑

接下来可以对其reshape

pytorch 张量翻转 pytorch的张量_python_07

此外还可以对张量进行压缩和解压缩(squeeze & unsqueeze)

这个操作可以消除(增加)轴为1的秩

pytorch 张量翻转 pytorch的张量_pytorch_08

flatten函数,传递给全连接层的卷积层输出必须在进入全连接层之前进行flatten。将输入的图像压扁成为一个一维的张量,所有轴被挤压在一起。

pytorch 张量翻转 pytorch的张量_卷积_09

 

考察CNN的输入,对于每一张图片而言相当于进行展平成一维

pytorch 张量翻转 pytorch的张量_深度学习_10

 但是对于实际情况来说,还需要批和通道三个维度,模拟CNN的输入

pytorch 张量翻转 pytorch的张量_pytorch 张量翻转_11

 

pytorch 张量翻转 pytorch的张量_python_12

 接下来可以通过flatten函数来对特定维度的tensor进行处理

pytorch 张量翻转 pytorch的张量_深度学习_13

 显然这不是我们想要看到的,我们希望将每一批的图片每一张进行单独的处理,而不是草率的全部压缩为一维,这样的信息失去了处理的意义,因此我们需要规定flatten的起始维度start_dim

pytorch 张量翻转 pytorch的张量_深度学习_14

这样,我们就可以利用tensor进行批处理了 

 tensor的元素操作

元素操作通常进行于相同位置上的元素,由索引确定位置,两个张量必须具有相同的形状才能进行一个元素操作。

张量广播:通过numpy的广播可以进行简单的tensor和标量之间的计算。

此外张量还可以进行比较,符合条件的元素被设定为1,否则被置为0。

张量的缩减操作

减少张量中包含的元素数量的操作,例如:求和操作,求平均值

Argmax,返回tensor中最大值的索引,在一个tensor上调用argmax压缩为一个新的tensor。在神经网络的输出层中可以用其找到预测概率最大的预测类。