Stochastic Tensor Classes

class tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor

Base Class for Tensor-like objects that emit stochastic values.


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.__init__() {:#BaseStochasticTensor.init}


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.dtype


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.graph


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.input_dict


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.loss(sample_loss)

Returns the term to add to the surrogate loss.

This method is called by surrogate_loss. The input sample_loss should have already had stop_gradient applied to it. This is because the surrogate_loss usually provides a Monte Carlo sample term of the form differentiable_surrogate * sample_loss where sample_loss is considered constant with respect to the input for purposes of the gradient.

Args:
  • sample_loss: Tensor, sample loss downstream of this StochasticTensor.
Returns:

Either None or a Tensor.


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.name


tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor.value(name=None)


class tf.contrib.bayesflow.stochastic_tensor.StochasticTensor

StochasticTensor is a BaseStochasticTensor backed by a distribution.


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.__init__(dist_cls, name=None, dist_value_type=None, loss_fn=score_function, **dist_args) {:#StochasticTensor.init}

Construct a StochasticTensor.

StochasticTensor will instantiate a distribution from dist_cls and dist_args and its value method will return the same value each time it is called. What value is returned is controlled by the dist_value_type (defaults to SampleAndReshapeValue).

Some distributions' sample functions are not differentiable (e.g. a sample from a discrete distribution like a Bernoulli) and so to differentiate wrt parameters upstream of the sample requires a gradient estimator like the score function estimator. This is accomplished by passing a differentiable loss_fn to the StochasticTensor, which defaults to a function whose derivative is the score function estimator. Calling stochastic_graph.surrogate_loss(final_losses) will call loss() on every StochasticTensor upstream of final losses.

loss() will return None for StochasticTensors backed by reparameterized distributions; it will also return None if the value type is MeanValueType or if loss_fn=None.

Args:
  • dist_cls: a Distribution class.
  • name: a name for this StochasticTensor and its ops.
  • dist_value_type: a _StochasticValueType, which will determine what the value of this StochasticTensor will be. If not provided, the value type set with the value_type context manager will be used.
  • loss_fn: callable that takes (dt, dt.value(), influenced_loss), where dt is this StochasticTensor, and returns a Tensor loss. By default, loss_fn is the score_function, or more precisely, the integral of the score function, such that when the gradient is taken, the score function results. See the stochastic_gradient_estimators module for additional loss functions and baselines.
  • **dist_args: keyword arguments to be passed through to dist_cls on construction.
Raises:
  • TypeError: if dist_cls is not a Distribution.
  • TypeError: if loss_fn is not callable.

tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.clone(name=None, **dist_args)


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.distribution


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.dtype


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.entropy(name='entropy')


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.graph


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.input_dict


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.loss(final_loss, name='Loss')


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.mean(name='mean')


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.name


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.value(name='value')


tf.contrib.bayesflow.stochastic_tensor.StochasticTensor.value_type