mv¶
注解
该 API 从 CUDA 11.0 开始支持。
输入 x
为稀疏矩阵,输入 vec
为稠密向量,对 x 与 vec 计算矩阵与向量相乘。
输入、输出的格式对应关系如下:
注解
x[SparseCsrTensor] @ vec[DenseTensor] -> out[DenseTensor]
x[SparseCooTensor] @ vec[DenseTensor] -> out[DenseTensor]
该 API 支持反向传播。输入 x 的 shape 应该为 [M, N] ,输入 vec 的 shape 应该为 [N] ,输出 out 的 shape 为 [M] 。
参数¶
x (SparseTensor) - 输入的 2D 稀疏 Tensor,可以为 SparseCooTensor|SparseCsrTensor。数据类型为 float32、float64。
vec (DenseTensor) - 输入 1D 稠密 Tensor,表示一个向量。数据类型为 float32、float64。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
返回¶
DenseTensor: 维度为 1,表示一个向量,数据类型与输入相同。
代码示例¶
# required: gpu
import paddle
from paddle.fluid.framework import _test_eager_guard
paddle.seed(100)
# csr @ dense -> dense
with _test_eager_guard():
crows = [0, 2, 3, 5]
cols = [1, 3, 2, 0, 1]
values = [1., 2., 3., 4., 5.]
dense_shape = [3, 4]
csr = paddle.sparse.sparse_csr_tensor(crows, cols, values, dense_shape)
# Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(gpu:0), stop_gradient=True,
# crows=[0, 2, 3, 5],
# cols=[1, 3, 2, 0, 1],
# values=[1., 2., 3., 4., 5.])
vec = paddle.randn([4])
out = paddle.sparse.mv(csr, vec)
# Tensor(shape=[3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
# [-3.85499096, -2.42975140, -1.75087738])