Термин 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
scaleLinearOperator в Y = scale @ X + shift.
shift
shiftTensor в Y = scale @ X + shift.
validate_args
Возвращает True, если аргументы Tensor будут проверены.
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} не реализованы, или это биджектор, не являющийся инъективным.
Обратите внимание, что 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.