修改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.]])