當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python PyTorch qr用法及代碼示例

本文簡要介紹python語言中 torch.qr 的用法。

用法:

torch.qr(input, some=True, *, out=None)

參數

  • input(Tensor) -大小為 的輸入張量,其中 * 是零個或多個批次維度,由維度為 的矩陣組成。

  • some(bool,可選的) -

    設置為 True 以減少 QR 分解,設置為 False 以完成 QR 分解。如果k = min(m, n) 那麽:

    • some=True : 返回 (Q, R) 尺寸為 (m, k), (k, n)(默認)

    • 'some=False' : 返回 (Q, R) 尺寸為 (m, m), (m, n)

關鍵字參數

out(tuple,可選的) -QR 張量的元組。 QR的尺寸在上麵some的說明中有詳細說明。

計算矩陣或一批矩陣 input 的 QR 分解,並返回張量的命名元組 (Q, R),使得 是正交矩陣或一批正交矩陣,而 是一個上三角矩陣或一批上三角矩陣。

如果 someTrue ,則此函數返回瘦(簡化)QR 分解。否則,如果 someFalse ,則此函數返回完整的 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,並且可能在不同的設備類型或不同的平台上產生不同的(有效)分解。

例子:

>>> 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.transpose(-2, -1), q), torch.eye(5))
True

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.qr。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。