shift является числовым Tensor и scale является LinearOperator.
Если X является скалярным, то прямое преобразование: scale * X + shift где * обозначает скалярное произведение.
Примечание: мы не всегда просто транспонируем X (но пишем это так для краткости). На самом деле вход X подвергается следующему преобразованию перед умножением слева на scale:
Если нет размерностей выборки, мы вызываем X = tf.expand_dims(X, 0), т.е., new_sample_shape = [1]. В противном случае ничего не делаем.
Форма выборки сглаживается до одной размерности, т.е., new_sample_shape = [n] где n = tf.reduce_prod(old_sample_shape).
Размерность выборки циклически сдвигается влево на 1, т.е., new_shape = [B1,...,Bb, k, n] где n как выше, k — форма события, а B1,...,Bb — формы пакета для каждой из b размерностей пакета.
(Для более подробной информации см. shape.make_batch_of_event_sample_matrices.)
Результат вышеупомянутого преобразования состоит в том, что X можно рассматривать как пакет матриц, где каждый столбец — выборка из распределения. После умножения слева на scale, мы применяем обратное преобразование. Вход Y также подвергается тому же преобразованию до/после умножения слева на inv(scale).
Пример использования:
linalg = tf.linalg
x = [1., 2, 3]
shift = [-1., 0., 1]
diag = [1., 2, 3]
scale = linalg.LinearOperatorDiag(diag)
affine = AffineLinearOperator(shift, scale)
# In this case, `forward` is equivalent to:
# y = scale @ x + shift
y = affine.forward(x) # [0., 4, 10]
shift = [2., 3, 1]
tril = [[1., 0, 0],
[2, 1, 0],
[3, 2, 1]]
scale = linalg.LinearOperatorLowerTriangular(tril)
affine = AffineLinearOperator(shift, scale)
# In this case, `forward` is equivalent to:
# np.squeeze(np.matmul(tril, np.expand_dims(x, -1)), -1) + shift
y = affine.forward(x) # [3., 7, 11]
Аргументы
shift
Число с плавающей точкой Tensor.
scale
Подкласс LinearOperator. Представляет (пакетную) положительно определённую матрицу M в R^{k x k}.
validate_args
Python bool, указывающее, должны ли проверяться аргументы на корректность.
name
Python str имя, присвоенное операциям, управляемым этим объектом.
Исключения
TypeError
если scale не является LinearOperator.
TypeError
если shift.dtype не соответствует scale.dtype.
ValueError
если не scale.is_non_singular.
Атрибуты
dtype
тип данных Tensor преобразуемых этим распределением.
forward_min_event_ndims
Возвращает минимальное количество измерений, на которых работает bijector.forward.
graph_parents
Возвращает список graph_parents этого Bijector.
inverse_min_event_ndims
Возвращает минимальное количество измерений, на которых работает bijector.inverse.
is_constant_jacobian
Возвращает истину, если матрица Якоби не является функцией от x.
Примечание: Матрица Якоби либо постоянна для прямого и обратного преобразования, либо для обоих.
name
Возвращает строку имени этого Bijector.
scale
scaleLinearOperator в Y = scale @ X + shift.
shift
shiftTensor в Y = scale @ X + shift.
validate_args
Возвращает True, если аргументы тензоров будут проверены.
Tensor. Вход для вычисления определителя обратной матрицы Якоби "прямого" преобразования.
event_ndims
Количество измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.forward_min_event_ndims. Результат суммируется по последним измерениям, чтобы получить скалярный определитель Якоби для каждого события, т.е. он имеет размерность x.shape.ndims - event_ndims .
name
Имя для этого op.
Возвращает
Tensor, если этот bijector инъективный. Если не инъективный, это не реализовано.
Исключения
TypeError
если указано self.dtype и y.dtype не self.dtype .
NotImplementedError
если ни _forward_log_det_jacobian ни {_inverse, _inverse_log_det_jacobian} не реализованы, или это не инъективный bijector.
Обратите внимание, что 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.