torch.qr#
- torch.qr(input: Tensor, some: bool = True, *, out: Union[Tensor, Tuple[Tensor, ...], List[Tensor], None])#
計算矩陣或矩陣批次的 QR 分解
input,並返回一個命名元組 (Q, R),使得 ,其中 是一個正交矩陣或正交矩陣批次,而 是一個上三角矩陣或上三角矩陣批次。如果
some為True,則此函式返回“thin”(或稱為“reduced”)QR 分解。否則,如果some為False,則此函式返回完整的 QR 分解。警告
torch.qr()已棄用,建議使用torch.linalg.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,並且在不同的裝置型別或不同的平臺上可能會產生不同的(但有效的)分解。
- 引數
- 關鍵字引數
out (tuple, optional) – 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