Bernoulli
- class paddle.distribution. Bernoulli ( probs: float | Tensor, name: str | None = None ) [source]
-
Bernoulli distribution parameterized by
probs, which is the probability of value 1.In probability theory and statistics, the Bernoulli distribution, named after Swiss mathematician Jacob Bernoulli, is the discrete probability distribution of a random variable which takes the value 1 with probability
pand the value 0 with probabilityq=1-p.The probability mass function of this distribution, over possible outcomes
k, is\[\begin{split}{\begin{cases} q=1-p & \text{if }value=0 \\ p & \text{if }value=1 \end{cases}}\end{split}\]- Parameters
-
probs (float|Tensor) – The
probsinput of Bernoulli distribution. The data type is float32 or float64. The range must be in [0, 1].name (str, optional) – Name for the operation (optional, default is None). For more information, please refer to api_guide_Name.
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> # init `probs` with a float >>> rv = Bernoulli(probs=0.3) >>> print(rv.mean) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.30000001) >>> print(rv.variance) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.21000001) >>> print(rv.entropy()) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.61086434)
-
probs
(
value: Tensor
)
Tensor
probs¶
-
Probability density/mass function.
Note
This method will be deprecated in the future, please use prob instead.
- property mean : Tensor
-
Mean of Bernoulli distribution.
- Returns
-
Mean value of distribution.
- Return type
-
Tensor
- property variance : Tensor
-
Variance of Bernoulli distribution.
- Returns
-
Variance value of distribution.
- Return type
-
Tensor
- property batch_shape : Sequence[int]
-
Returns batch shape of distribution
- Returns
-
batch shape
- Return type
-
Sequence[int]
- property event_shape : Sequence[int]
-
Returns event shape of distribution
- Returns
-
event shape
- Return type
-
Sequence[int]
-
sample
(
shape: Sequence[int] = []
)
Tensor
sample¶
-
Sample from Bernoulli distribution.
- Parameters
-
shape (Sequence[int], optional) – Sample shape.
- Returns
-
Sampled data with shape sample_shape + batch_shape + event_shape.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(paddle.full([1], 0.3)) >>> print(rv.sample([100]).shape) [100, 1] >>> rv = Bernoulli(paddle.to_tensor(0.3)) >>> print(rv.sample([100]).shape) [100] >>> rv = Bernoulli(paddle.to_tensor([0.3, 0.5])) >>> print(rv.sample([100]).shape) [100, 2] >>> rv = Bernoulli(paddle.to_tensor([0.3, 0.5])) >>> print(rv.sample([100, 2]).shape) [100, 2, 2]
-
rsample
(
shape: Sequence[int] = [],
temperature: float = 1.0
)
Tensor
rsample¶
-
Sample from Bernoulli distribution (reparameterized).
The rsample is a continuously approximate of Bernoulli distribution reparameterized sample method. [1] Chris J. Maddison, Andriy Mnih, and Yee Whye Teh. The Concrete Distribution: A Continuous Relaxation of Discrete Random Variables. 2016. [2] Eric Jang, Shixiang Gu, and Ben Poole. Categorical Reparameterization with Gumbel-Softmax. 2016.
Note
rsample need to be followed by a sigmoid, which converts samples’ value to unit interval (0, 1).
- Parameters
-
shape (Sequence[int], optional) – Sample shape.
temperature (float) – temperature for rsample, must be positive.
- Returns
-
Sampled data with shape sample_shape + batch_shape + event_shape.
- Return type
-
Tensor
Examples
>>> import paddle >>> paddle.seed(1) >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(paddle.full([1], 0.3)) >>> print(rv.sample([100]).shape) [100, 1] >>> rv = Bernoulli(0.3) >>> print(rv.rsample([100]).shape) [100] >>> rv = Bernoulli(paddle.to_tensor([0.3, 0.5])) >>> print(rv.rsample([100]).shape) [100, 2] >>> rv = Bernoulli(paddle.to_tensor([0.3, 0.5])) >>> print(rv.rsample([100, 2]).shape) [100, 2, 2] >>> # `rsample` has to be followed by a `sigmoid` >>> rv = Bernoulli(0.3) >>> rsample = rv.rsample([3, ]) >>> rsample_sigmoid = paddle.nn.functional.sigmoid(rsample) >>> print(rsample) Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True, [-1.46112013, -0.01239836, -1.32765460]) >>> print(rsample_sigmoid) Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True, [0.18829606, 0.49690047, 0.20954758]) >>> # The smaller the `temperature`, the distribution of `rsample` closer to `sample`, with `probs` of 0.3. >>> print(paddle.nn.functional.sigmoid(rv.rsample([1000, ], temperature=1.0)).sum()) >>> Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 365.63122559) >>> >>> print(paddle.nn.functional.sigmoid(rv.rsample([1000, ], temperature=0.1)).sum()) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 320.15057373)
-
cdf
(
value: Tensor
)
Tensor
cdf¶
-
Cumulative distribution function(CDF) evaluated at value.
\[\begin{split}{ \begin{cases} 0 & \text{if } value \lt 0 \\ 1 - p & \text{if } 0 \leq value \lt 1 \\ 1 & \text{if } value \geq 1 \end{cases} }\end{split}\]- Parameters
-
value (Tensor) – Value to be evaluated.
- Returns
-
CDF evaluated at value.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(0.3) >>> print(rv.cdf(paddle.to_tensor([1.0]))) Tensor(shape=[1], dtype=float32, place=Place(cpu), stop_gradient=True, [1.])
-
log_prob
(
value: Tensor
)
Tensor
log_prob¶
-
Log of probability density function.
- Parameters
-
value (Tensor) – Value to be evaluated.
- Returns
-
Log of probability density evaluated at value.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(0.3) >>> print(rv.log_prob(paddle.to_tensor([1.0]))) Tensor(shape=[1], dtype=float32, place=Place(cpu), stop_gradient=True, [-1.20397282])
-
prob
(
value: Tensor
)
Tensor
prob¶
-
Probability density function(PDF) evaluated at value.
\[\begin{split}{ \begin{cases} q=1-p & \text{if }value=0 \\ p & \text{if }value=1 \end{cases} }\end{split}\]- Parameters
-
value (Tensor) – Value to be evaluated.
- Returns
-
PDF evaluated at value.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(0.3) >>> print(rv.prob(paddle.to_tensor([1.0]))) Tensor(shape=[1], dtype=float32, place=Place(cpu), stop_gradient=True, [0.29999998])
-
entropy
(
)
Tensor
entropy¶
-
Entropy of Bernoulli distribution.
\[{ entropy = -(q \log q + p \log p) }\]- Returns
-
Entropy of distribution.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(0.3) >>> print(rv.entropy()) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.61086434)
-
kl_divergence
(
other: Bernoulli
)
Tensor
[source]
kl_divergence¶
-
The KL-divergence between two Bernoulli distributions.
\[{ KL(a || b) = p_a \log(p_a / p_b) + (1 - p_a) \log((1 - p_a) / (1 - p_b)) }\]- Parameters
-
other (Bernoulli) – instance of Bernoulli.
- Returns
-
kl-divergence between two Bernoulli distributions.
- Return type
-
Tensor
Examples
>>> import paddle >>> from paddle.distribution import Bernoulli >>> rv = Bernoulli(0.3) >>> rv_other = Bernoulli(0.7) >>> print(rv.kl_divergence(rv_other)) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.33891910)
