Spec-Zone.ru › TensorFlow 2.4

tf.linalg.LinearOperatorInversion

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

LinearOperator представляющий обратную операцию.

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

Просмотр псевдонимов

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

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

tf.compat.v1.linalg.LinearOperatorInversion

tf.linalg.LinearOperatorInversion(
    operator, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None,
    is_square=None, name=None
)

Данная операция представляет обратную операцию.

# Create a 2 x 2 linear operator.
operator = LinearOperatorFullMatrix([[1., 0.], [0., 2.]])
operator_inv = LinearOperatorInversion(operator)

operator_inv.to_dense()
==> [[1., 0.]
     [0., 0.5]]

operator_inv.shape
==> [2, 2]

operator_inv.log_abs_determinant()
==> - log(2)

x = ... Shape [2, 4] Tensor
operator_inv.matmul(x)
==> Shape [2, 4] Tensor, equal to operator.solve(x)

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

Производительность LinearOperatorInversion зависит от производительности базовых операций: solve и matmul меняются местами, а определитель инвертируется.

Свойства матрицы

Этот LinearOperator инициализируется булевыми флагами вида is_X, для X = non_singular, self_adjoint, positive_definite, square. Они имеют следующее значение:

  • Если is_X == True, вызывающие стороны должны ожидать, что оператор обладает свойством X. Это обещание, которое должно быть выполнено, но это не проверка во время выполнения. Например, конечная точность чисел с плавающей точкой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающие стороны должны ожидать, что оператор не обладает свойством X.
  • Если is_X == None (по умолчанию), вызывающие стороны не должны иметь ожиданий.
Аргументы
operator объект LinearOperator. Если operator.is_non_singular == False, генерируется исключение. Мы допускаем operator.is_non_singular == None, в этом случае у этой операции будет is_non_singular == None. Аналогично для is_self_adjoint и is_positive_definite.
is_non_singular Ожидать, что оператор невырожден.
is_self_adjoint Ожидать, что оператор равен своему эрмитовому сопряжению.
is_positive_definite Ожидать, что оператор положительно определён, то есть квадратичная форма x^H A x имеет положительную вещественную часть для всех ненулевых x. Обратите внимание, что для положительной определённости нам не нужно, чтобы оператор был самосопряжённым. См.: https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices
is_square Ожидать, что эта операция действует как квадратные [пакетные] матрицы.
name Имя для этой LinearOperator. По умолчанию operator.name + "_inv".
Исключения
ValueError Если operator.is_non_singular равно False.
Атрибуты
H Возвращает сопряжённую операцию.

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

batch_shape Количество пакетных измерений этой LinearOperator.

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

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

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

dtype Размерность Tensor операций, обрабатываемых этой LinearOperator.
graph_parents Список зависимостей графа этой LinearOperator. (устарело)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Не вызывайте graph_parents.
is_non_singular
is_positive_definite
is_self_adjoint
is_square Возвращает True/False в зависимости от того, является ли эта операция квадратной.
operator Операция до инверсии.
parameters Словарь параметров, используемых для создания этой LinearOperator.
range_dimension Размерность (в смысле векторных пространств) области значений этой операции.

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

shape Ранг этой 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.

Методы

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 не предполагается, что она положительно определённа и самосопряжена.

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

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

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.
Исключения
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]
Аргументы
x LinearOperator или Tensor с совместимой формой и такой же dtype как у self. См. описание класса для определения совместимости.
adjoint Питоновский bool. Если True, умножить слева на сопряжённый оператор: A^H x.
adjoint_arg Питоновский bool. Если True, вычислить A x^H где x^H — это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Имя для этого Op.
Возвращаемое значение
LinearOperator или Tensor с формой [..., M, R] и такой же dtype как у self.

matvec

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

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

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

# 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 Tensor с совместимой формой и тем же dtype что и self. x рассматривается как вектор [пакет], то есть для каждого набора ведущих измерений последнее измерение определяет вектор. Смотрите строку документа класса для определения совместимости.
adjoint Python bool. Если True, умножить слева на сопряжённый: A^H x.
name Имя для данного Op.
Возвращаемые значения
Tensor с формой [..., M] и тем же dtype что и self.

range_dimension_tensor

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

range_dimension_tensor(
    name='range_dimension_tensor'
)

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

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

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

Аргументы
name Имя для данного Op.
Возвращаемые значения
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).

Аргументы
name Имя для данного Op.
Возвращаемые значения
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
Аргументы
rhs Tensor с той же dtype что и у этого оператора и совместимой формой. rhs обрабатывается как [пакетная] матрица, что означает, что для каждого набора ведущих измерений последние два измерения определяют матрицу. Смотрите строку документа класса для определения совместимости.
adjoint Python bool. Если True, решить систему, включающую сопряжённый с данным оператором LinearOperator: A^H X = rhs.
adjoint_arg Python bool. Если True, решить A X = rhs^H где rhs^H — это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Область имён для операций, добавленных этим методом.
Возвращаемые значения
Tensor с формой [...,N, R] и тем же dtype что и rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square ложно.

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
Аргументы
rhs Tensor с той же dtype что и у этого оператора. rhs рассматривается как [пакетный] вектор, что означает, что для каждого набора ведущих измерений последнее измерение определяет вектор. Смотрите строку документа класса для определения совместимости по пакетным измерениям.
adjoint Python bool. Если True, решить систему, включающую сопряжённый с данным оператором LinearOperator: A^H X = rhs.
name Область имён для операций, добавленных этим методом.
Возвращаемые значения
Tensor с формой [...,N] и тем же dtype что и rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square ложно.

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.4/api_docs/python/tf/linalg/LinearOperatorInversion

Spec-Zone.ru

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