PyTorch项目实战08——Tensor的乘法操作

940 阅读3分钟

1 张量的乘法

张量乘法(Tensor Product)是一种在线性代数中常常使用的积分形式,它与标准的乘法类似,但在多个维度上进行操作。它在高维空间中的数学运算,有助于在机器学习中解决类似图像处理,自然语言处理和深度学习这样的复杂任务。

张量乘法可以用来模拟神经元之间的连接,模拟神经元网络的发展。它也可以用来模拟复杂的模型,如语言模型,神经机器翻译,自动驾驶以及智能搜索等机器学习任务。

张量乘法被视为人工智能领域中的关键技术,是解决复杂任务的有力工具。它不仅可以把矢量转换成矩阵,还可以与大量其他算法,如神经网络,支持向量机,卷积网络等,结合使用,从而发挥最大的效用。

2 张量乘法的分类

按照不同维度的张量,其乘法计算的方法也会存在差别。

以下介绍几种常用的计算方法。

2.1 一维张量

可用于一维张量的乘法计算的有:

  • dot()

点乘,计算两个1维向量的内积。

几何意义: 如果点乘的结果为0,则表示a在b上的投影为0,表示a和b是正交的。如果正交,表示这两个向量不相干。

  • vdot()

计算一个维度上两个1维向量的点积。

计算方式为

公式中的 表示复向量的共轭,如果是实向量则为它本身。

在对虚数计算点积时,实际上是用原虚数的共轭虚数来进行计算。

  • matmul()

叉乘,两个向量的外积,又叫叉乘、叉积向量积,其运算结果是一个向量而不是一个标量。只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。

行为取决于张量的维度,如下所示:

如果两个张量都是一维的,则返回点积(标量)。

如果两个参数都是2维的,则返回矩阵与矩阵的乘积。

几何意义: 在三维几何中,向量a和向量b的外积结果是一个向量,有个更通俗易懂的叫法是法向量,该向量垂直于a和b向量构成的平面。

  • inner()

内积,计算1维张量的点积。对于较高的维度,是求输入元素和其他元素沿其最后一个维度的乘积。

2.1.1 实数计算

对于两个同为1行2列的一维的实数来说,这些方法的计算结果均相同。

image.png

计算的方法是:同列元素相乘后的结果,再相加,即

a=tensor([2, 4])

b=tensor([1, 5])

结果=(2*1)+(4*5)= 22

2.1.2 虚数计算

在前边的概念里,可以看到 vdot() 方法在计算点积时,并不是使用的原虚数,因此计算的结果,与其它几个方法不同。

image.png

定义两个复数

x=a+bj

y=c+dj

计算​其乘法的结果应当是:

(ac-bd)+(bc+ad)j = 1.2959+1.2644j

但是 vdot() 方法是先将第一个张量中的虚数转换为其共轭虚数,即 a-bj,所以它得到的结果是:

(ac + bd)+(-bc+ad)j = 1.8054+0.1353j

2.2 二维张量

在做二维张量的乘法计算时,dot() vdot() 方法将不再适用,取而代之的是 mm() 方法。

image.png

2.3 三维张量

对于三维张量,mm() 方法不能使用,因此需要使用 bmm() 方法,同时要适用这些方法,对于参与运算的张量各维度数都有限制。

bmm() 方法要求两个张量都必须是三维张量,且每个张量都包含相同数量的矩阵,即前两个维度的数量必须相同。

inner() 方法,则要求两个张量的维度和各个维度的数量,都必须相同。

以及 matmul() 方法。

image.png

2.4 高维张量

对于高维张量的乘法运算,可以使用以下方法:

  • matmul() 方法
  • inner() 方法