Skip to content

Commit 77e0eda

Browse files
authored
【Hackathon 6th No.11】Add log_normal and log_normal_ API to Paddle (#6664)
* add lognormal * update * update * update * delete log_normal in tensor overview_en * update lognormal
1 parent 77d187b commit 77e0eda

File tree

6 files changed

+93
-0
lines changed

6 files changed

+93
-0
lines changed

docs/api/paddle/Overview_cn.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ tensor 数学操作原位(inplace)版本
225225
" :ref:`paddle.index_fill_ <cn_api_paddle_index_fill_>` ", "Inplace 版本的 index_fill API,对输入 x 采用 Inplace 策略"
226226
" :ref:`paddle.bitwise_left_shift_ <cn_api_paddle_bitwise_left_shift_>` ", "Inplace 版本的 bitwise_left_shift API,对输入 x 采用 Inplace 策略"
227227
" :ref:`paddle.bitwise_right_shift_ <cn_api_paddle_bitwise_right_shift_>` ", "Inplace 版本的 bitwise_right_shift API,对输入 x 采用 Inplace 策略"
228+
" :ref:`paddle.log_normal_ <cn_api_paddle_log_normal_>` ", "Inplace 版本的 log_normal API,对输入 x 采用 Inplace 策略"
228229

229230

230231
.. _tensor_logic:
@@ -345,6 +346,7 @@ tensor random 相关
345346

346347
" :ref:`paddle.bernoulli <cn_api_paddle_bernoulli>` ", "以输入 x 为概率,生成一个伯努利分布(0-1 分布)的 Tensor,输出 Tensor 的形状和数据类型与输入 x 相同"
347348
" :ref:`paddle.binomial <cn_api_paddle_binomial>` ", "以输入 count 为总实验次数, prob 为实验成功的概率,生成一个二项分布的 Tensor"
349+
" :ref:`paddle.log_normal <cn_api_paddle_log_normal>` ", "返回符合对数正态分布(对应正态分布的均值为 mean ,标准差为 std)的随机 Tensor"
348350
" :ref:`paddle.multinomial <cn_api_paddle_multinomial>` ", "以输入 x 为概率,生成一个多项分布的 Tensor"
349351
" :ref:`paddle.normal <cn_api_paddle_normal>` ", "返回符合正态分布(均值为 mean ,标准差为 std 的正态随机分布)的随机 Tensor"
350352
" :ref:`paddle.rand <cn_api_paddle_rand>` ", "返回符合均匀分布的,范围在[0, 1)的 Tensor"

docs/api/paddle/Tensor/Overview_en.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ Methods
173173
logical_not
174174
logical_or
175175
logical_xor
176+
log_normal_
176177
logsumexp
177178
masked_select
178179
matmul

docs/api/paddle/Tensor_cn.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1675,6 +1675,11 @@ logsumexp(axis=None, keepdim=False, name=None)
16751675

16761676
返回类型:Tensor
16771677

1678+
log_normal_(mean=0.0, std=1.0, name=None)
1679+
:::::::::
1680+
1681+
Inplace 版本的 :ref:`cn_api_paddle_log_normal` API,对输入 `x` 采用 Inplace 策略。
1682+
16781683
请参考 :ref:`cn_api_paddle_logsumexp`
16791684

16801685
masked_select(mask, name=None)

docs/api/paddle/log_normal__cn.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.. _cn_api_paddle_log_normal_:
2+
3+
log\_normal\_
4+
-------------------------------
5+
6+
.. py:function:: paddle.log_normal_(x, mean=1.0, std=2.0, name=None)
7+
8+
Inplace 版本的 :ref:`cn_api_paddle_log_normal` API,对输入 `x` 采用 Inplace 策略。
9+
10+
更多关于 inplace 操作的介绍请参考 `3.1.3 原位(Inplace)操作和非原位操作的区别`_ 了解详情。
11+
12+
.. _3.1.3 原位(Inplace)操作和非原位操作的区别: https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/beginner/tensor_cn.html#id3

docs/api/paddle/log_normal_cn.rst

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
.. _cn_api_paddle_log_normal:
2+
3+
log\_normal
4+
-------------------------------
5+
6+
.. py:function:: paddle.log_normal(mean=1.0, std=2.0, shape=None, name=None)
7+
8+
9+
返回符合对数正态分布(对应正态分布的均值为 ``mean``,标准差为 ``std``)的随机 Tensor,对数正态分布的分布函数如下
10+
11+
.. math::
12+
13+
f(x) = \frac{1}{x\sigma\sqrt{2\pi}}e^{-\frac{(\ln{x}-\mu)^2}{2\sigma^2}}
14+
15+
其中:
16+
17+
- :math:`mu` 表示对应正态分布的平均值。
18+
- :math:`sigma` 表示对应正态分布的标准差。
19+
20+
如果 ``mean`` 是 Tensor,则输出 Tensor 和 ``mean`` 具有相同的形状和数据类型。
21+
如果 ``mean`` 不是 Tensor,且 ``std`` 是 Tensor,则输出 Tensor 和 ``std`` 具有相同的形状和数据类型。
22+
如果 ``mean`` 和 ``std`` 都不是 Tensor,则输出 Tensor 的形状为 ``shape``,数据类型为 float32。
23+
如果 ``mean`` 和 ``std`` 都是 Tensor,则 ``mean`` 和 ``std`` 的元素个数应该相同。
24+
25+
参数
26+
::::::::::
27+
28+
- **mean** (float|Tensor,可选) - 输出 Tensor 对应正态分布的平均值。如果 ``mean`` 是 float,则表示输出 Tensor 中所有元素的正态分布的平均值。如果 ``mean`` 是 Tensor (支持的数据类型为 float32、float64),则表示输出 Tensor 中每个元素对应正态分布的平均值。默认值为 1.0。
29+
- **std** (float|Tensor,可选) - 输出 Tensor 对应正态分布的标准差。如果 ``std`` 是 float,则表示输出 Tensor 中所有元素的正态分布的标准差。如果 ``std`` 是 Tensor (支持的数据类型为 float32、float64),则表示输出 Tensor 中每个元素对应正态分布的标准差。默认值为 2.0。
30+
- **shape** (list|tuple|Tensor,可选) - 生成的随机 Tensor 的形状。如果 ``shape`` 是 list、tuple,则其中的元素可以是 int,或者是形状为[]且数据类型为 int32、int64 的 0-D Tensor。如果 ``shape`` 是 Tensor,则是数据类型为 int32、int64 的 1D Tensor。如果 ``mean`` 或者 ``std`` 是 Tensor,输出 Tensor 的形状和 ``mean`` 或者 ``std`` 相同(此时 ``shape`` 无效)。默认值为 None。
31+
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。
32+
33+
返回
34+
::::::::::
35+
Tensor,符合对数正态分布(对应正态分布的均值为 ``mean``,标准差为 ``std``)的随机 Tensor。
36+
37+
示例代码
38+
::::::::::
39+
40+
COPY-FROM: paddle.log_normal
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## [ torch 参数更多 ]torch.Tensor.log_normal_
2+
3+
### [torch.Tensor.log_normal_](https://pytorch.org/docs/stable/generated/torch.Tensor.log_normal_.html#torch-tensor-log-normal)
4+
5+
```python
6+
torch.Tensor.log_normal_(mean=1, std=2, *, generator=None)
7+
```
8+
9+
### [paddle.Tensor.log_normal_](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#log_normal-mean-1-0-std-2-0-shape-none-name-none)
10+
11+
```python
12+
paddle.Tensor.log_normal_(mean=1.0, std=2.0, name=None)
13+
```
14+
15+
PyTorch 相比 Paddle 支持更多其他参数,具体如下:
16+
17+
### 参数映射
18+
19+
| PyTorch | PaddlePaddle | 备注 |
20+
| ------------- | ------------ | ----------------------------------------------------------------------------------- |
21+
| generator | - | 用于采样的伪随机数生成器, Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 |
22+
23+
### 转写示例
24+
25+
```python
26+
# torch 写法
27+
x = torch.randn(2, 3)
28+
y = x.log_normal_()
29+
30+
# paddle 写法
31+
x = paddle.randn([2, 3])
32+
y = x.log_normal_()
33+
```

0 commit comments

Comments
 (0)