快捷方式

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 的完整开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获取问题解答

查看资源