Spec-Zone.ru › TensorFlow

tf.linalg.LinearOperatorIdentity

LinearOperator, действующий как квадратная единичная матрица [пакета].

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

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

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

Дополнительные сведения см. в руководстве по миграции.

tf.compat.v1.linalg.LinearOperatorIdentity

tf.linalg.LinearOperatorIdentity(
    num_rows,
    batch_shape=None,
    dtype=None,
    is_non_singular=True,
    is_self_adjoint=True,
    is_positive_definite=True,
    is_square=True,
    assert_proper_shapes=False,
    name='LinearOperatorIdentity'
)

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

LinearOperatorIdentity инициализируется аргументами num_rows и, при необходимости, batch_shape и dtype. Если batch_shape равно None, этот оператор эффективно передает все аргументы без изменений. Если задано batch_shape, может выполняться широковещательное распространение, требующее создания копий.

# Create a 2 x 2 identity matrix.
operator = LinearOperatorIdentity(num_rows=2, dtype=tf.float32)

operator.to_dense()
==> [[1., 0.]
     [0., 1.]]

operator.shape
==> [2, 2]

operator.log_abs_determinant()
==> 0.

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

y = tf.random.normal(shape=[3, 2, 4])
# Note that y.shape is compatible with operator.shape because operator.shape
# is broadcast to [3, 2, 2].
# This broadcast does NOT require copying data, since we can infer that y
# will be passed through without changing shape.  We are always able to infer
# this if the operator has no batch_shape.
x = operator.solve(y)
==> Shape [3, 2, 4] Tensor, same as y.

# Create a 2-batch of 2x2 identity matrices
operator = LinearOperatorIdentity(num_rows=2, batch_shape=[2])
operator.to_dense()
==> [[[1., 0.]
      [0., 1.]],
     [[1., 0.]
      [0., 1.]]]

# Here, even though the operator has a batch shape, the input is the same as
# the output, so x can be passed through without a copy.  The operator is able
# to detect that no broadcast is necessary because both x and the operator
# have statically defined shape.
x = ... Shape [2, 2, 3]
operator.matmul(x)
==> Shape [2, 2, 3] Tensor, same as x

# Here the operator and x have different batch_shape, and are broadcast.
# This requires a copy, since the output is different size than the input.
x = ... Shape [1, 2, 3]
operator.matmul(x)
==> Shape [2, 2, 3] Tensor, equal to [x, x]

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

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

operator.shape = [B1,...,Bb] + [N, N],  with b >= 0
x.shape =   [C1,...,Cc] + [N, R],
and [C1,...,Cc] broadcasts with [B1,...,Bb] to [D1,...,Dd]

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

Если аргумент инициализации batch_shape равен None:

  • operator.matmul(x) — O(1)
  • operator.solve(x) — O(1)
  • operator.determinant() — O(1)

Если аргумент инициализации batch_shape задан и статические проверки не позволяют исключить необходимость широковещательного распространения:

  • operator.matmul(x) — O(D1*...*Dd*N*R)
  • operator.solve(x) — O(D1*...*Dd*N*R)
  • operator.determinant() — O(B1*...*Bb)

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

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

  • Если is_X == True, вызывающая сторона может рассчитывать на то, что оператор обладает свойством X. Это обещание должно выполняться, но оно не проверяется во время выполнения. Например, конечная точность чисел с плавающей запятой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающая сторона может рассчитывать на то, что оператор не обладает X.
  • Если is_X == None (значение по умолчанию), вызывающая сторона не должна иметь ожиданий ни в ту, ни в другую сторону.
Аргументы
num_rows Скалярное неотрицательное целое число Tensor. Число строк соответствующей единичной матрицы.
batch_shape Необязательный целочисленный 1-D Tensor. Форма ведущих измерений. Если None, у этого оператора нет ведущих измерений.
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 Предположение о том, что этот оператор действует как квадратные матрицы [пакета].
assert_proper_shapes Логическое значение Python bool. Если False, выполнять только статические проверки правильности форм аргументов инициализации и методов. Если True и статические проверки не дают однозначного результата, добавлять в граф инструкции assert.
name Имя для этого LinearOperator
Вызывает исключения
ValueError Если статически установлено, что num_rows не является скаляром или является отрицательным.
ValueError Если статически установлено, что batch_shape не является одномерным или является отрицательным.
ValueError Если любое из следующих значений не является True: {is_self_adjoint, is_non_singular, is_positive_definite}.
TypeError Если num_rows или batch_shape имеет ссылочный тип (например, Variable).
Атрибуты
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]

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.

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

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

Методы

add_to_tensor

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

add_to_tensor(
    mat, name='add_to_tensor'
)

Прибавляет матрицу, представленную этим оператором, к mat. Эквивалентно I + mat.

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

adjoint

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

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

Возвращает сопряжённый оператор для текущего 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: 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.

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: 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/LinearOperatorIdentity

Spec-Zone.ru

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