pytorch 的 torch.distributions 中可以定义正态分布:
import torch
from torch.distributions import Normal
mean=torch.Tensor([0,2])
normal=Normal(mean,1)
sample()
就是直接在定义的正太分布(均值为mean,标准差std是1)上采样:
result = normal.sample()
print("sample():",result)
输出:
sample(): tensor([-1.3362, 3.1730])
rsample()
不是在定义的正太分布上采样,而是先对标准正太分布 N(0,1) 进行采样,然后输出: mean + std × 采样值
result = normal.rsample()
print("rsample():",result)
输出:
rsample: tensor([ 0.0530, 2.8396])
log_prob(value)
是计算value在定义的正态分布(mean,1)中对应的概率的对数,正太分布概率密度函数是:
对其取对数可得:
这里我们通过对数概率还原其对应的真实概率:
print("result log_prob:",normal.log_prob(result).exp())
输出:
result log_prob: tensor([ 0.1634, 0.2005])