garage.torch.distributions.tanh_normal module

A Gaussian distribution with tanh transformation.

class TanhNormal(loc, scale)[source]

Bases: sphinx.ext.autodoc.importer._MockObject

A distribution induced by applying a tanh transformation to a Gaussian random variable.

Algorithms like SAC and Pearl use this transformed distribution. It can be thought of as a distribution of X where

\(Y ~ \mathcal{N}(\mu, \sigma)\) \(X = tanh(Y)\)
Parameters:
  • loc (torch.Tensor) – The mean of this distribution.
  • scale (torch.Tensor) – The stdev of this distribution.
cdf(value)[source]

Returns the CDF at the value.

Returns the cumulative density/mass function evaluated at value on the underlying normal distribution.

Parameters:value (torch.Tensor) – The element where the cdf is being evaluated at.
Returns:the result of the cdf being computed.
Return type:torch.Tensor
entropy()[source]

Returns entropy of the underlying normal distribution.

Returns:entropy of the underlying normal distribution.
Return type:torch.Tensor
enumerate_support(expand=True)[source]

Returns tensor containing all values supported by a discrete dist.

The result will enumerate over dimension 0, so the shape of the result will be (cardinality,) + batch_shape + event_shape (where event_shape = () for univariate distributions).

Note that this enumerates over all batched tensors in lock-step [[0, 0], [1, 1], …]. With expand=False, enumeration happens along dim 0, but with the remaining batch dimensions being singleton dimensions, [[0], [1], ...

To iterate over the full Cartesian product use itertools.product(m.enumerate_support()).

Parameters:expand (bool) – whether to expand the support over the batch dims to match the distribution’s batch_shape.

Note

Calls the enumerate_support function of the underlying normal distribution.

Returns:Tensor iterating over dimension 0.
Return type:torch.Tensor
expand(batch_shape, _instance=None)[source]

Returns a new TanhNormal distribution.

(or populates an existing instance provided by a derived class) with batch dimensions expanded to batch_shape. This method calls expand on the distribution’s parameters. As such, this does not allocate new memory for the expanded distribution instance. Additionally, this does not repeat any args checking or parameter broadcasting in __init__.py, when an instance is first created.

Parameters:
  • batch_shape (torch.Size) – the desired expanded size.
  • _instance (instance) – new instance provided by subclasses that need to override .expand.
Returns:

New distribution instance with batch dimensions expanded to batch_size.

Return type:

Instance

icdf(value)[source]

Returns the icdf function evaluated at value.

Returns the icdf function evaluated at value on the underlying normal distribution.

Parameters:value (torch.Tensor) – The element where the cdf is being evaluated at.
Returns:the result of the cdf being computed.
Return type:torch.Tensor
log_prob(value, pre_tanh_value=None, epsilon=1e-06)[source]

The log likelihood of a sample on the this Tanh Distribution.

Parameters:
  • value (torch.Tensor) – The sample whose loglikelihood is being computed.
  • pre_tanh_value (torch.Tensor) – The value prior to having the tanh function applied to it but after it has been sampled from the normal distribution.
  • epsilon (float) – Regularization constant. Making this value larger makes the computation more stable but less precise.

Note

when pre_tanh_value is None, an estimate is made of what the value is. This leads to a worse estimation of the log_prob. If the value being used is collected from functions like sample and rsample, one can instead use functions like sample_return_pre_tanh_value or rsample_return_pre_tanh_value

Returns:The log likelihood of value on the distribution.
Return type:torch.Tensor
mean

mean of the distribution.

Type:torch.Tensor
rsample(sample_shape=<sphinx.ext.autodoc.importer._MockObject object>)[source]

Return a sample, sampled from this TanhNormal Distribution.

Parameters:sample_shape (list) – Shape of the returned value.

Note

Gradients pass through this operation.

Returns:Sample from this TanhNormal distribution.
Return type:torch.Tensor
rsample_with_pre_tanh_value(sample_shape=<sphinx.ext.autodoc.importer._MockObject object>)[source]

Return a sample, sampled from this TanhNormal distribution.

Returns the sampled value before the tanh transform is applied and the sampled value with the tanh transform applied to it.

Parameters:sample_shape (list) – shape of the return.

Note

Gradients pass through this operation.

Returns:Samples from this distribution. torch.Tensor: Samples from the underlying
torch.distributions.Normal distribution, prior to being transformed with tanh.
Return type:torch.Tensor
sample(sample_shape=<sphinx.ext.autodoc.importer._MockObject object>)[source]

Return a sample, sampled from this TanhNormal Distribution.

Parameters:sample_shape (list) – Shape of the returned value.

Note

Gradients do not pass through this operation.

Returns:Sample from this TanhNormal distribution.
Return type:torch.Tensor
variance

variance of the underlying normal distribution.

Type:torch.Tensor