Spec-Zone.ru › TensorFlow 1.15

tf.linalg.LinearOperatorLowRankUpdate

Просмотреть исходный код на GitHub

Изменение LinearOperator с обновлением ранга K.

Наследуется от: LinearOperator

Псевдонимы

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.linalg.LinearOperatorLowRankUpdate, `tf.compat.v2.linalg.LinearOperatorLowRankUpdate`

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'
)

Этот оператор ведет себя как [пакетная] матрица A с формой [B1,...,Bb, M, N] для некоторого b >= 0. Первые 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 были невырожденными.

Будут предприняты попытки решения и вычисления определителя, если свойство «is_non_singular» для L и D равно False.

В случае, если L и D являются положительно определенными, и U = V, решения и вычисления определителя могут быть выполнены с помощью факторизации Холецкого.

# 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

Совместимость форм

Этот оператор действует на [пакетную] матрицу с совместимой формой. x является пакетной матрицей с совместимой формой для matmul и solve если

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

Производительность

Предположим, что operator является LinearOperatorLowRankUpdate с формой [M, N], созданной из обновления ранга K оператора base_operator, которое выполняет .matmul(x) на 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 (по умолчанию), вызывающие функции не должны иметь ожиданий в обоих случаях.
Аргументы
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 Необязательный Tensor той же dtype что и у u и формой [B1,...,Bb, N, K]. По умолчанию v = u, в этом случае возмущение симметрично. Если M != N, то v должно быть установлено, так как возмущение не квадратное.
is_diag_update_positive Python bool. Если True, ожидать diag_update > 0.
is_non_singular Ожидать, что этот оператор невырожден. По умолчанию None, если is_positive_definite не устанавливается автоматически в 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 Ожидать, что этот оператор действует как квадратные [пакетные] матрицы.
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 Размер пакетных измерений этого LinearOperator.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает 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 с A.shape = [B1,...,Bb, M, N], то это возвращает N.

dtype Размерность DType Tensor обрабатываемого этим LinearOperator.
graph_parents Список зависимостей графа этого LinearOperator.
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 в зависимости от того, является ли этот оператор квадратным.
range_dimension Размерность (в смысле векторных пространств) области значений этого оператора.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает M.

shape TensorShape этого LinearOperator.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает TensorShape([B1,...,Bb, M, N]), эквивалентное A.shape.

tensor_rank Ранг (в смысле тензоров) матрицы, соответствующей этому оператору.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает b + 2.

u Если этот оператор A = L + U D V^H, это U.
v Если этот оператор A = L + U D V^H, это V.

Методы

add_to_tensor

Просмотреть исходный код

add_to_tensor(
    x, name='add_to_tensor'
)

Добавить матрицу, представленную этим оператором, к x. Эквивалентно A + x.

Аргументы
x Tensor с той же dtype и формой, совместимой с self.shape.
name Имя для этого Op.
Возвращает
Tensor с формой расширения и той же dtype что и self.

adjoint

Просмотреть исходный код

adjoint(
    name='adjoint'
)

Возвращает сопряжённое значение текущего LinearOperator.

Дано A , представляющее этот LinearOperator, вернуть A*. Обратите внимание, что вызов self.adjoint() и self.H эквивалентны.

Аргументы
name Имя для этого Op.
Возвращает
LinearOperator , представляющий сопряжённый оператор для этого LinearOperator.

assert_non_singular

Просмотреть исходный код

assert_non_singular(
    name='assert_non_singular'
)

Возвращает Op, который проверяет, что данный оператор невырожден.

Этот оператор считается невырожденным, если

ConditionNumber < max{100, range_dimension, domain_dimension} * eps,
eps := np.finfo(self.dtype.as_numpy_dtype).eps
Аргументы
name Строковое имя для добавления к созданным операциям.
Возвращает
Assert Op, который, при выполнении, выбросит InvalidArgumentError, если оператор вырожден.

assert_positive_definite

Просмотреть исходный код

assert_positive_definite(
    name='assert_positive_definite'
)

Возвращает Op, который проверяет, что данный оператор положительно определён.

Здесь положительно определённый означает, что квадратичная форма x^H A x имеет положительную действительную часть для всех ненулевых x. Обратите внимание, что для положительной определённости оператора не требуется самосопряжённость.

Аргументы
name Имя для этого Op.
Возвращает
Assert Op, который, при выполнении, выбросит InvalidArgumentError, если оператор не является положительно определённым.

assert_self_adjoint

Просмотреть исходный код

assert_self_adjoint(
    name='assert_self_adjoint'
)

Возвращает Op, который проверяет, что данный оператор самосопряжён.

Здесь проверяется, что данный оператор точно равен своему эрмитовому транспонированию.

Аргументы
name Строковое имя для добавления к созданным операциям.
Возвращает
Assert Op, который, при выполнении, выбросит InvalidArgumentError, если оператор не самосопряжён.

batch_shape_tensor

Просмотреть исходный код

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма пакетных измерений данного оператора, определяемая во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращается Tensor , содержащий [B1,...,Bb].

Аргументы
name Имя для этого Op.
Возвращает
int32 Tensor

cholesky

Просмотреть исходный код

cholesky(
    name='cholesky'
)

Возвращает фактор Холецкого как LinearOperator.

Дано A , представляющее этот LinearOperator, если A является положительно определённой и самосопряжённой, возвращает L, где A = L L^T, т.е. разложение Холецкого.

Аргументы
name Имя для этого Op.
Возвращает
LinearOperator , представляющий нижнетреугольную матрицу в разложении Холецкого.
Исключения
ValueError Если LinearOperator не указано, как положительно определённое и самосопряжённое.

determinant

Просмотреть исходный код

determinant(
    name='det'
)

Определитель для каждого элемента пакета.

Аргументы
name Имя для этого Op.
Возвращает
Tensor с формой self.batch_shape и теми же dtype , что и self.
Исключения
NotImplementedError Если self.is_square является False.

diag_part

Просмотреть исходный код

diag_part(
    name='diag_part'
)

Эффективный способ получить [пакетную] диагональную часть этого оператора.

Если этот оператор имеет форму [B1,...,Bb, M, N], то возвращается Tensor diagonal, с формой [B1,...,Bb, min(M, N)], где diagonal[b1,...,bb, i] = self.to_dense()[b1,...,bb, i, i].

my_operator = LinearOperatorDiag([1., 2.])

# Efficiently get the diagonal
my_operator.diag_part()
==> [1., 2.]

# Equivalent, but inefficient method
tf.linalg.diag_part(my_operator.to_dense())
==> [1., 2.]
Аргументы
name Имя для этого Op.
Возвращает
diag_part Tensor с теми же dtype , что и self.

domain_dimension_tensor

Просмотреть исходный код

domain_dimension_tensor(
    name='domain_dimension_tensor'
)

Размерность (в смысле векторных пространств) области действия этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращает N.

Аргументы
name Имя для этого Op.
Возвращает
int32 Tensor

inverse

Просмотреть исходный код

inverse(
    name='inverse'
)

Возвращает обратный оператор для этого LinearOperator.

Дано A , представляющее этот LinearOperator, вернуть LinearOperator , представляющее A^-1.

Аргументы
name Имя области действия для операций, добавленных данным методом.
Возвращает
LinearOperator , представляющее обратную матрицу.
Исключения
ValueError Если LinearOperator не указано, как non_singular.

log_abs_determinant

Просмотреть исходный код

log_abs_determinant(
    name='log_abs_det'
)

Логарифм абсолютного значения определителя для каждого элемента пакета.

Аргументы
name Имя для этого Op.
Возвращает
Tensor с формой self.batch_shape и теми же dtype , что и self.
Raises
NotImplementedError Если self.is_square равно False.

matmul

Просмотреть исходный код

matmul(
    x, adjoint=False, adjoint_arg=False, name='matmul'
)

Преобразование [пакетной] матрицы x с помощью левого умножения: x --> Ax.

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

X = ... # shape [..., N, R], batch matrix, R > 0.

Y = operator.matmul(X)
Y.shape
==> [..., M, R]

Y[..., :, r] = sum_j A[..., :, j] X[j, r]
Args
x LinearOperator или Tensor с совместимой формой и теми же dtype что и self. См. строку документации класса для определения совместимости.
adjoint Питоновский bool. Если True, умножить слева на сопряжённое: A^H x.
adjoint_arg Питоновский bool. Если True, вычислить A x^H, где x^H — это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Имя для этого Op.
Returns
LinearOperator или Tensor с формой [..., M, R] и теми же dtype что и self.

matvec

Просмотреть исходный код

matvec(
    x, adjoint=False, name='matvec'
)

Преобразование [пакетного] вектора x с помощью левого умножения: x --> Ax.

# Make an operator acting like batch matric A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)

X = ... # shape [..., N], batch vector

Y = operator.matvec(X)
Y.shape
==> [..., M]

Y[..., :] = sum_j A[..., :, j] X[..., j]
Args
x Tensor с совместимой формой и теми же dtype что и self. x рассматривается как [пакетный] вектор, то есть для каждой группы ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости.
adjoint Питоновский bool. Если True, умножить слева на сопряжённое: A^H x.
name Имя для этого Op.
Returns
Tensor с формой [..., M] и теми же dtype что и self.

range_dimension_tensor

Просмотреть исходный код

range_dimension_tensor(
    name='range_dimension_tensor'
)

Размерность (в смысле векторных пространств) области значений этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает M.

Args
name Имя для этого Op.
Returns
int32 Tensor

shape_tensor

Просмотреть исходный код

shape_tensor(
    name='shape_tensor'
)

Форма этого LinearOperator, определённая во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает Tensor содержащее [B1,...,Bb, M, N], эквивалентно tf.shape(A).

Args
name Имя для этого Op.
Returns
int32 Tensor

solve

Просмотреть исходный код

solve(
    rhs, adjoint=False, adjoint_arg=False, name='solve'
)

Решить (точно или приближённо) R (пакетные) системы уравнений: A X = rhs.

Возвращённое Tensor будет близко к точному решению, если A хорошо обусловлена. В противном случае близость будет варьироваться. Подробности см. в строке документации класса.

Примеры:

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

# Solve R > 0 linear systems for every member of the batch.
RHS = ... # shape [..., M, R]

X = operator.solve(RHS)
# X[..., :, r] is the solution to the r'th linear system
# sum_j A[..., :, j] X[..., j, r] = RHS[..., :, r]

operator.matmul(X)
==> RHS
Args
rhs Tensor с теми же dtype что и этот оператор и совместимой формой. rhs рассматривается как [пакетная] матрица, то есть для каждой группы ведущих измерений последние два измерения определяют матрицу. См. строку документации класса для определения совместимости.
adjoint Питоновский bool. Если True, решить систему, включающую сопряжённый оператор: A^H X = rhs.
adjoint_arg Питоновский bool. Если True, решить A X = rhs^H где rhs^H — эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Область имён для операций, добавленных этим методом.
Returns
Tensor с формой [...,N, R] и теми же dtype что и rhs.
Raises
NotImplementedError Если self.is_non_singular или is_square равно False.

solvevec

Просмотреть исходный код

solvevec(
    rhs, adjoint=False, name='solve'
)

Решить одно уравнение с лучшим результатом: A X = rhs.

Возвращённое Tensor будет близко к точному решению, если A хорошо обусловлена. В противном случае близость будет варьироваться. Подробности см. в строке документации класса.

Примеры:

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

# Solve one linear system for every member of the batch.
RHS = ... # shape [..., M]

X = operator.solvevec(RHS)
# X is the solution to the linear system
# sum_j A[..., :, j] X[..., j] = RHS[..., :]

operator.matvec(X)
==> RHS
Args
rhs Tensor с теми же dtype что и этот оператор. rhs рассматривается как [пакетный] вектор, то есть для каждой группы ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости по пакетным измерениям.
adjoint Питоновский bool. Если True, решить систему, включающую сопряжённый оператор: A^H X = rhs.
name Область имён для операций, добавленных этим методом.
Returns
Tensor с формой [...,N] и теми же dtype что и rhs.
Raises
NotImplementedError Если self.is_non_singular или is_square равно False.

tensor_rank_tensor

Просмотреть исходный код

tensor_rank_tensor(
    name='tensor_rank_tensor'
)

Ранг (в смысле тензоров) матрицы, соответствующей этому оператору.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает b + 2.

Args
name Имя для этого Op.
Returns
int32 Tensor, определённая во время выполнения.

to_dense

Просмотреть исходный код

to_dense(
    name='to_dense'
)

Возвращает плотную (пакетную) матрицу, представляющую этот оператор.

trace

Просмотреть исходный код

trace(
    name='trace'
)

След линейного оператора, равный сумме self.diag_part().

Если оператор квадратный, то это также сумма собственных значений.

Аргументы
name Имя для этой Op.
Возвращаемое значение
Форма [B1,...,Bb] Tensor той же dtype что и self.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/linalg/LinearOperatorLowRankUpdate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API