Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.bijectors.Affine

Вычисляем Y = g(X; shift, scale) = scale @ X + shift.

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

tf.contrib.distributions.bijectors.Affine(
    shift=None, scale_identity_multiplier=None, scale_diag=None, scale_tril=None,
    scale_perturb_factor=None, scale_perturb_diag=None, validate_args=False,
    name='affine'
)

Здесь scale = c * I + diag(D1) + tril(L) + V @ diag(D2) @ V.T.

В терминологии TF, термин scale логически эквивалентен:

scale = (
  scale_identity_multiplier * tf.linalg.tensor_diag(tf.ones(d)) +
  tf.linalg.tensor_diag(scale_diag) +
  scale_tril +
  scale_perturb_factor @ diag(scale_perturb_diag) @
    tf.transpose([scale_perturb_factor])
)

Термин scale применяется без необходимости материализации составляющих матриц, т.е., matmul является безматричным, когда это возможно.

Примеры

# Y = X
b = Affine()

# Y = X + shift
b = Affine(shift=[1., 2, 3])

# Y = 2 * I @ X.T + shift
b = Affine(shift=[1., 2, 3],
           scale_identity_multiplier=2.)

# Y = tf.linalg.tensor_diag(d1) @ X.T + shift
b = Affine(shift=[1., 2, 3],
           scale_diag=[-1., 2, 1])         # Implicitly 3x3.

# Y = (I + v * v.T) @ X.T + shift
b = Affine(shift=[1., 2, 3],
           scale_perturb_factor=[[1., 0],
                                 [0, 1],
                                 [1, 1]])

# Y = (diag(d1) + v * diag(d2) * v.T) @ X.T + shift
b = Affine(shift=[1., 2, 3],
           scale_diag=[1., 3, 3],          # Implicitly 3x3.
           scale_perturb_diag=[2., 1],     # Implicitly 2x2.
           scale_perturb_factor=[[1., 0],
                                 [0, 1],
                                 [1, 1]])

Аргументы
shift Вещественный Tensor. Если это установлено в None, сдвиг не применяется.
scale_identity_multiplier Вещественное число ранга 0 Tensor , представляющее масштабирование, выполненное с единичной матрицей. Когда scale_identity_multiplier = scale_diag = scale_tril = None тогда scale += IdentityMatrix. В противном случае к scale не добавляется масштабированная единичная матрица.
scale_diag Вещественный Tensor , представляющий диагональную матрицу. scale_diag имеет форму [N1, N2, ... k], что представляет k x k диагональную матрицу. Когда None к scale не добавляется диагональный член.
scale_tril Вещественный Tensor , представляющий диагональную матрицу. scale_diag имеет форму [N1, N2, ... k, k], что представляет k x k нижнюю треугольную матрицу. Когда None к scale не добавляется член scale_tril. Элементы верхней треугольной части выше диагонали игнорируются.
scale_perturb_factor Вещественный Tensor , представляющий факторную матрицу с двумя последними измерениями формы (k, r). Когда None, к scale не добавляется обновление ранга-r.
scale_perturb_diag Вещественный Tensor , представляющий диагональную матрицу. scale_perturb_diag имеет форму [N1, N2, ... r], что представляет r x r диагональную матрицу. Когда None обновления низкого ранга примут вид scale_perturb_factor * scale_perturb_factor.T.
validate_args Python bool , указывающий, следует ли проверять правильность аргументов.
name Python str имя, заданное операциям, управляемым этим объектом.
Исключения
ValueError если perturb_diag указано, но не perturb_factor.
TypeError если shift имеет разные dtype от аргументов scale .
Атрибуты
dtype Тип данных Tensor , преобразуемых этим распределением.
forward_min_event_ndims Возвращает минимальное количество измерений, на которых действует bijector.forward.
graph_parents Возвращает graph_parents этого Bijector в виде списка Python.
inverse_min_event_ndims Возвращает минимальное количество измерений, на которых действует bijector.inverse.
is_constant_jacobian Возвращает true, если матрица Якоби не является функцией от x.
Примечание: Матрица Якоби либо постоянна для прямого и обратного преобразования, либо нет.
name Возвращает строковое имя этого Bijector.
scale scale LinearOperator в Y = scale @ X + shift.
shift shift Tensor в Y = scale @ X + shift.
validate_args Возвращает True, если аргументы Tensor будут проверены.

Методы

forward

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

forward(
    x, name='forward'
)

Возвращает вычисление прямого Bijector , т.е., X = g(Y).

Аргументы
x Tensor. Вход для вычисления "прямого" преобразования.
name Имя для присвоения этому оператору.
Возвращаемое значение
Tensor.
Исключения
TypeError если self.dtype указано, и x.dtype не self.dtype.
NotImplementedError если _forward не реализовано.

forward_event_shape

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

forward_event_shape(
    input_shape
)

Форма одного образца из одной группы как TensorShape.

То же самое, что и forward_event_shape_tensor. Может быть определена только частично.

Аргументы
input_shape TensorShape , указывающее форму события, переданную в функцию forward .
Возвращаемое значение
forward_event_shape_tensor TensorShape , указывающее форму события после применения forward . Возможно неизвестно.

forward_event_shape_tensor

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

forward_event_shape_tensor(
    input_shape, name='forward_event_shape_tensor'
)

Форма одного образца из одной группы как int32 1D Tensor.

Аргументы
input_shape Tensor, int32 вектор, указывающий форму события, переданную в функцию forward .
name имя, которое нужно присвоить оператору
Возвращаемое значение
forward_event_shape_tensor Tensor, int32 вектор, указывающий форму события после применения forward .

forward_log_det_jacobian

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

forward_log_det_jacobian(
    x, event_ndims, name='forward_log_det_jacobian'
)

Возвращает как forward_log_det_jacobian.

Аргументы
x Tensor. Вход для вычисления определителя Якоби «прямого» преобразования.
event_ndims Число измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.forward_min_event_ndims. Результат суммируется по последним измерениям, чтобы получить скалярный определитель Якоби для каждого события, т.е. он имеет форму x.shape.ndims - event_ndims измерений.
name Имя, которое нужно дать этому оператору.
Возвращаемое значение
Tensor, если этот биджектор инъективен. Если не инъективен, это не реализовано.
Исключения
TypeError если self.dtype указано, и y.dtype не self.dtype.
NotImplementedError если ни _forward_log_det_jacobian , ни {_inverse, _inverse_log_det_jacobian} не реализованы, или это биджектор, не являющийся инъективным.

inverse

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

inverse(
    y, name='inverse'
)

Возвращает обратное Bijector вычисление, т.е., X = g^{-1}(Y).

Аргументы
y Tensor. Вход для вычисления "обратного" преобразования.
name Имя для присвоения этому оператору.
Возвращаемое значение
Tensor, если этот биджектор инъективен. Если не инъективен, возвращает k-кортеж, содержащий уникальные k точки (x1, ..., xk) такие, что g(xi) = y.
Исключения
TypeError если self.dtype указано, и y.dtype не self.dtype.
NotImplementedError если _inverse не реализовано.

inverse_event_shape

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

inverse_event_shape(
    output_shape
)

Форма одного образца из одной группы в виде TensorShape.

То же, что и inverse_event_shape_tensor. Может быть определена лишь частично.

Аргументы
output_shape TensorShape , указывающая на форму части события, переданную в функцию inverse.
Возвращаемые значения
inverse_event_shape_tensor TensorShape , указывающая на форму части события после применения inverse. Возможно неизвестна.

inverse_event_shape_tensor

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

inverse_event_shape_tensor(
    output_shape, name='inverse_event_shape_tensor'
)

Форма одного образца из одной группы в виде int32 одномерного Tensor.

Аргументы
output_shape Tensor, int32 вектор, указывающий на форму части события, переданную в функцию inverse .
name имя для операции
Возвращаемые значения
inverse_event_shape_tensor Tensor, int32 вектор, указывающий на форму части события после применения inverse.

inverse_log_det_jacobian

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

inverse_log_det_jacobian(
    y, event_ndims, name='inverse_log_det_jacobian'
)

Возвращает (лог o det o Якобиан o обратный)(y).

Математически возвращает: log(det(dX/dY))(Y). (Напомним, что: X=g^{-1}(Y).)

Обратите внимание, что forward_log_det_jacobian является отрицанием этой функции, вычисленной в g^{-1}(y).

Аргументы
y Tensor. Вход для вычисления обратного якобиана определителя.
event_ndims Количество измерений в преобразуемых вероятностных событиях. Должно быть больше или равно self.inverse_min_event_ndims. Результат суммируется по последним измерениям, чтобы получить скалярный определитель якобиана для каждого события, т. е. он имеет размерность y.shape.ndims - event_ndims измерений.
name Имя, которое нужно дать этой операции.
Возвращаемые значения
Tensor, если этот биектор инъективен. Если нет, возвращает кортеж локальных лог-определителей якобианов, log(det(Dg_i^{-1}(y))), где g_i — ограничение g на ith разбиение Di.
Исключения
TypeError если self.dtype указано, и y.dtype не self.dtype.
NotImplementedError если _inverse_log_det_jacobian не реализовано.

© 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/contrib/distributions/bijectors/Affine

Spec-Zone.ru

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