一个以用户为中心的可微概率推理python包

brancher的Python项目详细描述


brancher:一个以用户为中心的可微概率推理python包

brancher允许使用随机变分推理设计和训练可微贝叶斯模型。Brancher基于深度学习框架Pythorch。

建立概率模型

概率模型的定义是象征性的。随机变量可以创建如下:

a=NormalVariable(loc=0.,scale=1.,name='a')b=NormalVariable(loc=0.,scale=1.,name='b')

通过使用算术和数学函数可以将随机变量连在一起:

c=NormalVariable(loc=a**2+BF.sin(b),scale=BF.exp(b),name='a')

这样,就有可能建立任意的复杂概率模型。还可以使用pytorch的所有深度学习工具来定义具有深度神经网络的概率模型。

示例:自回归建模

概率模型

概率模型的定义是象征性的:

T=20driving_noise=1.measure_noise=0.3x0=NormalVariable(0.,driving_noise,'x0')y0=NormalVariable(x0,measure_noise,'x0')b=LogitNormalVariable(0.5,1.,'b')x=[x0]y=[y0]x_names=["x0"]y_names=["y0"]fortinrange(1,T):x_names.append("x{}".format(t))y_names.append("y{}".format(t))x.append(NormalVariable(b*x[t-1],driving_noise,x_names[t]))y.append(NormalVariable(x[t],measure_noise,y_names[t]))AR_model=ProbabilisticModel(x+y)

观察数据

一旦定义了概率模型,我们就可以决定观察到哪个变量:

[yt.observe(data[yt][:,0,:])forytiny]

自回归变分分布

变分分布可以具有任意结构:

Qb=LogitNormalVariable(0.5,0.5,"b",learnable=True)logit_b_post=DeterministicVariable(0.,'logit_b_post',learnable=True)Qx=[NormalVariable(0.,1.,'x0',learnable=True)]Qx_mean=[DeterministicVariable(0.,'x0_mean',learnable=True)]fortinrange(1,T):Qx_mean.append(DeterministicVariable(0.,x_names[t]+"_mean",learnable=True))Qx.append(NormalVariable(BF.sigmoid(logit_b_post)*Qx[t-1]+Qx_mean[t],1.,x_names[t],learnable=True))variational_posterior=ProbabilisticModel([Qb]+Qx)model.set_posterior_model(variational_posterior)

推断

现在,我们指定了模型,我们可以使用随机梯度下降进行近似推理:

inference.perform_inference(AR_model,number_iterations=500,number_samples=300,optimizer="SGD",lr=0.001)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有工具可以将zephyr转换为velocity模板?   java在安卓 studio中从JSON响应中获取值   jvm如何在Java中设计一个好的permgen空间字符串?   java如何防止Rest webservice使用被盗令牌进行身份验证   java无法遍历列表JSTL   找不到用于ResourceServerTokenServices的java Bean SpringSecurityOauth2   java子字符串替换问题   爪哇玻璃鱼3。十、 以编程方式处理任意HTTPSession的终止   java如何检查输入是否为整数,并在最后添加一个命令来重新启动while循环?   引发java ical4j 1.0.6不可解析日期异常   Java等价于Delphi的DBCtrlGrid?   如果发生错误,java将查找下一个预期标记ANTLR 3   java自打开应用程序(创建锁屏)   java为什么netty有自己的ConcurrentHashMap?   Gradle任务中的java拉取和运行依赖项   继承与Java继承的混淆   java使用shell脚本中的版本执行jar   java我无法让Sqlite数据库与带有Maven的JavaFX应用程序IDE Eclipse包正确通信   java控制台日志未通过org打印。阿帕奇。hadoop。mapreduce。作业的waitForCompletion(true)方法   JAVAlang.NoSuchMethodError:apachestorm螺栓中的spring getrequest