![]() |
Wrap an existing distribution as a traceable random variable.
Aliases:
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.
Args:
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 shapesample_shape + distribution.batch_shape + distribution.event_shape
. Default is to sample from random variable according tosample_shape
.
Returns:
rv
: aRandomVariable
wrapping the provided distribution.
Example
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.)