zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

pytorch 中矩阵乘法

2023-02-18 16:32:55 时间

1、二维矩阵乘法 torch.mm()

  torch.mm(mat1, mat2, out=None)

  其中 $\operatorname{mat} 1 \in \mathbb{R}^{n \times m}, \operatorname{mat} 2 \in \mathbb{R}^{m \times d} $ ,输出的 $out \in \mathbb{R}^{n \times d} $ 。

  该函数一般只用来计算两个二维矩阵的矩阵乘法,并且不支持 broadcast 操作。

 

2、三维带 batch 的矩阵乘法 torch.bmm()

  由于神经网络训练一般采用 mini-batch,经常输入的时三维带 batch 的矩阵,所以提供

    torch.bmm(bmat1, bmat2, out=None)

  其中 $bmat 1 \in \mathbb{R}^{b \times n \times m} , bmat 2 \in \mathbb{R}^{b \times m \times d}$ , 输入出的 $out \in \mathbb{R}^{b \times n \times d} $ 。 该函数的两个输入必须是三维矩阵并且第一维相同(表示Batch维度),不支持 broadcast 操作

 

3、多维矩阵乘法 torch.matmul()

    torch.matmul(input, other, out=None)

  支持broadcast操作,使用起来比较复杂。针对多维数据 matmul() 乘法,可以认为该乘法使用使用两个参数的后两个维度来计算,其他的维度都可以认为是batch维度。

  假设两个输入的维度分别是 input(1000×500×99×11), other(500×11×99)那么我们可以认为 torch.matmul(input, other, out=None) 乘法首先是进行后两位矩阵乘法得到 (99×11)×(11×99)⇒(99×99) ,然后分析两个参数的 batch size 分别是 (1000×500) 和 500 , 可以广播成为 (1000×500), 因此最终输出的维度是 (1000×500×99×99)。

 

4、矩阵逐元素 (Element-wise) 乘法 torch.mul()

    torch.mul(mat1, other, out=None)

  其中 other 乘数可以是标量,也可以是任意维度的矩阵, 只要满足最终相乘是可以 broadcast 的即可。