Spec-Zone.ru › TensorFlow 2.3

tf.linalg.LinearOperatorLowRankUpdate

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

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

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

Псевдонимы

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

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

tf.compat.v1.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 Возвращает сопряжённый оператор.

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

base_operator Если этот оператор A = L + U D V^H, это L.
batch_shape Размерность пакетных измерений этого оператора.

Если этот оператор действует как пакетная матрица 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 Операции, выполняемые этим оператором.
graph_parents Список зависимостей графа этого оператора. (устаревшее)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Не вызывайте 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 в зависимости от того, является ли этот оператор квадратным.
range_dimension Размерность (в смысле векторных пространств) области значений этого оператора.

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

shape Форма этого оператора.

Если этот оператор действует как пакетная матрица 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 Имя для этой операции.
Возвращает
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 не предполагается положительно определённым и самосопряжённым.

cond

Просмотр исходного кода

cond(
    name='cond'
)

Возвращает число обусловленности этого линейного оператора.

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

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

eigvals

Просмотр исходного кода

eigvals(
    name='eigvals'
)

Возвращает собственные значения этого линейного оператора.

Если оператор отмечен как самосопряжённый (через is_self_adjoint ), это вычисление может быть более эффективным.

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

Обратное

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

inverse(
    name='inverse'
)

Возвращает обратную матрицу этого объекта.

Учитывая объект, представляющий этот объект, верните объект, представляющий обратную матрицу.

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

Логарифм модуля определителя

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

log_abs_determinant(
    name='log_abs_det'
)

Логарифм модуля определителя для каждого члена пакетной обработки.

Аргументы
name Имя для этого объекта.
Возвращаемое значение
Объект с формой и типом данных, соответствующими входному объекту.
Исключения
NotImplementedError Если объект не обратим.

Произведение матриц

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

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

Преобразование [пакетной] матрицы с левым умножением.

# 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]
Аргументы
x Матрица или вектор с совместимой формой и типом данных.
adjoint Python-выражение. Если True, умножает слева на сопряжённую матрицу.
adjoint_arg Python-выражение. Если True, вычисляет результат с эрмитовым транспонированием.
name Имя для этого объекта.
Возвращаемое значение
Результат умножения.

Произведение матрицы и вектора

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

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

Преобразование [пакетного] вектора с левым умножением.

# Make an operator acting like batch matrix 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]
Аргументы
x Вектор с совместимой формой и типом данных.
adjoint Python-выражение. Если True, умножает слева на сопряжённую матрицу.
name Имя для этого объекта.
Возвращаемое значение
Результат умножения.

Размерность области значений

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

range_dimension_tensor(
    name='range_dimension_tensor'
)

Размерность области значений этого оператора.

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

Если этот оператор действует как пакетная матрица с ..., то возвращается ...

Аргументы
name Имя для этого объекта.
Возвращаемое значение
Размерность области значений.

Форма

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

shape_tensor(
    name='shape_tensor'
)

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

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

Аргументы
name Имя для этого объекта.
Возвращаемое значение
Форма оператора.

Решение системы уравнений

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

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

Решение (точное или приближённое) системы линейных уравнений.

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

Примеры:

# 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
Аргументы
rhs Матрица или вектор с совместимой формой и типом данных.
adjoint Python-выражение. Если True, решает систему с сопряжённым оператором.
adjoint_arg Python-выражение. Если True, решает систему с эрмитовым транспонированием.
name Название области имен для операций, добавленных этим методом.
Возвращаемое значение
Решение системы уравнений.
Исключения
NotImplementedError Если какое-то из условий не выполнено.

Решение системы с вектором

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

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

Решение одиночного уравнения с максимальной точностью.

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

Примеры:

# 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
Аргументы
rhs Вектор с совместимой формой и типом данных.
adjoint Python-выражение. Если True, решает систему с сопряжённым оператором.
name Название области имен для операций, добавленных этим методом.
Возвращаемое значение
Решение системы уравнений.
Исключения
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.

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

to_dense

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

to_dense(
    name='to_dense'
)

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

trace

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

trace(
    name='trace'
)

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

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

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

__matmul__

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

__matmul__(
    other
)

© 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/r2.3/api_docs/python/tf/linalg/LinearOperatorLowRankUpdate

Spec-Zone.ru

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