This bijector is semantically similar to tf.transpose except that it
transposes only the rightmost "event" dimensions. That is, unlike
tf.transpose the perm argument is itself a permutation of
tf.range(rightmost_transposed_ndims) rather than tf.range(tf.rank(x)),
i.e., users specify the (rightmost) dimensions to permute, not all dimensions.
Positive int32 vector-shaped Tensor representing permutation of
rightmost dims (for forward transformation). Note that the 0th index
represents the first of the rightmost dims and the largest value must be
rightmost_transposed_ndims - 1 and corresponds to tf.rank(x) - 1.
Only one of perm and rightmost_transposed_ndims can (and must) be
specified. The number of elements in a permutation must have a value
that can be determined statically.
Default value:
tf.range(start=rightmost_transposed_ndims, limit=-1, delta=-1).
rightmost_transposed_ndims
Positive int32 scalar-shaped Tensor
representing the number of rightmost dimensions to permute.
Only one of perm and rightmost_transposed_ndims can (and must) be
specified. If rightmost_transposed_ndims is specified, the rightmost
dims are reversed. This argument must have a value that can be
determined statically.
Default value: tf.size(perm).
validate_args
Python bool indicating whether arguments should be
checked for correctness.
name
Python str name given to ops managed by this object.
Raises
ValueError
if both or neither perm and rightmost_transposed_ndims are
specified.
NotImplementedError
if rightmost_transposed_ndims is not known prior to
graph execution.
Attributes
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.
perm
rightmost_transposed_ndims
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.