Spec-Zone.ru › TensorFlow 1.15

tf.linalg.LinearOperatorComposition

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

Компонует один или несколько LinearOperators.

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

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

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

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

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

tf.linalg.LinearOperatorComposition(
    operators, is_non_singular=None, is_self_adjoint=None,
    is_positive_definite=None, is_square=None, name=None
)

Этот оператор компонует один или несколько линейных операторов [op1,...,opJ], создавая новый LinearOperator с действием, определённым следующим образом:

op_composed(x) := op1(op2(...(opJ(x)...))

Если opj действует как [batch] матрица Aj, то op_composed действует как [batch] матрица, полученная путём умножения A1 A2...AJ.

Если opj имеет размер batch_shape_j + [M_j, N_j], то должно выполняться условие N_j = M_{j+1}, в этом случае композиционный оператор имеет размер, равный broadcast_batch_shape + [M_1, N_J], где broadcast_batch_shape является взаимным расширением batch_shape_j, j = 1,...,J, предполагая, что промежуточные размеры пакетов совместимы. Даже если размер композиционного оператора определён корректно, методы композиционного оператора могут завершиться ошибкой из-за отсутствия возможности расширения в методах определяющих операторов.

# Create a 2 x 2 linear operator composed of two 2 x 2 operators.
operator_1 = LinearOperatorFullMatrix([[1., 2.], [3., 4.]])
operator_2 = LinearOperatorFullMatrix([[1., 0.], [0., 1.]])
operator = LinearOperatorComposition([operator_1, operator_2])

operator.to_dense()
==> [[1., 2.]
     [3., 4.]]

operator.shape
==> [2, 2]

operator.log_abs_determinant()
==> scalar Tensor

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

# Create a [2, 3] batch of 4 x 5 linear operators.
matrix_45 = tf.random.normal(shape=[2, 3, 4, 5])
operator_45 = LinearOperatorFullMatrix(matrix)

# Create a [2, 3] batch of 5 x 6 linear operators.
matrix_56 = tf.random.normal(shape=[2, 3, 5, 6])
operator_56 = LinearOperatorFullMatrix(matrix_56)

# Compose to create a [2, 3] batch of 4 x 6 operators.
operator_46 = LinearOperatorComposition([operator_45, operator_56])

# Create a shape [2, 3, 6, 2] vector.
x = tf.random.normal(shape=[2, 3, 6, 2])
operator.matmul(x)
==> Shape [2, 3, 4, 2] Tensor

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

Производительность LinearOperatorComposition при любом действии равна сумме производительности отдельных операторов.

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

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

  • Если is_X == True, вызывающие стороны должны ожидать, что оператор обладает свойством X. Это обещание должно выполняться, но это не утверждение во время выполнения. Например, конечная точность с плавающей запятой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающие стороны должны ожидать, что оператор не обладает свойством X.
  • Если is_X == None (по умолчанию), у вызывающих сторон не должно быть ожиданий ни в ту, ни в другую сторону.
Args
operators Итерируемый список объектов LinearOperator, каждый с одинаковым dtype и совместимым размером.
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 Ожидание, что этот оператор действует как квадратные [batch] матрицы.
name Имя этого LinearOperator. По умолчанию - имена отдельных операторов, соединённые через _o_.
Raises
TypeError Если все операторы не имеют одинаковый dtype.
ValueError Если operators пусто.
Атрибуты
H Возвращает сопряжённую матрицу текущего LinearOperator.

Учитывая 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 Размерность DType обрабатываемых этим LinearOperator.
graph_parents Список зависимостей графа этого LinearOperator.
is_non_singular
is_positive_definite
is_self_adjoint
is_square Возвращает True/False в зависимости от того, является ли этот оператор квадратным.
operators
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.

Методы

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 Область именования ops, используемая этим методом.
Возвращаемое значение
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 Python bool. Если True, выполняется левое умножение на сопряженное: A^H x.
adjoint_arg Python 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 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]
Аргументы
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 обрабатывается как [batch] вектор, то есть для каждого набора ведущих измерений последнее измерение определяет вектор. Определение совместимости по пакетным измерениям см. в строке документации класса.
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.

© 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/LinearOperatorComposition

Spec-Zone.ru

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