我有一个简单的情况:
从满足约束m1+m2 <的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)