• 文档 >
  • torch >
  • torch.qr
快捷键

torch.qr ¬

torch.qr(inputTensor, somebool=True, *, outUnion[TensorTuple[Tensor...]List[Tensor]None] ¬

计算矩阵或矩阵批量的 QR 分解,并返回一个包含张量的 namedtuple(Q, R),其中 input=QR\text{input} = Q R 是正交矩阵或正交矩阵批, RR 是上三角矩阵或上三角矩阵批。

如果 some 等于 True ,则此函数返回瘦(简化)QR 分解。否则,如果 some 等于 False ,则此函数返回完整的 QR 分解。

警告

torch.qr() 已被弃用,并将在未来的 PyTorch 版本中删除。布尔参数 some 已被字符串参数 mode 替换。

应将 Q, R = torch.qr(A) 替换为

Q, R = torch.linalg.qr(A)

应将 Q, R = torch.qr(A, some=False) 替换为

Q, R = torch.linalg.qr(A, mode="complete")

警告

如果您计划反向传播通过 QR,请注意,当前的反向实现仅在 input 的前 min(input.size(1),input.size(2))\min(input.size(-1), input.size(-2)) 列线性无关时定义良好。一旦 QR 支持置换,此行为可能会改变。

注意

此函数对于 CPU 输入使用 LAPACK,对于 CUDA 输入使用 MAGMA,可能在不同的设备类型或不同平台上产生不同的(有效的)分解。

参数:
  • 输入(张量)- 大小为 (,m,n)(*, m, n) 的输入张量,其中 * 表示零个或多个批处理维度,这些维度由维度为 m×nm \times n 的矩阵组成。

  • some(布尔值,可选)-

    设置为 True 以进行简化 QR 分解,设置为 False 以进行完整 QR 分解。如果 k = min(m, n) 则:

    • some=True :返回 (Q, R) 的维度为 (m, k),(k, n)(默认)

    • 返回 (Q, R) ,维度为 (m, m),(m, n)

关键字参数:

out (元组,可选) - Q 和 R 张量的元组。Q 和 R 的维度在 some 的描述中详细说明。

示例:

>>> a = torch.tensor([[12., -51, 4], [6, 167, -68], [-4, 24, -41]])
>>> q, r = torch.qr(a)
>>> q
tensor([[-0.8571,  0.3943,  0.3314],
        [-0.4286, -0.9029, -0.0343],
        [ 0.2857, -0.1714,  0.9429]])
>>> r
tensor([[ -14.0000,  -21.0000,   14.0000],
        [   0.0000, -175.0000,   70.0000],
        [   0.0000,    0.0000,  -35.0000]])
>>> torch.mm(q, r).round()
tensor([[  12.,  -51.,    4.],
        [   6.,  167.,  -68.],
        [  -4.,   24.,  -41.]])
>>> torch.mm(q.t(), q).round()
tensor([[ 1.,  0.,  0.],
        [ 0.,  1., -0.],
        [ 0., -0.,  1.]])
>>> a = torch.randn(3, 4, 5)
>>> q, r = torch.qr(a, some=False)
>>> torch.allclose(torch.matmul(q, r), a)
True
>>> torch.allclose(torch.matmul(q.mT, q), torch.eye(5))
True

© 版权所有 PyTorch 贡献者。

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

文档

PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源