项目描述
Funsor
Funsor是一个类似张量的函数和分布库。
看见 概率规划的泛函张量获取系统描述。
安装
使用pip安装:
Funsor支持Python 3.7+。
pip install funsor
从源安装:
git clone git@github.com:pyro-ppl/funsor.git cd funsor git checkout master pip install .
使用funsor
Funsor可以通过许多界面使用:
- Funsors可以直接用于概率计算,在标准的训练循环中使用PyTorch优化器。从这些例子开始: 离散_嗯, eeg_slds, 卡尔曼滤波器, pcfg, 传感器, slds,以及 静脉气泡栓塞.
- Funsors可以用来在Pyro中实现定制的推理算法,使用标准的定制elbo实现 pyro.infer.SVI培训。参见这些例子: 混合_嗯和 bart预测.
- funsor.pyro提供了一些兼容Pyro(和PyTorch)的分发职业,也使用了引擎盖下的funsors 公用事业在funsors和发行版之间转换。
- funsor.minipyro为Pyro概率编程语言提供了一个有限的备用后端,可以精确地执行一些ELBO计算。
设计
看见 设计文档.
这个库的目标是概括 放火狂者的延迟推理算法从离散变量到连续变量,并创造机器,使部分延迟采样兼容的普遍性。为了实现这一目标,该库选择了三种正交设计:
- 开放术语是对象。Funsors将张量接口一般化,以涵盖多变量的任意函数(“输入”),其中变量可以是整数、实数或实张量。函数求值/替换是基本操作,广义张量索引。这允许概率分布是第一类有趣的,并利用现有的张量机制,例如,我们可以将张量压缩推广到计算共轭概率模型中的解析积分。
- 支持非标准解读。Funsors支持用户定义的解释,包括,eager,lazy,混合eager+lazy,memoized(像opt_einsum的共享),以及近似解释,像积分运算的蒙特卡罗近似(例如
.sum()
在一个有趣的维度上)。 - 命名维度。换人是搞笑者最基本的操作。为了避免位置索引张量库中广播和高级索引的困难,所有的函数维都被命名。索引使用
.__call__()
方法,并且可以解释为替换(具有很好理解的语义)。Funsors被视为每维有一个代数自由变量的代数表达式。每个维度要么是协变的(一个输出),要么是逆变的(一个输入)。
使用funsor
我们可以很容易地实现Pyro风格 延迟采样,大致是:
看见 funsor/minipyro.py完整的实现。
相关项目
引用
如果您使用Funsor,请考虑引用: