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


Python PyTorch orthogonal用法及代碼示例

本文簡要介紹python語言中 torch.nn.utils.parametrizations.orthogonal 的用法。

用法:

torch.nn.utils.parametrizations.orthogonal(module, name='weight', orthogonal_map=None, *, use_trivialization=True)

參數

  • module(torch.nn.Module) -在其上注冊參數化的模塊。

  • name(str,可選的) -使正交的張量的名稱。默認值:"weight"

  • orthogonal_map(str,可選的) -以下之一:"matrix_exp""cayley""householder"。默認值:"matrix_exp" 如果矩陣是方陣或複數,則 "householder" 否則。

  • use_trivialization(bool,可選的) -是否使用動態平凡化框架。默認值:True

返回

具有注冊到指定權重的正交參數化的原始模塊

將正交或酉參數化應用於矩陣或一組矩陣。

\mathbb{K} \mathbb{R} 或者\mathbb{C} , 參數化矩陣Q \in \mathbb{K}^{m \times n} 正交作為

其中 是當 是複數時的共軛轉置,當 是實值時的轉置, n維單位矩陣。簡而言之,隻要 時, 將具有正交列,否則將具有正交行。

如果張量有兩個以上的維度,我們將其視為一批形狀為 (…, m, n) 的矩陣。

矩陣 可以根據原始張量通過三個不同的orthogonal_map 參數化:

  • "matrix_exp" /"cayley" matrix_exp() Cayley map 應用於 skew-symmetric 以給出正交矩陣。

  • "householder":計算 Householder 反射器的乘積 ( householder_product() )。

"matrix_exp" /"cayley" 通常使參數化權重比 "householder" 收斂得更快,但對於非常薄或非常寬的矩陣,它們的計算速度較慢。

如果use_trivialization=True(默認),參數化實現“Dynamic Trivialization Framework”,其中一個額外的矩陣 存儲在module.parametrizations.weight[0].base下。這有助於參數化層的收斂,但會消耗一些額外的內存。見Trivializations for Gradient-Based Optimization on Manifolds

的初始值:如果原始張量未參數化且 use_trivialization=True(默認),則 的初始值是原始張量的初始值,如果它是正交的(或在複雜情況下是單一的)並且它是否則通過 QR 分解正交化(參見 torch.linalg.qr() )。當它沒有參數化和 orthogonal_map="householder" 即使在 use_trivialization=False 時也會發生同樣的情況。否則,初始值是應用於原始張量的所有注冊參數化組合的結果。

注意

此函數是使用 register_parametrization() 中的參數化函數實現的。

例子:

>>> orth_linear = orthogonal(nn.Linear(20, 40))
>>> orth_linear
ParametrizedLinear(
in_features=20, out_features=40, bias=True
(parametrizations): ModuleDict(
    (weight): ParametrizationList(
    (0): _Orthogonal()
    )
)
)
>>> Q = orth_linear.weight
>>> torch.dist(Q.T @ Q, torch.eye(20))
tensor(4.9332e-07)

相關用法


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