当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.linalg.LinearOperatorLowRankUpdate用法及代码示例


用排名K 更新扰乱LinearOperator

继承自:LinearOperatorModule

用法

tf.linalg.LinearOperatorLowRankUpdate(
    base_operator, u, diag_update=None, v=None, is_diag_update_positive=None,
    is_non_singular=None, is_self_adjoint=None, is_positive_definite=None,
    is_square=None, name='LinearOperatorLowRankUpdate'
)

参数

  • base_operator 形状 [B1,...,Bb, M, N]
  • u 形状 [B1,...,Bb, M, K] Tensordtypebase_operator 相同。这是上面的U
  • diag_update 可选形状 [B1,...,Bb, K] Tensordtypebase_operator 相同。这是上面D 的对角线。默认为 D 作为身份运算符。
  • v u 和形状 [B1,...,Bb, N, K] 相同的 dtype 的可选 Tensor 默认为 v = u ,在这种情况下,扰动是对称的。如果 M != N ,则必须设置 v ,因为扰动不是方形的。
  • is_diag_update_positive Pythonbool。如果 True ,期望 diag_update > 0
  • is_non_singular 期望这个运算符是非奇异的。默认是 None ,除非 is_positive_definite 是 auto-set 是 True (见下文)。
  • is_self_adjoint 期望这个算子等于它的厄米转置。默认为 None ,除非 base_operator 是自伴随的并且 v = None (意思是 u=v ),在这种情况下默认为 True
  • is_positive_definite 期望这个算子是正定的。默认为 None ,除非 base_operator 是正定的 v = None (意思是 u=v )和 is_diag_update_positive ,在这种情况下默认为 True 。请注意,当二次形式 x^H A x 对于所有非零 x 具有正实部时,我们说运算符是正定的。
  • is_square 期望此运算符的行为类似于方形 [batch] 矩阵。
  • name LinearOperator 的名称。

抛出

  • ValueError 如果 is_X 标志设置不一致。

属性

  • H 返回当前的伴随LinearOperator.

    给定 A 表示此 LinearOperator ,返回 A* 。请注意,调用self.adjoint()self.H 是等效的。

  • base_operator 如果此运算符是 A = L + U D V^H ,则这是 L
  • batch_shape TensorShape这批尺寸的LinearOperator.

    如果此运算符的作用类似于带有 A.shape = [B1,...,Bb, M, N] 的批处理矩阵 A,则返回 TensorShape([B1,...,Bb]) ,相当于 A.shape[:-2]

  • diag_operator 如果此运算符为 A = L + U D V^H ,则为 D
  • diag_update 如果此运算符是 A = L + U D V^H ,则这是 D 的对角线。
  • domain_dimension 此运算符的域的维度(在向量空间的意义上)。

    如果此运算符的作用类似于带有 A.shape = [B1,...,Bb, M, N] 的批处理矩阵 A ,则返回 N

  • dtype TensorDType 由此 LinearOperator 处理。
  • graph_parents 这个的图依赖列表LinearOperator. (已弃用)

    警告:此函数已弃用。它将在未来的版本中删除。更新说明:请勿调用 graph_parents

  • is_diag_update_positive 如果此运算符是 A = L + U D V^H ,则提示 D > 0 元素。
  • is_non_singular
  • is_positive_definite
  • is_self_adjoint
  • is_square 返回 True/False 取决于此运算符是否为正方形。
  • parameters 用于实例化此 LinearOperator 的参数字典。
  • range_dimension 此运算符范围的维度(在向量空间的意义上)。

    如果此运算符的作用类似于带有 A.shape = [B1,...,Bb, M, N] 的批处理矩阵 A ,则返回 M

  • shape TensorShape这个的LinearOperator.

    如果此运算符的作用类似于带有 A.shape = [B1,...,Bb, M, N] 的批处理矩阵 A ,则返回 TensorShape([B1,...,Bb, M, N]) ,等效于 A.shape

  • tensor_rank 与此运算符对应的矩阵的秩(在张量的意义上)。

    如果此运算符的作用类似于带有 A.shape = [B1,...,Bb, M, N] 的批处理矩阵 A ,则返回 b + 2

  • u 如果此运算符是 A = L + U D V^H ,则这是 U
  • v 如果此运算符是 A = L + U D V^H ,则这是 V

该运算符的作用类似于 [batch] 矩阵 A ,对于某些 b >= 0 ,其形状为 [B1,...,Bb, M, N] 。第一个 b 索引索引批处理成员。对于每个批次索引 (i1,...,ib) , A[i1,...,ib,::] 是一个 M x N 矩阵。

LinearOperatorLowRankUpdate 表示 A = L + U D V^H ,其中

L, is a LinearOperator representing [batch] M x N matrices
U, is a [batch] M x K matrix.  Typically K << M.
D, is a [batch] K x K matrix.
V, is a [batch] N x K matrix.  Typically K << N.
V^H is the Hermitian transpose (adjoint) of V.

如果 M = N ,行列式和求解是使用矩阵行列式引理和伍德伯里恒等式完成的,因此要求 L 和 D 是非奇异的。

除非 L 和 D 的 "is_non_singular" 属性为 False,否则将尝试求解和行列式。

如果 L 和 D 是正定的,并且 U = V,则可以使用 Cholesky 分解来完成求解和行列式。

# Create a 3 x 3 diagonal linear operator.
diag_operator = LinearOperatorDiag(
    diag_update=[1., 2., 3.], is_non_singular=True, is_self_adjoint=True,
    is_positive_definite=True)

# Perturb with a rank 2 perturbation
operator = LinearOperatorLowRankUpdate(
    operator=diag_operator,
    u=[[1., 2.], [-1., 3.], [0., 0.]],
    diag_update=[11., 12.],
    v=[[1., 2.], [-1., 3.], [10., 10.]])

operator.shape
==> [3, 3]

operator.log_abs_determinant()
==> scalar Tensor

x = ... Shape [3, 4] Tensor
operator.matmul(x)
==> Shape [3, 4] Tensor

形状兼容性

该运算符作用于具有兼容形状的 [batch] 矩阵。 x 是与 matmulsolve 的形状兼容的批处理矩阵,如果

operator.shape = [B1,...,Bb] + [M, N],  with b >= 0
x.shape =        [B1,...,Bb] + [N, R],  with R >= 0.

性能

假设 operator 是形状为 [M, N]LinearOperatorLowRankUpdate ,由 base_operator 的秩 K 更新制成,它在 x 上执行 .matmul(x),具有 x.shape = [N, R]O(L_matmul*N*R) 复杂度(对于solve , determinant 。那么,如果 x.shape = [N, R]

  • operator.matmul(x)O(L_matmul*N*R + K*N*R)

如果 M = N

  • operator.solve(x)O(L_matmul*N*R + N*K*R + K^2*R + K^3)
  • operator.determinant()O(L_determinant + L_solve*N*K + K^2*N + K^3)

如果相反 operatorx 具有形状 [B1,...,Bb, M, N][B1,...,Bb, N, R] ,则每个操作的复杂性都会增加 B1*...*Bb

矩阵属性提示

LinearOperator 使用 is_X 形式的布尔标志初始化,用于 X = non_singular , self_adjoint , positive_definite , diag_update_positivesquare 。它们具有以下含义:

  • 如果 is_X == True ,调用者应该期望操作符具有属性 X 。这是一个应该实现的承诺,但不是运行时断言。例如,有限的浮点精度可能会导致违反这些承诺。
  • 如果 is_X == False ,调用者应该期望操作符没有 X
  • 如果is_X == None(默认),调用者应该没有任何期望。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.linalg.LinearOperatorLowRankUpdate。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。