本文簡要介紹python語言中 torch.linalg.svd
的用法。
用法:
torch.linalg.svd(A, full_matrices=True, *, out=None)
out(tuple,可選的) -三個張量的輸出元組。如果
None
則忽略。一個命名元組
(U, S, Vh)
對應於上麵的 、 、 。S
將始終為實值,即使A
很複雜。它也將按降序排列。U
和Vh
將具有與A
相同的 dtype。左/右奇異向量將分別由U
的列和Vh
的行給出。計算矩陣的奇異值分解 (SVD)。
讓
是 或者 , 這全SVD矩陣的 , 如果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):, :]
的梯度將被忽略,因為這些向量可以是相應子空間的任意基。警告
返回的張量
U
和V
不是唯一的,它們相對於A
也不是連續的。由於缺乏唯一性,不同的硬件和軟件可能會計算不同的奇異向量。這種非唯一性是由於將任意一對奇異向量
-1
或複雜情況下乘以 會產生矩陣的另外兩個有效奇異向量。當矩陣具有重複的奇異值時,這種非唯一性問題會更加嚴重。在這種情況下,可以將跨越子空間的U
和V
的相關奇異向量乘以旋轉矩陣和the resulting vectors will span the same subspace。 乘以真實情況下的警告
使用
U
或Vh
計算的梯度隻有在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)
參數:
關鍵字參數:
返回:
相關用法
- Python PyTorch svdvals用法及代碼示例
- Python PyTorch saved_tensors_hooks用法及代碼示例
- Python PyTorch sqrt用法及代碼示例
- Python PyTorch skippable用法及代碼示例
- Python PyTorch squeeze用法及代碼示例
- Python PyTorch square用法及代碼示例
- Python PyTorch save_on_cpu用法及代碼示例
- Python PyTorch scatter_object_list用法及代碼示例
- Python PyTorch skip_init用法及代碼示例
- Python PyTorch simple_space_split用法及代碼示例
- Python PyTorch sum用法及代碼示例
- Python PyTorch sub用法及代碼示例
- Python PyTorch sparse_csr_tensor用法及代碼示例
- Python PyTorch sentencepiece_numericalizer用法及代碼示例
- Python PyTorch symeig用法及代碼示例
- Python PyTorch sinh用法及代碼示例
- Python PyTorch sinc用法及代碼示例
- Python PyTorch std_mean用法及代碼示例
- Python PyTorch spectral_norm用法及代碼示例
- Python PyTorch slogdet用法及代碼示例
- Python PyTorch symbolic_trace用法及代碼示例
- Python PyTorch shutdown用法及代碼示例
- Python PyTorch sgn用法及代碼示例
- Python PyTorch set_flush_denormal用法及代碼示例
- Python PyTorch set_default_dtype用法及代碼示例
注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.linalg.svd。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。