Shortcuts

torch.matmul

torch.matmul(input, other, *, out=None) 张量

两个张量的矩阵乘积。

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

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

  • 如果两个参数都是二维的,则返回矩阵-矩阵乘积。

  • 如果第一个参数是一维的,第二个参数是二维的, 为了进行矩阵乘法,会在其维度前加上一个1。 矩阵乘法完成后,添加的维度会被移除。

  • 如果第一个参数是二维的,第二个参数是一维的,则返回矩阵向量乘积。

  • 如果两个参数都至少是一维的,并且至少有一个参数是N维的(其中N > 2),则返回一个批量矩阵乘法。如果第一个参数是一维的,则在其维度前添加一个1,以便进行批量矩阵乘法,并在之后移除。如果第二个参数是一维的,则在其维度后添加一个1,以便进行批量矩阵乘法,并在之后移除。非矩阵(即批量)维度是广播的(因此必须是可广播的)。例如,如果input是一个(j×1×n×n)(j \times 1 \times n \times n)张量,而other是一个(k×n×n)(k \times n \times n)张量,out将是一个(j×k×n×n)(j \times k \times n \times n)张量。

    请注意,广播逻辑在确定输入是否可广播时,仅查看批次维度,而不查看矩阵维度。例如,如果 input 是一个 (j×1×n×m)(j \times 1 \times n \times m) 张量,而 other 是一个 (k×m×p)(k \times m \times p) 张量,即使最后两个维度(即矩阵维度)不同,这些输入也是广播有效的。out 将是一个 (j×k×n×p)(j \times k \times n \times p) 张量。

此操作支持带有稀疏布局的参数。特别是矩阵-矩阵(两个参数都是二维的)支持稀疏参数,其限制与torch.mm()相同

警告

稀疏支持是一个测试版功能,某些布局/数据类型/设备组合可能不受支持,或者可能没有自动微分支持。如果您发现缺少功能,请提交功能请求。

此操作符支持 TensorFloat32

在某些 ROCm 设备上,当使用 float16 输入时,此模块将在反向传播中使用 不同的精度

注意

此函数的1维点积版本不支持out参数。

Parameters
  • 输入 (张量) – 要相乘的第一个张量

  • 其他 (Tensor) – 要相乘的第二个张量

Keyword Arguments

输出 (张量, 可选) – 输出张量。

示例:

>>> # 向量 x 向量
>>> tensor1 = torch.randn(3)
>>> tensor2 = torch.randn(3)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([])
>>> # 矩阵 x 向量
>>> tensor1 = torch.randn(3, 4)
>>> tensor2 = torch.randn(4)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([3])
>>> # 批量矩阵 x 广播向量
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(4)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3])
>>> # 批量矩阵 x 批量矩阵
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(10, 4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3, 5])
>>> # 批量矩阵 x 广播矩阵
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3, 5])
优云智算