Mixture

class tfsnippet.Mixture(categorical, components, is_reparameterized=False)

Bases: tfsnippet.distributions.base.Distribution

Mixture distribution.

Given a categorical distribution, and corresponding component distributions, this class derives a mixture distribution, formulated as follows:

\[p(x) = \sum_{k=1}^{K} \pi(k) p_k(x)\]

where \(\pi(k)\) is the probability of taking the k-th component, derived by the categorical distribution, and \(p_k(x)\) is the density of the k-th component distribution.

Attributes Summary

base_distribution Get the base distribution of this distribution.
batch_shape Get the batch shape of the samples.
categorical Get the categorical distribution of this mixture.
components Get the mixture components of this distribution.
dtype Get the data type of samples.
is_continuous Whether or not the distribution is continuous?
is_reparameterized Whether or not the distribution is re-parameterized?
n_components Get the number of mixture components.
value_ndims Get the number of value dimensions in samples.

Methods Summary

batch_ndims_to_value(ndims) Convert the last few batch_ndims into value_ndims.
expand_value_ndims(ndims) Convert the last few batch_ndims into value_ndims.
get_batch_shape() Get the static batch shape of the samples.
log_prob(given[, group_ndims, name]) Compute the log-densities of x against the distribution.
prob(given[, group_ndims, name]) Compute the densities of x against the distribution.
sample([n_samples, group_ndims, …]) Generate samples from the distribution.

Attributes Documentation

base_distribution

Get the base distribution of this distribution.

For distribution other than tfsnippet.BatchToValueDistribution, this property should return this distribution itself.

Returns:The base distribution.
Return type:Distribution
batch_shape

Get the batch shape of the samples.

Returns:The batch shape as tensor.
Return type:tf.Tensor
categorical

Get the categorical distribution of this mixture.

Returns:The categorical distribution.
Return type:Categorical
components

Get the mixture components of this distribution.

Returns:The mixture components.
Return type:tuple[Distribution]
dtype

Get the data type of samples.

Returns:Data type of the samples.
Return type:tf.DType
is_continuous

Whether or not the distribution is continuous?

Returns:A boolean indicating whether it is continuous.
Return type:bool
is_reparameterized

Whether or not the distribution is re-parameterized?

The re-parameterization trick is proposed in “Auto-Encoding Variational Bayes” (Kingma, D.P. and Welling), allowing the gradients to be propagated back along the samples. Note that the re-parameterization can be disabled by specifying is_reparameterized = False as an argument of sample().

Returns:A boolean indicating whether it is re-parameterized.
Return type:bool
n_components

Get the number of mixture components.

Returns:The number of mixture components.
Return type:int
value_ndims

Get the number of value dimensions in samples.

Returns:The number of value dimensions in samples.
Return type:int

Methods Documentation

batch_ndims_to_value(ndims)

Convert the last few batch_ndims into value_ndims.

For a particular Distribution, the number of dimensions between the samples and the log-probability of the samples should satisfy:

samples.ndims - distribution.value_ndims == log_det.ndims

We denote samples.ndims - distribution.value_ndims by batch_ndims. This method thus wraps the current distribution, converts the last few batch_ndims into value_ndims.

Parameters:ndims (int) – The last few batch_ndims to be converted into value_ndims. Must be non-negative.
Returns:The converted distribution.
Return type:Distribution
expand_value_ndims(ndims)

Convert the last few batch_ndims into value_ndims.

For a particular Distribution, the number of dimensions between the samples and the log-probability of the samples should satisfy:

samples.ndims - distribution.value_ndims == log_det.ndims

We denote samples.ndims - distribution.value_ndims by batch_ndims. This method thus wraps the current distribution, converts the last few batch_ndims into value_ndims.

Parameters:ndims (int) – The last few batch_ndims to be converted into value_ndims. Must be non-negative.
Returns:The converted distribution.
Return type:Distribution
get_batch_shape()

Get the static batch shape of the samples.

Returns:The batch shape.
Return type:tf.TensorShape
log_prob(given, group_ndims=0, name=None)

Compute the log-densities of x against the distribution.

Parameters:
  • given (Tensor) – The samples to be tested.
  • group_ndims (int or tf.Tensor) – If specified, the last group_ndims dimensions of the log-densities will be summed up. (default 0)
  • name – TensorFlow name scope of the graph nodes. (default “log_prob”).
Returns:

The log-densities of given.

Return type:

tf.Tensor

prob(given, group_ndims=0, name=None)

Compute the densities of x against the distribution.

Parameters:
  • given (Tensor) – The samples to be tested.
  • group_ndims (int or tf.Tensor) – If specified, the last group_ndims dimensions of the log-densities will be summed up. (default 0)
  • name – TensorFlow name scope of the graph nodes. (default “prob”).
Returns:

The densities of given.

Return type:

tf.Tensor

sample(n_samples=None, group_ndims=0, is_reparameterized=None, compute_density=None, name=None)

Generate samples from the distribution.

Parameters:
  • n_samples (int or tf.Tensor or None) – A 0-D int32 Tensor or None. How many independent samples to draw from the distribution. The samples will have shape [n_samples] + batch_shape + value_shape, or batch_shape + value_shape if n_samples is None.
  • group_ndims (int or tf.Tensor) – Number of dimensions at the end of [n_samples] + batch_shape to be considered as events group. This will effect the behavior of log_prob() and prob(). (default 0)
  • is_reparameterized (bool) – If True, raises RuntimeError if the distribution is not re-parameterized. If False, disable re-parameterization even if the distribution is re-parameterized. (default None, following the setting of distribution)
  • compute_density (bool) – Whether or not to immediately compute the log-density for the samples? (default None, determine by the distribution class itself)
  • name – TensorFlow name scope of the graph nodes. (default “sample”).
Returns:

The samples as

StochasticTensor.

Return type:

tfsnippet.stochastic.StochasticTensor