程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 Pyro 实现图形模型的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 Pyro 实现图形模型的问题?

开发过程中遇到使用 Pyro 实现图形模型的问题的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 Pyro 实现图形模型的问题的解决方法建议,希望对你解决使用 Pyro 实现图形模型的问题有所启发或帮助;

我正在尝试使用 Pyro 实现这个图形模型:

使用 Pyro 实现图形模型的问题

我的实现是:

def model(data): 
    p = pyro.sample('p',dist.beta(1,1))

    label_axis = pyro.plate("label_axis",data.shape[0],dim=-3)
    f_axis = pyro.plate("f_axis",data.shape[1],dim=-2)

    with label_axis:
        l = pyro.sample('l',dist.bernoulli(p))
    
    with f_axis:
        e = pyro.sample('e',10))

    with label_axis,f_axis:
        f = pyro.sample('f',dist.bernoulli(1-E),obs=data)
        f = l*f + (1-l)*(1-f)
     return f

然而,这对我来说似乎不正确。问题是“f”。由于其分布与伯努利不同。为了从 f 中采样,我使用了伯努利分布中的一个样本,然后在 l=0 时更改了采样值。但我认为这不会改变 Pyro 在幕后为“f”存储的值。这在推理时会出现问题,对吗?

我想使用迭代板而不是矢量化板,以便能够在我的板中使用控制语句。但显然,这是不可能的,因为我正在重复使用盘子。

如何正确实施此 pgm?我需要编写自定义发行版吗?或者我可以破解 Pyro 并自己更改“f”的存储值?任何类型的帮助表示赞赏!干杯!

解决方法

这是正确的实现:

import pyro
import pyro.diStributions as dist
from pyro.infer import MCMC,NUTS

def model(data): 
    p = pyro.sample('p',dist.beta(1,1))

    label_axis = pyro.plate("label_axis",data.shape[0],dim=-2)
    f_axis = pyro.plate("f_axis",data.shape[1],dim=-1)

    with label_axis:
        l = pyro.sample('l',dist.bernoulli(p))

    with f_axis:
        e = pyro.sample('e',10))

    with label_axis,f_axis:
        prob = l * (1 - E) + (1 - l) * e
        return pyro.sample('f',dist.bernoulli(prob),obs=data)

mcmc = MCMC(NUTS(model),500,500)
data = dist.bernoulli(0.5).sample((20,4))
mcmc.run(data)

大佬总结

以上是大佬教程为你收集整理的使用 Pyro 实现图形模型的问题全部内容,希望文章能够帮你解决使用 Pyro 实现图形模型的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:使用