Wrap an existing distribution as a traceable random variable.
tfp.edward2.as_random_variable( distribution, sample_shape=(), value=None )
This enables the use of custom or user-provided distributions in
Edward models. Unlike a bare
RandomVariable object, this method
wraps the constructor so it is included in the Edward trace and its
values can be properly intercepted and overridden.
Where possible, you should prefer the built-in constructors
ed.Normal, etc); these simultaneously construct a Distribution
and a RandomVariable object so that the distribution parameters
themselves may be intercepted and overridden. RVs constructed via
as_random_variable() have a fixed distribution and may not support
program transformations (e.g, conjugate marginalization) that rely
on overriding distribution parameters.
distribution: tfd.Distribution governing the distribution of the random variable, such as sampling and log-probabilities.
sample_shape: tf.TensorShape of samples to draw from the random variable. Default is
()corresponding to a single sample.
value: Fixed tf.Tensor to associate with random variable. Must have shape
sample_shape + distribution.batch_shape + distribution.event_shape. Default is to sample from random variable according to
RandomVariablewrapping the provided distribution.
from tensorflow_probability import distributions as tfd from tensorflow_probability import edward2 as ed def model(): # equivalent to ed.Normal(0., 1., name='x') return ed.as_random_variable(tfd.Normal(0., 1., name='x')) log_joint = ed.make_log_joint_fn(model) output = log_joint(x=2.)