用排名K 更新扰乱LinearOperator。
继承自:LinearOperator,Module
用法
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]Tensor与dtype与base_operator相同。这是上面的U。 -
diag_update可选形状[B1,...,Bb, K]Tensor与dtype与base_operator相同。这是上面D的对角线。默认为D作为身份运算符。 -
v与u和形状[B1,...,Bb, N, K]相同的dtype的可选Tensor默认为v = u,在这种情况下,扰动是对称的。如果M != N,则必须设置v,因为扰动不是方形的。 -
is_diag_update_positivePythonbool。如果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_shapeTensorShape这批尺寸的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。 -
dtypeTensor的DType由此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。 -
shapeTensorShape这个的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 是与 matmul 和 solve 的形状兼容的批处理矩阵,如果
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)
如果相反 operator 和 x 具有形状 [B1,...,Bb, M, N] 和 [B1,...,Bb, N, R] ,则每个操作的复杂性都会增加 B1*...*Bb 。
矩阵属性提示
此 LinearOperator 使用 is_X 形式的布尔标志初始化,用于 X = non_singular , self_adjoint , positive_definite , diag_update_positive 和 square 。它们具有以下含义:
- 如果
is_X == True,调用者应该期望操作符具有属性X。这是一个应该实现的承诺,但不是运行时断言。例如,有限的浮点精度可能会导致违反这些承诺。 - 如果
is_X == False,调用者应该期望操作符没有X。 - 如果
is_X == None(默认),调用者应该没有任何期望。
相关用法
- Python tf.linalg.LinearOperatorLowRankUpdate.matvec用法及代码示例
- Python tf.linalg.LinearOperatorLowRankUpdate.solve用法及代码示例
- Python tf.linalg.LinearOperatorLowRankUpdate.matmul用法及代码示例
- Python tf.linalg.LinearOperatorLowRankUpdate.assert_non_singular用法及代码示例
- Python tf.linalg.LinearOperatorLowRankUpdate.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorLowRankUpdate.diag_part用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.matvec用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.assert_non_singular用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.matmul用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.diag_part用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.solve用法及代码示例
- Python tf.linalg.LinearOperatorFullMatrix.matvec用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz.solve用法及代码示例
- Python tf.linalg.LinearOperatorIdentity.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorPermutation.solve用法及代码示例
- Python tf.linalg.LinearOperatorKronecker.diag_part用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz.matvec用法及代码示例
- Python tf.linalg.LinearOperatorBlockLowerTriangular.solvevec用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.linalg.LinearOperatorLowRankUpdate。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
