如何从PyTorch中具有约束的分布中采样?



我有一个简单的情况:

从满足约束m1+m2 &lt的m1~U(5,80), m2~U(5,80)的2-dim变量(m1, m2)的均匀分布中生成样本和log_prob;100 .

from torch import distributions
prior = distributions.Uniform(torch.tensor([5.0, 5.0]),
torch.tensor([80.0, 80.0]))

我尝试在PyTorch中像上面一样编码,但我不知道如何构建具有约束条件的torch.distribution。顺便说一下,我看到一些关于torch.distributions.constraints的实现,但我不知道如何使用它。

这可以通过拒绝抽样来实现:

d = torch.distributions.Uniform(5, 80)
m1 = 80
m2 = 80
while m1 + m2 >= 100:
m1 = d.sample()
m2 = d.sample()
print(m1, m2)

示例输出:

tensor(52.3322) tensor(67.8245)
tensor(68.3232) tensor(40.0983)
tensor(44.7374) tensor(9.9690)

最新更新