简易自定义指南¶
简易指南¶
- class EasyGuide(model)[source]¶
-
“简单指南”的基类,比
AutoGuide
更灵活,但比原始的Pyro指南更容易编写。派生类应该定义一个
guide()
方法。这个guide()
方法可以结合普通的指导语句(例如pyro.sample
和pyro.param
)与以下特殊语句:group = self.group(...)
选择模型中的多个pyro.sample
站点。有关后续方法,请参见Group
。with self.plate(...): ...
应该被用来代替pyro.plate
。self.map_estimate(...)
使用Delta
指南进行单个站点的估计。
派生类也可以重写
init()
方法,为模型站点提供自定义初始化。- Parameters
model (callable) – 一个Pyro模型。
- property model¶
- init(site)[source]¶
模型初始化方法,用户可能会重写。
这应该输入一个站点并输出该站点的有效样本。 默认行为是随机抽取样本:
return site["fn"]()
有关其他可能的初始化函数,请参阅 http://docs.pyro.ai/en/stable/infer.autoguide.html#module-pyro.infer.autoguide.initialization
- plate(name, size=None, subsample_size=None, subsample=None, *args, **kwargs)[source]¶
围绕
pyro.plate
的包装器,允许EasyGuide自动构建板块。你应该在你的guide()
实现中使用这个,而不是pyro.plate
。
简易指南¶
- easy_guide(model)[source]¶
方便的装饰器用于创建
EasyGuide
。 以下是等价的:# Version 1. Decorate a function. @easy_guide(model) def guide(self, foo, bar): return my_guide(foo, bar) # Version 2. Create and instantiate a subclass of EasyGuide. class Guide(EasyGuide): def guide(self, foo, bar): return my_guide(foo, bar) guide = Guide(model)
注意
@easy_guide
包装器不能被序列化;要构建一个可以序列化的指南,请改为从EasyGuide
子类化。- Parameters
model (callable) – 一个Pyro模型。