multiary.py 3.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#   Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

15
from paddle import _C_ops
16 17 18 19 20 21 22 23
from paddle.fluid.framework import dygraph_only

__all__ = []


@dygraph_only
def addmm(input, x, y, beta=1.0, alpha=1.0, name=None):
    """
24
    Note:
25 26 27 28 29 30 31
        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:

    ..  math::

32
        out = alpha * x * y + beta * input
33

34
    The supported input/output Tensor layout are as follows:
35

36 37 38 39 40 41 42 43 44 45 46
    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.

    Args:
47 48 49
        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.
50 51 52
        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 :ref:`api_guide_Name`.
53

54
    Returns:
55
        SparseTensor|DenseTensor: Tensor type, date type and shape is the same with `input` .
56

57 58 59 60
    Examples:

        .. code-block:: python

61
            # required: gpu
62 63 64 65 66 67 68
            import paddle

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

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

81
    """
82
    return _C_ops.sparse_addmm(input, x, y, alpha, beta)