torch.qr ¬
- torch.qr(inputTensor, somebool=True, *, outUnion[TensorTuple[Tensor...]List[Tensor]None] ¬
计算矩阵或矩阵批量的 QR 分解,并返回一个包含张量的 namedtuple(Q, R),其中 是正交矩阵或正交矩阵批, 是上三角矩阵或上三角矩阵批。
如果
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
的前 列线性无关时定义良好。一旦 QR 支持置换,此行为可能会改变。注意
此函数对于 CPU 输入使用 LAPACK,对于 CUDA 输入使用 MAGMA,可能在不同的设备类型或不同平台上产生不同的(有效的)分解。
- 参数:
输入(张量)- 大小为 的输入张量,其中 * 表示零个或多个批处理维度,这些维度由维度为 的矩阵组成。
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