快捷键

torch.sparse.mm

torch.sparse.mm()

执行稀疏矩阵 mat1 和(稀疏或斜对齐)矩阵 mat2 的矩阵乘法。类似于 torch.mm() ,如果 mat1(n×m)(n \times m) 张量, mat2(m×p)(m \times p) 张量,则输出将是 (n×p)(n \times p) 张量。当 mat1 是 COO 张量时,它必须具有 sparse_dim = 2。当输入是 COO 张量时,此函数还支持对两个输入的反向传播。

支持 CSR 和 COO 存储格式。

注意

此函数不支持对 CSR 矩阵进行求导。

此函数还额外接受一个可选的 reduce 参数,允许指定一个可选的降维操作,从数学上执行以下操作:

zij=k=0K1xikykjz_{ij} = \bigoplus_{k = 0}^{K - 1} x_{ik} y_{kj}

其中 \bigoplus 定义了降维运算符。 reduce 仅在 CPU 设备上的 CSR 存储格式上实现。

参数:
  • mat1(张量)- 要相乘的第一个稀疏矩阵

  • mat2(张量)- 要相乘的第二个矩阵,可以是稀疏矩阵或稠密矩阵

  • reduce(str,可选)- 对非唯一索引应用( "sum""mean""amax""amin" )的降维操作。默认 "sum"

形状:

此函数输出张量的格式为:- 稀疏 x 稀疏 -> 稀疏 - 稀疏 x 稠密 -> 稠密

示例:

>>> a = torch.tensor([[1., 0, 2], [0, 3, 0]]).to_sparse().requires_grad_()
>>> a
tensor(indices=tensor([[0, 0, 1],
                       [0, 2, 1]]),
       values=tensor([1., 2., 3.]),
       size=(2, 3), nnz=3, layout=torch.sparse_coo, requires_grad=True)
>>> b = torch.tensor([[0, 1.], [2, 0], [0, 0]], requires_grad=True)
>>> b
tensor([[0., 1.],
        [2., 0.],
        [0., 0.]], requires_grad=True)
>>> y = torch.sparse.mm(a, b)
>>> y
tensor([[0., 1.],
        [6., 0.]], grad_fn=<SparseAddmmBackward0>)
>>> y.sum().backward()
>>> a.grad
tensor(indices=tensor([[0, 0, 1],
                       [0, 2, 1]]),
       values=tensor([1., 0., 2.]),
       size=(2, 3), nnz=3, layout=torch.sparse_coo)
>>> c = a.detach().to_sparse_csr()
>>> c
tensor(crow_indices=tensor([0, 2, 3]),
       col_indices=tensor([0, 2, 1]),
       values=tensor([1., 2., 3.]), size=(2, 3), nnz=3,
       layout=torch.sparse_csr)
>>> y1 = torch.sparse.mm(c, b, 'sum')
>>> y1
tensor([[0., 1.],
        [6., 0.]], grad_fn=<SparseMmReduceImplBackward0>)
>>> y2 = torch.sparse.mm(c, b, 'max')
>>> y2
tensor([[0., 1.],
        [6., 0.]], grad_fn=<SparseMmReduceImplBackward0>)

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源