This distribution is useful for regarding a collection of independent, non-identical distributions as a single random variable. For example, the Independent distribution composed of a collection of Bernoulli distributions might define a distribution over an image (where each Bernoulli is a distribution over each pixel).

tfd_independent(distribution, reinterpreted_batch_ndims = NULL,
  validate_args = FALSE, name = paste0("Independent",



The base distribution instance to transform. Typically an instance of Distribution


Scalar, integer number of rightmost batch dims which will be regarded as event dims. When NULL all but the first batch axis (batch axis 0) will be transferred to event dimensions (analogous to tf$layers$flatten).


Logical, default FALSE. When TRUE distribution parameters are checked for validity despite possibly degrading runtime performance. When FALSE invalid inputs may silently render incorrect outputs. Default value: FALSE.


The name for ops managed by the distribution. Default value: Independent +


a distribution instance.


More precisely, a collection of B (independent) E-variate random variables (rv) {X_1, ..., X_B}, can be regarded as a [B, E]-variate random variable (X_1, ..., X_B) with probability p(x_1, ..., x_B) = p_1(x_1) * ... * p_B(x_B) where p_b(X_b) is the probability of the b-th rv. More generally B, E can be arbitrary shapes. Similarly, the Independent distribution specifies a distribution over [B, E]-shaped events. It operates by reinterpreting the rightmost batch dims as part of the event dimensions. The reinterpreted_batch_ndims parameter controls the number of batch dims which are absorbed as event dims; reinterpreted_batch_ndims <= len(batch_shape). For example, the log_prob function entails a reduce_sum over the rightmost reinterpreted_batch_ndims after calling the base distribution's log_prob. In other words, since the batch dimension(s) index independent distributions, the resultant multivariate will have independent components.

Mathematical Details

The probability function is,

prob(x; reinterpreted_batch_ndims) =
 tf.reduce_prod(dist.prob(x), axis=-1-range(reinterpreted_batch_ndims))

See also

For usage examples see e.g. tfd_sample(), tfd_log_prob(), tfd_mean().

Other distributions: tfd_autoregressive, tfd_batch_reshape, tfd_bernoulli, tfd_beta, tfd_binomial, tfd_categorical, tfd_cauchy, tfd_chi2, tfd_chi, tfd_cholesky_lkj, tfd_deterministic, tfd_dirichlet_multinomial, tfd_dirichlet, tfd_empirical, tfd_exponential, tfd_gamma_gamma, tfd_gamma, tfd_gaussian_process_regression_model, tfd_gaussian_process, tfd_geometric, tfd_gumbel, tfd_half_cauchy, tfd_half_normal, tfd_hidden_markov_model, tfd_horseshoe, tfd_inverse_gamma, tfd_inverse_gaussian, tfd_joint_distribution_named, tfd_joint_distribution_sequential, tfd_kumaraswamy, tfd_laplace, tfd_linear_gaussian_state_space_model, tfd_lkj, tfd_log_normal, tfd_logistic, tfd_mixture_same_family, tfd_mixture, tfd_multinomial, tfd_multivariate_normal_diag_plus_low_rank, tfd_multivariate_normal_diag, tfd_multivariate_normal_full_covariance, tfd_multivariate_normal_linear_operator, tfd_multivariate_normal_tri_l, tfd_multivariate_student_t_linear_operator, tfd_negative_binomial, tfd_normal, tfd_one_hot_categorical, tfd_pareto, tfd_pixel_cnn, tfd_poisson_log_normal_quadrature_compound, tfd_poisson, tfd_probit_bernoulli, tfd_quantized, tfd_relaxed_bernoulli, tfd_relaxed_one_hot_categorical, tfd_sample_distribution, tfd_sinh_arcsinh, tfd_student_t_process, tfd_student_t, tfd_transformed_distribution, tfd_triangular, tfd_truncated_normal, tfd_uniform, tfd_variational_gaussian_process, tfd_vector_diffeomixture, tfd_vector_exponential_diag, tfd_vector_exponential_linear_operator, tfd_vector_laplace_diag, tfd_vector_laplace_linear_operator, tfd_vector_sinh_arcsinh_diag, tfd_von_mises_fisher, tfd_von_mises, tfd_wishart_linear_operator, tfd_wishart_tri_l, tfd_wishart, tfd_zipf