# Bernoulli¶

class paddle.distribution. Bernoulli ( probs, name=None ) [源代码]

$\begin{split}{\begin{cases} q=1-p & \text{if }value=0 \\ p & \text{if }value=1 \end{cases}}\end{split}$

## 参数¶

• probs (float|Tensor) - 伯努利分布的概率输入。数据类型为 float32 或 float64。范围必须为 $$[0, 1]$$

• name (str，可选) - 操作的名称，一般无需设置，默认值为 None，具体用法请参见 Name

## 代码示例¶

>>> import paddle

>>> # init probs with a float
>>> rv = Bernoulli(probs=0.3)

>>> print(rv.mean)
0.30000001)

>>> print(rv.variance)
0.21000001)

>>> print(rv.entropy())
0.61086434)


Tensor，均值

Tensor，方差

## 方法¶

### sample(shape)¶

• shape (Sequence[int]) - 指定生成样本的维度。

Tensor，样本，其维度为 $$\text{sample shape} + \text{batch shape} + \text{event shape}$$

>>> import paddle

>>> print(rv.sample([100]).shape)
[100, 1]

>>> print(rv.sample([100]).shape)
[100]

>>> print(rv.sample([100]).shape)
[100, 2]

>>> print(rv.sample([100, 2]).shape)
[100, 2, 2]


### rsample(shape, temperature=1.0)¶

rsample 是连续近似的伯努利分布重参数化样本方法。

[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.

rsample 后面需要跟一个 sigmoid，从而将样本的值转换为单位间隔 $$(0, 1)$$

• shape (Sequence[int]) - 指定生成样本的维度。

• temperature (float) - rsample 的温度，必须为正值。

Tensor，样本，其维度为 $$\text{sample shape} + \text{batch shape} + \text{event shape}$$

>>> import paddle

>>> print(rv.sample([100]).shape)
[100, 1]

>>> rv = Bernoulli(0.3)
>>> print(rv.rsample([100]).shape)
[100]

>>> print(rv.rsample([100]).shape)
[100, 2]

>>> 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, ])
>>> print(rsample)
[-1.46112013, -0.01239836, -1.32765460])
>>> print(rsample_sigmoid)
[0.18829606, 0.49690047, 0.20954758])

>>> # The smaller the temperature, the distribution of rsample closer to sample, with probs of 0.3.
365.63122559)

320.15057373)


### cdf(value)¶

value 的累积分布函数 （CDF）

$\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}$

• value (Tensor) - 输入 Tensor。

Tensor， value 的累积分布函数。

>>> import paddle

>>> rv = Bernoulli(0.3)
[1.])


### log_prob(value)¶

• value (Tensor) - 输入 Tensor。

Tensor， value 的对数概率密度函数。

>>> import paddle

>>> rv = Bernoulli(0.3)
[-1.20397282])


### prob(value)¶

value 的概率密度函数。

$\begin{split}{ \begin{cases} q=1-p & \text{if }value=0 \\ p & \text{if }value=1 \end{cases} }\end{split}$

• value (Tensor) - 输入 Tensor。

Tensor， value 的概率密度函数。

>>> import paddle

>>> rv = Bernoulli(0.3)
[0.29999998])


### entropy()¶

${ entropy = -(q \log q + p \log p) }$

Tensor，伯努利分布的信息熵。

>>> import paddle

>>> rv = Bernoulli(0.3)
>>> print(rv.entropy())
0.61086434)


### kl_divergence(other)¶

${ KL(a || b) = p_a \log(p_a / p_b) + (1 - p_a) \log((1 - p_a) / (1 - p_b)) }$

• other (Bernoulli) - Bernoulli 的实例。

Tensor，两个伯努利分布之间的 KL 散度。

>>> import paddle