matmul

    • matmul(x, y, transpose_x=False, transpose_y=False, alpha=1.0, name=None)[源代码]
    • 如果 transpose 为真,则对应 Tensor 的后两维会转置。假定 是一个 shape=[D] 的一维 Tensor,则 x 非转置形状为 [1, D],转置形状为 [D, 1]。转置之后的输入形状需满足矩阵乘法要求,即 x_width 与 y_height 相等。
      • 转置后,输入的两个 Tensor 维度将为 2-D 或 n-D,将根据下列规则矩阵相乘:
        • 如果两个矩阵都是 2-D,则同普通矩阵一样进行矩阵相乘。
        • 如果任意一个矩阵是 n-D,则将其视为带 batch 的二维矩阵乘法。
    • 如果原始 Tensor x 或 y 的秩为 1 且未转置,则矩阵相乘后的前置或附加维度 1 将移除。
    • 参数:
      • x (Variable) : 输入变量,类型为 Tensor 或 LoDTensor。
      • y (Variable) : 输入变量,类型为 Tensor 或 LoDTensor。
      • transpose_x (bool) : 相乘前是否转置 x。
      • transpose_y (bool) : 相乘前是否转置 y。
      • name (str|None) : 该层名称(可选),如果设置为空,则自动为该层命名。
    • 返回:
      • Variable (Tensor / LoDTensor),矩阵相乘后的结果。
    • 返回类型:
      • Variable(变量)。
    1. import paddle.fluid as fluid
    2. import numpy
    3.  
    4. # Graph Organizing
    5. x = fluid.layers.data(name='x', shape=[2, 3], dtype='float32')
    6. y = fluid.layers.data(name='y', shape=[3, 2], dtype='float32')
    7. output = fluid.layers.matmul(x, y, True, True)
    8.  
    9. exe = fluid.Executor(fluid.CPUPlace())
    10. exe.run(fluid.default_startup_program())
    11.  
    12. # Execute
    13. input_x = numpy.ones([2, 3]).astype(numpy.float32)
    14. input_y = numpy.ones([3, 2]).astype(numpy.float32)
    15. res, = exe.run(fluid.default_main_program(),
    16. feed={'x':input_x, 'y':input_y},
    17. fetch_list=[output])
    18. print(res)
    19. '''
    20. Output Value:
    21. [[2. 2. 2.]
    22. [2. 2. 2.]
    23. [2. 2. 2.]]