快捷方式

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 个最大(或最小)特征值和相应的特征向量。

此函数是可通过 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 实例在以下属性中保存迭代过程的完整状态

    iparamsfparamsbparams - 分别是整数、浮点和布尔值输入参数的字典

    ivarsfvarsbvarstvars - 分别是整数、浮点、布尔和 Tensor 值迭代变量的字典。

    ABiK - 输入 Tensor 参数。

    EXSR - 迭代 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 算法的各种参数。

返回

特征值张量,大小为 (,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 页) 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 的全面开发者文档

查看文档

教程

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

查看教程

资源

查找开发资源并获得解答

查看资源