mindscience.sciops.einsum.Einsum

class mindscience.sciops.einsum.Einsum(equation, use_opt=True)[源代码]

使用爱因斯坦求和约定(Einsum)进行张量计算的操作。

此操作符使用爱因斯坦求和约定(Einsum)执行张量计算。支持对角化、约简、转置、矩阵乘法、乘积运算、内积等操作。

参数:
  • equation (str) - 指定要执行的计算。仅接受:

    • 字母 ([a-z][A-Z]):表示输入张量的维度

    • …:匿名维度

    • 逗号 (','):分隔张量维度

    • 箭头 ('->'):左侧指定输入张量,右侧指定所需的输出维度

  • use_opt (bool, 可选) - 默认为 True。设置为 False 时,不执行收缩路径优化。

输入:
  • operands (List[Tensor]) - 可变数量的张量输入。

输出:
  • out_tensor (Tensor) - Einsum 操作的结果。

样例:

>>> import mindspore as ms
>>> from mindspore import nn, Tensor, ops
>>> import numpy as np
>>> import Einsum
>>> x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), ms.float32)
>>> y = Tensor(np.array([[2.0, 3.0], [1.0, 2.0], [4.0, 5.0]]), ms.float32)
>>> equation = "ij,jk->ik"
>>> einsum = Einsum(equation, use_opt=False)
>>> output = einsum(x, y)
>>> print(output.shape)
(2, 2)
>>> shapes = [(156, 16, 16), (660, 128, 16), (660, 128, 16)]
>>> x, y, z = [ops.randn(tp) for tp in shapes]
>>> equation = "ijk,zui,zuj->zuk"
>>> einsum = Einsum(equation, use_opt=True)
>>> output = einsum(x, y, z)