Attend the Women in ML Symposium on December 7

tfp.bijectors.CholeskyOuterProduct

Compute `g(X) = X @ X.T`; X is lower-triangular, positive-diagonal matrix.

The surjectivity of g as a map from the set of n x n positive-diagonal lower-triangular matrices to the set of SPD matrices follows immediately from executing the Cholesky factorization algorithm on an SPD matrix A to produce a positive-diagonal lower-triangular matrix L such that `A = L @ L.T`.

To prove the injectivity of g, suppose that L_1 and L_2 are lower-triangular with positive diagonals and satisfy `A = L_1 @ L_1.T = L_2 @ L_2.T`. Then `inv(L_1) @ A @ inv(L_1).T = [inv(L_1) @ L_2] @ [inv(L_1) @ L_2].T = I`. Setting `L_3 := inv(L_1) @ L_2`, that L_3 is a positive-diagonal lower-triangular matrix follows from `inv(L_1)` being positive-diagonal lower-triangular (which follows from the diagonal of a triangular matrix being its spectrum), and that the product of two positive-diagonal lower-triangular matrices is another positive-diagonal lower-triangular matrix.

A simple inductive argument (proceeding one column of L_3 at a time) shows that, if `I = L_3 @ L_3.T`, with L_3 being lower-triangular with positive- diagonal, then `L_3 = I`. Thus, `L_1 = L_2`, proving injectivity of g.

Examples

``````bijector.CholeskyOuterProduct().forward(x=[[1., 0], [2, 1]])
# Result: [[1., 2], [2, 5]], i.e., x @ x.T

bijector.CholeskyOuterProduct().inverse(y=[[1., 2], [2, 5]])
# Result: [[1., 0], [2, 1]], i.e., cholesky(y).
``````

`cholesky_fn` Callable which takes a single (batch) matrix argument and returns a Cholesky-like lower triangular factor. Default value: `tf.linalg.cholesky`,
`validate_args` Python `bool` indicating whether arguments should be checked for correctness.
`name` Python `str` name given to ops managed by this object.

`cholesky_fn`

`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`. (deprecated)

`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`.
`name_scope` Returns a `tf.name_scope` instance for this class.
`non_trainable_variables` Sequence of non-trainable variables owned by this module and its submodules.
`parameters` Dictionary of parameters used to instantiate this `Bijector`.
`submodules` Sequence of all sub-modules.

Submodules are modules which are properties of this module, or found as properties of modules which are properties of this module (and so on).

````a = tf.Module()`
`b = tf.Module()`
`c = tf.Module()`
`a.b = b`
`b.c = c`
`list(a.submodules) == [b, c]`
`True`
`list(b.submodules) == [c]`
`True`
`list(c.submodules) == []`
`True`
```

`trainable_variables` Sequence of trainable variables owned by this module and its submodules.

`validate_args` Returns True if Tensor arguments will be validated.
`variables` Sequence of variables owned by this module and its submodules.

Methods

`copy`

View source

Creates a copy of the bijector.

Args
`**override_parameters_kwargs` String/value dictionary of initialization arguments to override with new values.

Returns
`bijector` A new instance of `type(self)` initialized from the union of self.parameters and override_parameters_kwargs, i.e., `dict(self.parameters, **override_parameters_kwargs)`.

`experimental_batch_shape`

View source

Returns the batch shape of this bijector for inputs of the given rank.

The batch shape of a bijector decribes the set of distinct transformations it represents on events of a given size. For example: the bijector `tfb.Scale([1., 2.])` has batch shape `[2]` for scalar events (`event_ndims = 0`), because applying it to a scalar event produces two scalar outputs, the result of two different scaling transformations. The same bijector has batch shape `[]` for vector events, because applying it to a vector produces (via elementwise multiplication) a single vector output.

Bijectors that operate independently on multiple state parts, such as `tfb.JointMap`, must broadcast to a coherent batch shape. Some events may not be valid: for example, the bijector `tfd.JointMap([tfb.Scale([1., 2.]), tfb.Scale([1., 2., 3.])])` does not produce a valid batch shape when `event_ndims = [0, 0]`, since the batch shapes of the two parts are inconsistent. The same bijector does define valid batch shapes of `[]`, `[2]`, and `[3]` if `event_ndims` is `[1, 1]`, `[0, 1]`, or `[1, 0]`, respectively.

Since transforming a single event produces a scalar log-det-Jacobian, the batch shape of a bijector with non-constant Jacobian is expected to equal the shape of `forward_log_det_jacobian(x, event_ndims=x_event_ndims)` or `inverse_log_det_jacobian(y, event_ndims=y_event_ndims)`, for `x` or `y` of the specified `ndims`.

Args
`x_event_ndims` Optional Python `int` (structure) number of dimensions in a probabilistic event passed to `forward`; this must be greater than or equal to `self.forward_min_event_ndims`. If `None`, defaults to `self.forward_min_event_ndims`. Mutually exclusive with `y_event_ndims`. Default value: `None`.
`y_event_ndims` Optional Python `int` (structure) number of dimensions in a probabilistic event passed to `inverse`; this must be greater than or equal to `self.inverse_min_event_ndims`. Mutually exclusive with `x_event_ndims`. Default value: `None`.

Returns
`batch_shape` `TensorShape` batch shape of this bijector for a value with the given event rank. May be unknown or partially defined.

`experimental_batch_shape_tensor`

View source

Returns the batch shape of this bijector for inputs of the given rank.

The batch shape of a bijector decribes the set of distinct transformations it represents on events of a given size. For example: the bijector `tfb.Scale([1., 2.])` has batch shape `[2]` for scalar events (`event_ndims = 0`), because applying it to a scalar event produces two scalar outputs, the result of two different scaling transformations. The same bijector has batch shape `[]` for vector events, because applying it to a vector produces (via elementwise multiplication) a single vector output.

Bijectors that operate independently on multiple state parts, such as `tfb.JointMap`, must broadcast to a coherent batch shape. Some events may not be valid: for example, the bijector `tfd.JointMap([tfb.Scale([1., 2.]), tfb.Scale([1., 2., 3.])])` does not produce a valid batch shape when `event_ndims = [0, 0]`, since the batch shapes of the two parts are inconsistent. The same bijector does define valid batch shapes of `[]`, `[2]`, and `[3]` if `event_ndims` is `[1, 1]`, `[0, 1]`, or `[1, 0]`, respectively.

Since transforming a single event produces a scalar log-det-Jacobian, the batch shape of a bijector with non-constant Jacobian is expected to equal the shape of `forward_log_det_jacobian(x, event_ndims=x_event_ndims)` or `inverse_log_det_jacobian(y, event_ndims=y_event_ndims)`, for `x` or `y` of the specified `ndims`.

Args
`x_event_ndims` Optional Python `int` (structure) number of dimensions in a probabilistic event passed to `forward`; this must be greater than or equal to `self.forward_min_event_ndims`. If `None`, defaults to `self.forward_min_event_ndims`. Mutually exclusive with `y_event_ndims`. Default value: `None`.
`y_event_ndims` Optional Python `int` (structure) number of dimensions in a probabilistic event passed to `inverse`; this must be greater than or equal to `self.inverse_min_event_ndims`. Mutually exclusive with `x_event_ndims`. Default value: `None`.

Returns
`batch_shape_tensor` integer `Tensor` batch shape of this bijector for a value with the given event rank.

`experimental_compute_density_correction`

View source

Density correction for this transformation wrt the tangent space, at x.

Subclasses of Bijector may call the most specific applicable method of `TangentSpace`, based on whether the transformation is dimension-preserving, coordinate-wise, a projection, or something more general. The backward-compatible assumption is that the transformation is dimension-preserving (goes from R^n to R^n).

Args
`x` `Tensor` (structure). The point at which to calculate the density.
`tangent_space` `TangentSpace` or one of its subclasses. The tangent to the support man