matmul

    该op是计算两个Tensor的乘积,遵循完整的广播规则,关于广播规则,请参考 。 并且其行为与 numpy.matmul 一致。目前,输入张量的维数可以是任意数量, matmul 可以用于 实现 dotmatmulbatchmatmul 。实际行为取决于输入 x 、输入 、 transpose_xtranspose_y 。具体如下:

    • 如果 transpose 为真,则对应 Tensor 的后两维会转置。如果Tensor的一维,则转置无效。假定 x 是一个 shape=[D] 的一维 Tensor,则 x 视为 [1, D]。然而, y 是一个shape=[D]的一维Tensor,则视为[D, 1]。

    乘法行为取决于 和 y 的尺寸。 具体如下:

    • 如果 x 是1维的,而 y 是2维的,则将1放在 x 维度之前,以进行矩阵乘法。矩阵相乘后,将删除前置尺寸。

    • 如果 x 是2维的,而 y 是1维的,获得矩阵与向量的乘积。

    • 如果两个输入至少为一维,且至少一个输入为N维(其中N> 2),则将获得批矩阵乘法。 如果第一个自变量是一维的,则将1放在其维度的前面,以便进行批量矩阵的乘法运算,然后将其删除。 如果第二个参数为一维,则将1附加到其维度后面,以实现成批矩阵倍数的目的,然后将其删除。 根据广播规则广播非矩阵维度(不包括最后两个维度)。 例如,如果输入 是(j,1,n,m)Tensor,另一个 y 是(k,m,p)Tensor,则out将是(j,k,n,p)张量。