torch.sparse.sampled_addmm
- torch.sparse.sampled_addmm(input, mat1, mat2, *, beta=1., alpha=1., out=None) → Tensor
-
根据
input
的稀疏模式指定的位置,执行密集矩阵mat1
和mat2
的乘法运算,并将矩阵input
加到最终结果中。从数学角度来讲,这执行了以下操作:
$\text{out} = \alpha\ (\text{mat1} \mathbin{@} \text{mat2})*\text{spy}(\text{input}) + \beta\ \text{input}$其中$\text{spy}(\text{input})$ 是
input
的稀疏模式矩阵,alpha
和beta
是缩放因子。在input
中非零值的位置,$\text{spy}(\text{input})$ 的值为1,其他地方的值为0。注意
input
必须是稀疏的 CSR 张量,而mat1
和mat2
必须是密集张量。- 参数
- 关键字参数
-
-
beta (数字, 可选) –
input
的乘数 ($\beta$) -
alpha (Number, optional) – 用于 $mat1 @ mat2$ 的乘数 ($\alpha$)
-
out (Tensor, optional) – 输出张量。默认为None,若未指定则忽略。
-
示例:
>>> input = torch.eye(3, device='cuda').to_sparse_csr() >>> mat1 = torch.randn(3, 5, device='cuda') >>> mat2 = torch.randn(5, 3, device='cuda') >>> torch.sparse.sampled_addmm(input, mat1, mat2) tensor(crow_indices=tensor([0, 1, 2, 3]), col_indices=tensor([0, 1, 2]), values=tensor([ 0.2847, -0.7805, -0.1900]), device='cuda:0', size=(3, 3), nnz=3, layout=torch.sparse_csr) >>> torch.sparse.sampled_addmm(input, mat1, mat2).to_dense() tensor([[ 0.2847, 0.0000, 0.0000], [ 0.0000, -0.7805, 0.0000], [ 0.0000, 0.0000, -0.1900]], device='cuda:0') >>> torch.sparse.sampled_addmm(input, mat1, mat2, beta=0.5, alpha=0.5) tensor(crow_indices=tensor([0, 1, 2, 3]), col_indices=tensor([0, 1, 2]), values=tensor([ 0.1423, -0.3903, -0.0950]), device='cuda:0', size=(3, 3), nnz=3, layout=torch.sparse_csr)