Spec-Zone.ru › TensorFlow

tf.linalg.LinearOperatorCirculant3D

LinearOperator, действующий как вложенная блочно-циркулянтная матрица.

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

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

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

Подробнее см. в руководстве по миграции.

tf.compat.v1.linalg.LinearOperatorCirculant3D

tf.linalg.LinearOperatorCirculant3D(
    spectrum: tf.Tensor,
    input_output_dtype=tf.dtypes.complex64,
    is_non_singular: bool = None,
    is_self_adjoint: bool = None,
    is_positive_definite: bool = None,
    is_square: bool = True,
    name='LinearOperatorCirculant3D'
)

Этот оператор действует как блочно-циркулянтная матрица A с формой [B1,...,Bb, N, N] для некоторого b >= 0. Первые b индексы задают индекс элемента пакета. Для каждого индекса пакета (i1,...,ib), A[i1,...,ib, : :] является матрицей N x N. Эта матрица A не материализуется, но эта форма имеет значение для широковещательной передачи.

Описание через блочно-циркулянтные матрицы

Если A является вложенной блочно-циркулянтной матрицей с размерами блоков N0, N1, N2 (N0 * N1 * N2 = N): A имеет блочную структуру, состоящую из N0 x N0 блоков, каждый из которых является N1 x N1 блочно-циркулянтной матрицей.

Например, при W, X, Y, Z, где каждый блок является циркулянтной матрицей,

A = |W Z Y X|
    |X W Z Y|
    |Y X W Z|
    |Z Y X W|

Обратите внимание, что A сама по себе в общем случае не будет циркулянтной.

Описание через частотный спектр

Существует эквивалентное описание через спектр [пакета] H и преобразования Фурье. Здесь рассмотрим A.shape = [N, N] и не будем учитывать размерности пакета.

Если H.shape = [N0, N1, N2], (N0 * N1 * N2 = N): в общих чертах, умножение матриц эквивалентно действию фурье-множителя: A u = IDFT3[ H DFT3[u] ]. Точнее, для заданной матрицы [N, R] u пусть DFT3[u] — это [N0, N1, N2, R] Tensor, определяемый изменением формы u на [N0, N1, N2, R] и применением трехмерного ДПФ по первым трем измерениям. Пусть IDFT3 будет обратным к DFT3. Умножение матриц можно выразить по столбцам:

(A u)_r = IDFT3[ H * (DFT3[u])_r ]

Свойства оператора, выводимые из спектра.

  • Этот оператор является положительно определенным тогда и только тогда, когда Real{H} > 0.

Общим свойством преобразований Фурье является соответствие между эрмитовыми функциями и вещественными преобразованиями.

Предположим, что H.shape = [B1,...,Bb, N0, N1, N2]; будем говорить, что H имеет эрмитов спектр, если при %, обозначающем деление по модулю,

H[..., n0 % N0, n1 % N1, n2 % N2]
  = ComplexConjugate[ H[..., (-n0) % N0, (-n1) % N1, (-n2) % N2] ].
  • Этому оператору соответствует вещественная матрица тогда и только тогда, когда H является эрмитовым.
  • Этот оператор является самосопряженным тогда и только тогда, когда H является вещественным.

См., например, «Цифровую обработку сигналов» О́ппенгейма и Шафера.

Примеры

Примеры см. в LinearOperatorCirculant и LinearOperatorCirculant2D.

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

Предположим, что operator — это LinearOperatorCirculant с формой [N, N], а x.shape = [N, R]. Тогда

  • operator.matmul(x) — это O(R*N*Log[N])
  • operator.solve(x) — это O(R*N*Log[N])
  • operator.determinant() включает reduce_prod размера N.

Если же operator и x имеют форму [B1,...,Bb, N, N] и [B1,...,Bb, N, R], сложность каждой операции возрастает на B1*...*Bb.

Подсказки о свойствах матрицы

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

  • Если is_X == True, вызывающая сторона может рассчитывать, что оператор обладает свойством X. Это обещание, которое должно выполняться, но оно не является проверкой во время выполнения. Например, ограниченная точность чисел с плавающей запятой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающая сторона может рассчитывать, что оператор не обладает свойством X.
  • Если is_X == None (значение по умолчанию), вызывающая сторона не должна рассчитывать ни на то, ни на другое.
Аргументы
spectrum Форма [B1,...,Bb, N0, N1, N2] Tensor. Допустимые типы данных: float16, float32, float64, complex64, complex128. Тип может отличаться от input_output_dtype
input_output_dtype dtype для ввода/вывода.
is_non_singular Предположение, что этот оператор невырожденный.
is_self_adjoint Предположение, что этот оператор равен своему эрмитово-сопряженному. Если spectrum является вещественным, это условие всегда выполняется.
is_positive_definite Предположение, что этот оператор положительно определен, то есть вещественная часть всех собственных значений положительна. Для положительной определенности не требуется, чтобы оператор был самосопряженным. См.: https://en.wikipedia.org/wiki/Positive-definite_matrix #Extension_for_non_symmetric_matrices
is_square Предположение, что этот оператор действует как квадратные матрицы [пакета].
name Имя, добавляемое в начало всех операций, создаваемых этим классом.
Атрибуты
H Возвращает сопряженный оператор для текущего LinearOperator.

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

batch_shape TensorShape размерностей пакета этого LinearOperator.

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

block_depth Глубина рекурсивно определенных циркулянтных блоков, задающих этот Operator.

Пусть A — плотное представление этого Operator.

block_depth = 1 означает, что A является симметричной циркулянтной матрицей. Например,

A = |w z y x|
    |x w z y|
    |y x w z|
    |z y x w|

block_depth = 2 означает, что A является блочно-симметричной циркулянтной матрицей с симметричными циркулянтными блоками. Например, при W, X, Y, Z, где все матрицы симметричны и циркулянтны,

A = |W Z Y X|
    |X W Z Y|
    |Y X W Z|
    |Z Y X W|

block_depth = 3 означает, что A является блочно-симметричной циркулянтной матрицей с блочно-симметричными циркулянтными блоками.

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

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

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

spectrum
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: str = 'adjoint'
) -> 'LinearOperator'

Возвращает сопряженный оператор для текущего LinearOperator.

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

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

assert_hermitian_spectrum

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

assert_hermitian_spectrum(
    name='assert_hermitian_spectrum'
)

Возвращает Op, проверяющий, что спектр оператора является эрмитовым.

Этому оператору соответствует матрица с вещественными значениями тогда и только тогда, когда его спектр эрмитов.

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

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

block_shape_tensor

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

block_shape_tensor()

Форма блочных размерностей self.spectrum.

cholesky

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

cholesky(
    name: str = 'cholesky'
) -> 'LinearOperator'

Возвращает разложение Холецкого в виде 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.

convolution_kernel

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

convolution_kernel(
    name='convolution_kernel'
)

Ядро свертки, соответствующее self.spectrum.

D-мерное ДПФ этого ядра является спектром этого оператора в частотной области.

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

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, что и у текущего объекта.

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: str = 'inverse'
) -> 'LinearOperator'

Возвращает обратный оператор для этого 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 Объект 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 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 имеет значение 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
Аргументы
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 имеет значение 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.

__getitem__

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

__getitem__(
    slices
)

__matmul__

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

__matmul__(
    other
)

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/linalg/LinearOperatorCirculant3D

Spec-Zone.ru

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