addmm

paddle.sparse. addmm ( input, x, y, beta=1.0, alpha=1.0, name=None ) [source]

Note

This API is only supported from CUDA 11.0 .

Applies matrix multiplication for x and y , input is added to the final result. The equation is:

\[out = alpha * x * y + beta * input\]

The supported input/output Tensor layout are as follows:

Note

input[SparseCsrTensor] + x[SparseCsrTensor] @ y[SparseCsrTensor] -> out[SparseCsrTensor] input[DenseTensor] + x[SparseCsrTensor] @ y[DenseTensor] -> out[DenseTensor] input[SparseCooTensor] + x[SparseCooTensor] @ y[SparseCooTensor] -> out[SparseCooTensor] input[DenseTensor] + x[SparseCooTensor] @ y[DenseTensor] -> out[DenseTensor]

It supports backward propagation.

Dimensions input , x , y must be same and >= 2D. Automatic broadcasting of Tensor is not supported.

Parameters
  • input (SparseTensor|DenseTensor) – The input tensor. Shape is [*, M, N]. The data type can be float32 or float64.

  • x (SparseTensor) – The input SparseTensor. Shape is [*, M, K]. The data type can be float32 or float64.

  • y (SparseTensor|DenseTensor) – The input tensor. Shape is [*, K, N]. The data type can be float32 or float64.

  • beta (float, optional) – Coefficient of input . Default: 1.0

  • alpha (float, optional) – Coefficient of x * y . Default: 1.0

  • name (str, optional) – Name for the operation (optional, default is None). For more information, please refer to Name.

Returns

Tensor type, date type and shape is the same with input .

Return type

SparseTensor|DenseTensor

Examples

>>> 
>>> import paddle
>>> paddle.device.set_device('gpu')

>>> # dense + csr @ dense -> dense
>>> input = paddle.rand([3, 2])
>>> crows = [0, 1, 2, 3]
>>> cols = [1, 2, 0]
>>> values = [1., 2., 3.]
>>> x = paddle.sparse.sparse_csr_tensor(crows, cols, values, [3, 3])
>>> y = paddle.rand([3, 2])
>>> out = paddle.sparse.addmm(input, x, y, 3.0, 2.0)

>>> # dense + coo @ dense -> dense
>>> input = paddle.rand([3, 2])
>>> indices = [[0, 1, 2], [1, 2, 0]]
>>> values = [1., 2., 3.]
>>> x = paddle.sparse.sparse_coo_tensor(indices, values, [3, 3])
>>> y = paddle.rand([3, 2])
>>> out = paddle.sparse.addmm(input, x, y, 3.0, 2.0)