快捷方式

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)[原始碼][原始碼]

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

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

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

method=”ortho” - 帶有正交基選擇的 LOBPCG 方法 [StathopoulosEtal2002]。一種穩健的方法。

支援的輸入包括稠密、稀疏和批處理的稠密矩陣。

注意

一般來說,基本方法每次迭代花費的時間最少。然而,穩健方法的收斂速度快得多,並且更穩定。因此,通常不推薦使用基本方法,但在某些情況下可能更傾向於使用基本方法。

警告

反向方法不支援稀疏和複數輸入。它僅在未提供 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, 可選) – 輸入張量,大小為 (,m,m)(*, m, m)。未指定時,B 被解釋為單位矩陣。

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

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

  • k (integer, 可選) – 請求的特徵對數。預設為 XX 的列數(如果指定)或 1

  • n (integer, 可選) – 如果未指定 XX,則 n 指定生成的隨機近似特徵向量的大小。 n 的預設值為 k。如果指定了 XX,則 n 的值(如果指定)必須是 XX 的列數。

  • tol (float, 可選) – 停止準則的殘差容差。預設值為 feps ** 0.5,其中 feps 是給定輸入張量 A 資料型別的最小非零浮點數。

  • largest (bool, 可選) – 當為 True 時,求解最大特徵值的特徵問題。否則,求解最小特徵值的特徵問題。預設值為 True

  • method (str, 可選) – 選擇 LOBPCG 方法。參見上面函式描述。預設為 “ortho”。

  • niter (int, 可選) – 最大迭代次數。達到該次數時,迭代過程將被強制停止,並返回當前的特徵對近似。如果希望無限迭代直到滿足收斂條件,請使用 -1

  • tracker (callable, 可選) –

    一個用於跟蹤迭代過程的函式。指定時,在每個迭代步驟呼叫該函式,並將 LOBPCG 例項作為引數。LOBPCG 例項在其以下屬性中儲存了迭代過程的完整狀態

    iparams, fparams, bparams - 分別是整數、浮點數和布林值輸入引數的字典

    ivars, fvars, bvars, tvars - 分別是整數、浮點數、布林值和 Tensor 值迭代變數的字典。

    A, B, iK - 輸入 Tensor 引數。

    E, X, S, R - 迭代 Tensor 變數。

    例如

    ivars[“istep”] - 當前迭代步驟 X - 當前特徵向量近似 E - 當前特徵值近似 R - 當前殘差 ivars[“converged_count”] - 當前收斂的特徵對數 tvars[“rerr”] - 當前收斂準則狀態

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

    如果 tracker 設定 bvars[“force_stop”] = True,迭代過程將被強制停止。

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

  • ortho_fparams (dict, 可選) – 使用 method=”ortho” 時 LOBPCG 演算法的各種浮點引數字典。

  • ortho_bparams (dict, 可選) – 使用 method=”ortho” 時 LOBPCG 演算法的各種布林引數字典。

返回值

E (Tensor): 特徵值張量,大小為 (,k)(*, k)

X (Tensor): 特徵向量張量,大小為 (,m,k)(*, m, k)

返回型別

E (Tensor)

參考文獻

[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 pages) https://epubs.siam.org/doi/abs/10.1137/S1064827500366124

[StathopoulosEtal2002] Andreas Stathopoulos and Kesheng Wu. (2002) A Block Orthogonalization Procedure with Constant Synchronization Requirements. SIAM J. Sci. Comput., 23(6), 2165-2182. (18 pages) 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 pages) https://epubs.siam.org/doi/abs/10.1137/17M1129830

文件

訪問 PyTorch 的完整開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲取問題解答

檢視資源