快捷方式

torch.lobpcg

torch.lobpcg(A, k=None, B=None, X=None, n=None, iK=None, niter=None, tol=None, largest=None, method=None, tracker=None, ortho_iparams=None, ortho_fparams=None, ortho_bparams=None)[source][source]

使用無矩陣 LOBPCG 方法尋找對稱正定廣義特徵值問題的 k 個最大(或最小)特徵值和對應的特徵向量。

此函數是以下 LOBPCG 演算法的前端,可透過 method 引數選擇

method=”basic” - Andrew Knyazev 引入的 LOBPCG 方法,請參閱 [Knyazev2001]。 此方法較不穩健,當 Cholesky 應用於奇異輸入時可能會失敗。

method=”ortho” - 具有正交基底選擇的 LOBPCG 方法 [StathopoulosEtal2002]。 此方法較穩健。

支援的輸入為密集、稀疏以及密集矩陣的批次。

注意

一般來說,basic 方法在每次迭代中花費的時間最少。 但是,穩健的方法收斂速度更快且更穩定。 因此,通常不建議使用 basic 方法,但在某些情況下,可能更喜歡使用 basic 方法。

警告

反向傳播方法不支援稀疏和複數輸入。 它僅在未提供 B 時有效(即 B == None)。 我們正在積極研究擴展,並且演算法的詳細資訊將及時發布。

警告

雖然假設 A 是對稱的,但 A.grad 並非如此。 為了確保 A.grad 是對稱的,以便 A - t * A.grad 在一階最佳化例程中是對稱的,在執行 lobpcg 之前,我們執行以下對稱化映射:A -> (A + A.t()) / 2。 僅當 A 需要梯度時才執行此映射。

參數
  • A (Tensor) – 大小為 (,m,m)(*, m, m) 的輸入張量

  • B (Tensor, optional) – 大小為 (,m,m)(*, m, m) 的輸入張量。 未指定時,B 解釋為單位矩陣。

  • X (tensor, optional) – 大小為 (,m,n)(*, m, n) 的輸入張量,其中 k <= n <= m。 指定時,它會用作特徵向量的初始近似值。 X 必須是密集張量。

  • iK (tensor, optional) – 大小為 (,m,m)(*, m, m) 的輸入張量。 指定時,它將用作預處理器。

  • k (integer, optional) – 請求的特徵對數量。 預設值是 XX 的欄數(如果指定)或 1

  • n (整數, 選填) – 若未指定 XX,則 n 指定所產生 eigenvector 隨機近似值的大小。 n 的預設值為 k。 若有指定 XX,則 n 的值 (若有指定) 必須是 XX 的欄數。

  • tol (浮點數, 選填) – 停止條件的殘差容忍度。預設值為 feps ** 0.5,其中 feps 是給定輸入張量 A 資料類型中最小的非零浮點數。

  • largest (布林值, 選填) – 若為 True,則求解最大特徵值的特徵值問題。否則,求解最小特徵值的特徵值問題。預設值為 True

  • method (字串, 選填) – 選擇 LOBPCG 方法。請參閱上述函數的說明。預設值為 "ortho"。

  • niter (整數, 選填) – 最大迭代次數。達到此值時,迭代過程會硬性停止,並傳回特徵對的目前近似值。若要無限迭代直到滿足收斂條件,請使用 -1

  • tracker (可呼叫物件, 選填) –

    用於追蹤迭代過程的函數。指定時,會在每個迭代步驟呼叫,並以 LOBPCG 實例作為參數。LOBPCG 實例在下列屬性中包含迭代過程的完整狀態

    iparamsfparamsbparams - 分別為整數、浮點數和布林值輸入參數的字典

    ivarsfvarsbvarstvars - 分別為整數、浮點數、布林值和張量值迭代變數的字典。

    ABiK - 輸入張量引數。

    EXSR - 迭代張量變數。

    例如

    ivars[“istep”] - 目前迭代步驟 X - eigenvector 的目前近似值 E - 特徵值的目前近似值 R - 目前殘差 ivars[“converged_count”] - 已收斂特徵對的目前數量 tvars[“rerr”] - 收斂條件的目前狀態

    請注意,當 tracker 儲存 LOBPCG 實例中的張量物件時,它必須複製這些物件。

    如果 tracker 設定 bvars[“force_stop”] = True,則迭代過程將會硬性停止。

  • ortho_iparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。

  • ortho_fparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。

  • ortho_bparams (字典, 選填) – 使用 method=”ortho” 時,LOBPCG 演算法的各種參數。

傳回

大小為 (,k)(*, k) 的特徵值張量

X (張量):大小為 (,m,k)(*, m, k) 的 eigenvector 張量

傳回類型

E (張量)

參考文獻

[Knyazev2001] Andrew V. Knyazev。(2001) Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method。SIAM J. Sci. Comput.,23(2),517-541。(25 頁) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124

[StathopoulosEtal2002] Andreas Stathopoulos 和 Kesheng Wu。(2002) A Block Orthogonalization Procedure with Constant Synchronization Requirements。SIAM J. Sci. Comput.,23(6),2165-2182。(18 頁) https://epubs.siam.org/doi/10.1137/S1064827500370883

[DuerschEtal2018] Jed A. Duersch、Meiyue Shao、Chao Yang、Ming Gu。(2018) A Robust and Efficient Implementation of LOBPCG。SIAM J. Sci. Comput.,40(5),C655-C676。(22 頁) https://epubs.siam.org/doi/abs/10.1137/17M1129830

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學

取得適合初學者和進階開發人員的深入教學

檢視教學

資源

尋找開發資源並獲得問題解答

檢視資源