torch.sparse.sampled_addmm

torch.sparse.sampled_addmm(input, mat1, mat2, *, beta=1., alpha=1., out=None) Tensor

根据input的稀疏模式指定的位置,执行密集矩阵mat1mat2的乘法运算,并将矩阵input加到最终结果中。

从数学角度来讲,这执行了以下操作:

$\text{out} = \alpha\ (\text{mat1} \mathbin{@} \text{mat2})*\text{spy}(\text{input}) + \beta\ \text{input}$

其中$\text{spy}(\text{input})$input 的稀疏模式矩阵,alphabeta 是缩放因子。在input 中非零值的位置,$\text{spy}(\text{input})$ 的值为1,其他地方的值为0。

注意

input 必须是稀疏的 CSR 张量,而 mat1mat2 必须是密集张量。

参数
  • 输入 (Tensor) – 一个形状为(m, n)的稀疏CSR矩阵,用于加法运算和采样矩阵乘法的计算

  • mat1 (Tensor) – 形状为(m, k)的密集矩阵,即将与其进行相乘操作

  • mat2 (张量) - 形状为(k, n)的密集矩阵,即将与其进行相乘操作。

关键字参数
  • 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)
本页目录