创投圈|Pytorch内置函数代码解释深度学习中的转置是什么

创投圈|Pytorch内置函数代码解释深度学习中的转置是什么

我们在学习深度学习或者线性代数数学的时候 , 肯定会听到转置这个概念 。 百科上的解释是 , 直观来看 , 将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转 , 即得到A的转置 。 这个直观看起来就不那么直观 , 不过还有一句话简单扼要 , 行列互换 。
文字描述特别是数学上的定义描述 , 往往给我们的感觉是把原来我们可以明白的东西整得不明白了 。 正好创建了Pytorch的虚拟环境 , 所以我们不妨借着学习深度学习的名义来把玩一下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(546) , 再想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的计算了 。