我们在学习深度学习或者线性代数数学的时候,肯定会听到转置这个概念。百科上的解释是,直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。这个直观看起来就不那么直观,不过还有一句话简单扼要,行列互换。
文字描述特别是数学上的定义描述,往往给我们的感觉是把原来我们可以明白的东西整得不明白了。正好创建了Pytorch的虚拟环境,所以我们不妨借着学习深度学习的名义来把玩一下Pytorch的功能。
我们之前安装了Pytorch,也测试成功了。所以我们可以创建Tensor了,打开Ubuntu的终端,然后切换到虚拟环境,进入Python环境,开动。比如我想创建一个5*3的未初始化Tensor,命令就是x = torch.empty(5, 3)。当然我们还是创建一个有点方便的Tensor,比如创建一个随机的x = torch.rand(5, 3),这样看着舒服。也方便我们观察。
有了Tensor,我们就可以对它进行各种操作了。比如深度学习里经常用到大名鼎鼎的转置,就已经被内置到Pytorch函数了。我们可以通过t函数。上面我们创建了x的Tensor,那么想转置下,可以z_t = x.t()命令,将转置后的Tensor赋给z_t,然后打印出z_t就能看到不同了,列变行,行转列,原来是4*3,现在是3*4。就跟转个角度翻了个个一样。
另外我们要知道,转置是针对2D张量而言的,如果你创建了一个高于二维的,比如你设置x = torch.rand(5,4,6),再想x_t = x.t(),那么就会报错。系统不允许你高维转置。
当然这个只是一个非常简单的常识。不过以小见大,很多线性代数函数都已经被内置到深度学习框架Pytorch里了。比如我们可以inverse求逆矩阵。顾名思义需要是矩阵。这个对Tensor也有要求,必须是方形矩阵。比如我们可以用diag获取对角线元素。这是对单个Tensor的操作,还有的线性代数函数,则是两种Tensor的二元操作。比如内积(点积)。这个需要两个Tensor,不过它也有要求,就是必须是1D的。所以我们之前那些2D的矩阵就不能用了。我们可以创建1D的Tensor,而且个数要相同,比如创建x = torch.rand(3)和y = torch.rand(3)这样才能运行x_y = x.dot(y)命令执行内积计算,也就是a1b1+a2b2+...+anbn的计算了。