修改bernoulli的inplace实现(p为随机值为1的概率) by Qin-sx · Pull Request #73271 · PaddlePaddle/Paddle
之前Bernoulli的inplace实现有bug,p实现成了随机值为0的概率:与非inplace版本的paddle.bernoulli、pytorch实现均不同。
import paddle import torch import numpy as np np.random.seed(23) paddle.seed(23) torch.manual_seed(23) probs_np = np.random.rand(3, 3).astype(np.float32) probs_paddle = paddle.to_tensor(probs_np) probs_torch = torch.tensor(probs_np) print("\n概率值 (输入):") print(probs_paddle) probs_paddle.bernoulli_(p=0.99) print("\nPaddle bernoulli_ 结果:") print(probs_paddle) print("\n概率值 (输入):") print(probs_torch) probs_torch.bernoulli_(p=0.99) print("\nPyTorch bernoulli_ 结果:") print(probs_torch)
概率值 (输入):
Tensor(shape=[3, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
[[0.51729786, 0.94696259, 0.76545978],
[0.28239584, 0.22104536, 0.68622208],
[0.16713920, 0.39244246, 0.61805236]])
Paddle bernoulli_ 结果:
Tensor(shape=[3, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
概率值 (输入):
tensor([[0.5173, 0.9470, 0.7655],
[0.2824, 0.2210, 0.6862],
[0.1671, 0.3924, 0.6181]])
PyTorch bernoulli_ 结果:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])