Type MultivariateNormalTriL
Namespace tensorflow.contrib.distributions
Parent MultivariateNormalLinearOperator
Interfaces IMultivariateNormalTriL
The multivariate normal distribution on `R^k`. The Multivariate Normal distribution is defined over `R^k` and parameterized
by a (batch of) length-`k` `loc` vector (aka "mu") and a (batch of) `k x k`
`scale` matrix; `covariance = scale @ scale.T` where `@` denotes
matrix-multiplication. #### Mathematical Details The probability density function (pdf) is, ```none
pdf(x; loc, scale) = exp(-0.5 ||y||**2) / Z,
y = inv(scale) @ (x - loc),
Z = (2 pi)**(0.5 k) |det(scale)|,
``` where: * `loc` is a vector in `R^k`,
* `scale` is a matrix in `R^{k x k}`, `covariance = scale @ scale.T`,
* `Z` denotes the normalization constant, and,
* `||y||**2` denotes the squared Euclidean norm of `y`. A (non-batch) `scale` matrix is: ```none
scale = scale_tril
``` where `scale_tril` is lower-triangular `k x k` matrix with non-zero diagonal,
i.e., `tf.linalg.tensor_diag_part(scale_tril) != 0`. Additional leading dimensions (if any) will index batches. The MultivariateNormal distribution is a member of the [location-scale
family](https://en.wikipedia.org/wiki/Location-scale_family), i.e., it can be
constructed as, ```none
X ~ MultivariateNormal(loc=0, scale=1) # Identity scale, zero shift.
Y = scale @ X + loc
``` Trainable (batch) lower-triangular matrices can be created with
`tfp.distributions.matrix_diag_transform()` and/or
`tfp.distributions.fill_triangular()` #### Examples
Show Example
import tensorflow_probability as tfp tfd = tfp.distributions # Initialize a single 3-variate Gaussian. mu = [1., 2, 3] cov = [[ 0.36, 0.12, 0.06], [ 0.12, 0.29, -0.13], [ 0.06, -0.13, 0.26]] scale = tf.linalg.cholesky(cov) # ==> [[ 0.6, 0. , 0. ], # [ 0.2, 0.5, 0. ], # [ 0.1, -0.3, 0.4]]) mvn = tfd.MultivariateNormalTriL( loc=mu, scale_tril=scale) mvn.mean().eval() # ==> [1., 2, 3] # Covariance agrees with cholesky(cov) parameterization. mvn.covariance().eval() # ==> [[ 0.36, 0.12, 0.06], # [ 0.12, 0.29, -0.13], # [ 0.06, -0.13, 0.26]] # Compute the pdf of an observation in `R^3` ; return a scalar. mvn.prob([-1., 0, 1]).eval() # shape: [] # Initialize a 2-batch of 3-variate Gaussians. mu = [[1., 2, 3], [11, 22, 33]] # shape: [2, 3] tril =... # shape: [2, 3, 3], lower triangular, non-zero diagonal. mvn = tfd.MultivariateNormalTriL( loc=mu, scale_tril=tril) # Compute the pdf of two `R^3` observations; return a length-2 vector. x = [[-0.9, 0, 0.1], [-10, 0, 9]] # shape: [2, 3] mvn.prob(x).eval() # shape: [2] # Instantiate a "learnable" MVN. dims = 4 with tf.compat.v1.variable_scope("model"): mvn = tfd.MultivariateNormalTriL( loc=tf.compat.v1.get_variable(shape=[dims], dtype=tf.float32, name="mu"), scale_tril=tfd.fill_triangular( tf.compat.v1.get_variable(shape=[dims * (dims + 1) / 2], dtype=tf.float32, name="chol_Sigma")))
Properties
- allow_nan_stats
- allow_nan_stats_dyn
- batch_shape
- batch_shape_dyn
- bijector
- bijector_dyn
- distribution
- distribution_dyn
- dtype
- dtype_dyn
- event_shape
- event_shape_dyn
- loc
- loc_dyn
- name
- name_dyn
- parameters
- parameters_dyn
- PythonObject
- reparameterization_type
- reparameterization_type_dyn
- scale
- scale_dyn
- validate_args
- validate_args_dyn