The scale term is presumed lower-triangular and non-singular (ie, no zeros
on the diagonal), which permits efficient determinant calculation (linear in
matrix dimension, instead of cubic).
Examples
# Y = scale_tril @ X
b = ScaleMatvecTriL(scale_tril=[[1., 0.], [1., 1.])
Args
scale_tril
Floating-point Tensor representing the lower triangular
matrix. scale_tril has shape [N1, N2, ... k, k], which represents a
k x k lower triangular matrix.
When None no scale_tril term is added to scale.
The upper triangular elements above the diagonal are ignored.
adjoint
Python bool indicating whether to use the scale matrix as
specified or its adjoint. Note that lower-triangularity is taken into
account first: the region above the diagonal of scale_tril is treated
as zero (irrespective of the adjoint setting). A lower-triangular
input with adjoint=True will behave like an upper triangular
transform.
Default value: False.
validate_args
Python bool indicating whether arguments should be
checked for correctness.
name
Python str name given to ops managed by this object.
dtype
tf.DType to prefer when converting args to Tensors. Else, we
fall back to a common dtype inferred from the args, finally falling back
to float32.
Raises
ValueError
if scale_tril is not specified.
Attributes
adjoint
bool indicating whether this class uses self.scale or its adjoint.
dtype
forward_min_event_ndims
Returns the minimal number of dimensions bijector.forward operates on.
Multipart bijectors return structured ndims, which indicates the
expected structure of their inputs. Some multipart bijectors, notably
Composites, may return structures of None.
graph_parents
Returns this Bijector's graph_parents as a Python list.
has_static_min_event_ndims
Returns True if the bijector has statically-known min_event_ndims.
inverse_min_event_ndims
Returns the minimal number of dimensions bijector.inverse operates on.
Multipart bijectors return structured event_ndims, which indicates the
expected structure of their outputs. Some multipart bijectors, notably
Composites, may return structures of None.
is_constant_jacobian
Returns true iff the Jacobian matrix is not a function of x.
name
Returns the string name of this Bijector.
parameters
Dictionary of parameters used to instantiate this Bijector.
scale
The scaleLinearOperator in Y = scale @ X.
trainable_variables
validate_args
Returns True if Tensor arguments will be validated.
variables
Methods
forward
forward(
x, name='forward', **kwargs
)
Returns the forward Bijector evaluation, i.e., X = g(Y).
Args
x
Tensor (structure). The input to the 'forward' evaluation.
name
The name to give this op.
**kwargs
Named arguments forwarded to subclass implementation.
Returns
Tensor (structure).
Raises
TypeError
if self.dtype is specified and x.dtype is not
self.dtype.
Tensor (structure). The input to the 'forward' Jacobian determinant
evaluation.
event_ndims
Number of dimensions in the probabilistic events being
transformed. Must be greater than or equal to
self.forward_min_event_ndims. The result is summed over the final
dimensions to produce a scalar Jacobian determinant for each event, i.e.
it has shape rank(x) - event_ndims dimensions.
Multipart bijectors require structured event_ndims, such that
rank(y[i]) - rank(event_ndims[i]) is the same for all elements i of
the structured input. Furthermore, the first event_ndims[i] of each
x[i].shape must be the same for all i (broadcasting is not allowed).
name
The name to give this op.
**kwargs
Named arguments forwarded to subclass implementation.
Returns
Tensor (structure), if this bijector is injective.
If not injective this is not implemented.
Raises
TypeError
if y's dtype is incompatible with the expected output dtype.
NotImplementedError
if neither _forward_log_det_jacobian
nor {_inverse, _inverse_log_det_jacobian} are implemented, or
this is a non-injective bijector.
inverse
inverse(
y, name='inverse', **kwargs
)
Returns the inverse Bijector evaluation, i.e., X = g^{-1}(Y).
Args
y
Tensor (structure). The input to the 'inverse' evaluation.
name
The name to give this op.
**kwargs
Named arguments forwarded to subclass implementation.
Returns
Tensor (structure), if this bijector is injective.
If not injective, returns the k-tuple containing the unique
k points (x1, ..., xk) such that g(xi) = y.
Raises
TypeError
if y's structured dtype is incompatible with the expected
output dtype.
Note that forward_log_det_jacobian is the negative of this function,
evaluated at g^{-1}(y).
Args
y
Tensor (structure). The input to the 'inverse' Jacobian determinant
evaluation.
event_ndims
Number of dimensions in the probabilistic events being
transformed. Must be greater than or equal to
self.inverse_min_event_ndims. The result is summed over the final
dimensions to produce a scalar Jacobian determinant for each event, i.e.
it has shape rank(y) - event_ndims dimensions.
Multipart bijectors require structured event_ndims, such that
rank(y[i]) - rank(event_ndims[i]) is the same for all elements i of
the structured input. Furthermore, the first event_ndims[i] of each
x[i].shape must be the same for all i (broadcasting is not allowed).
name
The name to give this op.
**kwargs
Named arguments forwarded to subclass implementation.
Returns
ildj
Tensor, if this bijector is injective.
If not injective, returns the tuple of local log det
Jacobians, log(det(Dg_i^{-1}(y))), where g_i is the restriction
of g to the ith partition Di.
Raises
TypeError
if x's dtype is incompatible with the expected inverse-dtype.
NotImplementedError
if _inverse_log_det_jacobian is not implemented.
__call__
__call__(
value, name=None, **kwargs
)
Applies or composes the Bijector, depending on input type.
This is a convenience function which applies the Bijector instance in
three different ways, depending on the input:
If the input is a tfd.Distribution instance, return
tfd.TransformedDistribution(distribution=input, bijector=self).
If the input is a tfb.Bijector instance, return
tfb.Chain([self, input]).
Otherwise, return self.forward(input)
Args
value
A tfd.Distribution, tfb.Bijector, or a (structure of) Tensor.
name
Python str name given to ops created by this function.
**kwargs
Additional keyword arguments passed into the created
tfd.TransformedDistribution, tfb.Bijector, or self.forward.
Returns
composition
A tfd.TransformedDistribution if the input was a
tfd.Distribution, a tfb.Chain if the input was a tfb.Bijector, or
a (structure of) Tensor computed by self.forward.