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


Python PyTorch svd用法及代碼示例


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

用法:

torch.linalg.svd(A, full_matrices=True, *, out=None)

參數

  • A(Tensor) -形狀為 (*, m, n) 的張量,其中 * 是零個或多個批次維度。

  • full_matrices(bool,可選的) -控製是計算完整的還是縮減的 SVD,因此,返回的張量 UVh 的形狀。默認值:True

關鍵字參數

out(tuple,可選的) -三個張量的輸出元組。如果 None 則忽略。

返回

一個命名元組 (U, S, Vh) 對應於上麵的

S 將始終為實值,即使 A 很複雜。它也將按降序排列。

UVh 將具有與 A 相同的 dtype。左/右奇異向量將分別由U 的列和Vh 的行給出。

計算矩陣的奇異值分解 (SVD)。

\mathbb{K} \mathbb{R} 或者\mathbb{C} , 這全SVD矩陣的A \in \mathbb{K}^{m \times n} , 如果k = min(m,n), 定義為

其中 複數時的共軛轉置, 是實值時的轉置。矩陣 (以及因此 )在實際情況下是正交的,在複雜情況下是單一的。

什麽時候m > n(分別。m < n) 我們可以放棄最後一個m - n(分別。n - m) 列U(分別。V) 形成減少 SVD

其中 。在這種情況下, 也有正交列。

支持 float、double、cfloat 和 cdouble dtypes 的輸入。還支持批量矩陣,如果 A 是批量矩陣,則輸出具有相同的批量維度。

返回的分解是一個命名元組(U, S, Vh),它對應於上麵的

奇異值按降序返回。

參數full_matrices 在完整(默認)和減少的 SVD 之間進行選擇。

numpy.linalg.svd 的區別:

  • numpy.linalg.svd 不同,此函數始終返回三個張量的元組,並且不支持 compute_uv 參數。請使用 torch.linalg.svdvals() ,它隻計算奇異值,而不是 compute_uv=False

注意

full_matrices = True 時,相對於 U[…, :, min(m, n):]Vh[…, min(m, n):, :] 的梯度將被忽略,因為這些向量可以是相應子空間的任意基。

警告

返回的張量 UV 不是唯一的,它們相對於 A 也不是連續的。由於缺乏唯一性,不同的硬件和軟件可能會計算不同的奇異向量。

這種非唯一性是由於將任意一對奇異向量 乘以真實情況下的-1 或複雜情況下乘以 會產生矩陣的另外兩個有效奇異向量。當矩陣具有重複的奇異值時,這種非唯一性問題會更加嚴重。在這種情況下,可以將跨越子空間的UV的相關奇異向量乘以旋轉矩陣和the resulting vectors will span the same subspace

警告

使用 UVh 計算的梯度隻有在 A 不具有零作為奇異值或重複奇異值時才會是有限的。此外,如果任何兩個奇異值之間的距離接近於零,則梯度將在數值上不穩定,因為它取決於通過 的計算得出的奇異值 。當 A 具有小的奇異值時,梯度也會在數值上不穩定,因為它還取決於 的計算。

例子:

>>> A = torch.randn(5, 3)
>>> U, S, Vh = torch.linalg.svd(A, full_matrices=False)
>>> U.shape, S.shape, Vh.shape
(torch.Size([5, 3]), torch.Size([3]), torch.Size([3, 3]))
>>> torch.dist(A, U @ torch.diag(S) @ Vh)
tensor(1.0486e-06)

>>> U, S, Vh = torch.linalg.svd(A)
>>> U.shape, S.shape, Vh.shape
(torch.Size([5, 5]), torch.Size([3]), torch.Size([3, 3]))
>>> torch.dist(A, U[:, :3] @ torch.diag(S) @ Vh)
tensor(1.0486e-06)

>>> A = torch.randn(7, 5, 3)
>>> U, S, Vh = torch.linalg.svd(A, full_matrices=False)
>>> torch.dist(A, U @ torch.diag_embed(S) @ Vh)
tensor(3.0957e-06)

相關用法


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