首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyro和条件概率

Pyro和条件概率
EN

Stack Overflow用户
提问于 2021-04-30 21:50:31
回答 1查看 212关注 0票数 0

我正在学习本教程:An Introduction to Inference in Pyro

我不明白的是以下几点。为了获得(??????|?????,???????????=9.5),我们可以使用pyro.condition函数

代码语言:javascript
复制
def scale(guess):
    weight = pyro.sample("weight", dist.Normal(guess, 1.0))
    print(weight)
    return pyro.sample("measurement", dist.Normal(weight, 0.75))

conditioned_scale = pyro.condition(scale, data={"measurement": 9.5})

我写了以下脚本:

代码语言:javascript
复制
    pyro.set_rng_seed(101)
    scale(0.3) # tensor(-1.0905)
    pyro.set_rng_seed(101)
    conditioned_scale(0.3) # tensor(-1.0905)

对于这两个函数,我们得到相同的权重样本。本教程不是在说,使用conditioned_scale,我们可以从以measurement=9.5为条件的权重分布中获得样本吗?如果是这样,权重的样本不应该是不同的,因为在第一个调用中我们没有观察到任何数据,但在第二个调用中我们以数据为条件?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-06-13 04:29:16

运行模型不会从后部产生样本,您需要运行推断(如SVIMCMC)。

condition会将示例站点值替换为您指定的值。由于您为measurement指定值,因此weight不受影响。您所编写的模型等同于N(measurement;N(weight;guess,1),.75),并且通过条件化,您已经声明了measurement=9.5conditioned_scale = pyro.condition(scale, data={"weight": 9.5})和相同的密钥将产生不同的测量值。下面我用NumPyro写了同样的程序。你应该去看看https://forum.pyro.ai/

代码语言:javascript
复制
import numpyro
import numpyro.distributions as dist


def scale(rng_key, guess):
    w_key, m_key = random.split(rng_key)

    weight = numpyro.sample("weight", dist.Normal(guess, 1.0), rng_key=w_key)
    print(weight)
    return numpyro.sample("measurement", dist.Normal(weight, 0.75), rng_key=m_key)


if __name__ == '__main__':
    rng_key = random.PRNGKey(0)
    print(scale(rng_key, 0.3))  # -0.49476373

    conditioned_scale = numpyro.handlers.condition(scale, data={"weight": 9.5})
    print(conditioned_scale(rng_key, 0.3))  # 8.561346
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67335114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档