我有一个图像处理问题,我想我可以用来尝试学习更多关于PyMC3的知识。我花了大量的时间摆弄非线性的求解者和蛮力的方法,到目前为止,没有什么能让我开心。
我遇到的问题涉及到一种复杂的方法,可以同时注册同一场景的两幅图像,但以不同的方式记录下来。想一想如何将普通的黑白可见图像与热红外图像匹配起来。或者,从医学影像的角度来看,试着把MRI数据和X射线数据匹配起来。
为了保持简单,我可以用以下函数表示我的数据处理工作流程:
def process_and_compare(image_src, image_dst, parameters):
"""
Parameters
----------
image_src : 2D array
image_trg : 2D array
parameters : sequence of 7 scalars defining image transform
Output
------
metric : Scalar value indicating how well the transformed source image
matches up with the target image.
"""
image_src_warp = image_warper(image_src, parameters)
metric = compare_two_images(image_src_warp, image_trg)
return metric该函数以两幅图像和一个模型参数向量作为输入。一些复杂的数字运算发生在内部。完成后,返回一个标量,该标量指示模型(仅由参数向量定义)对这两幅图像的比对效果。关于源图像如何被扭曲或如何比较两幅图像的详细信息目前是黑匣子。最后,我最终想要的主要结果是与模型对应的扭曲图像,从而得到最佳匹配。但是现在,当我还在玩我的算法的时候,我想我可以通过可视化我的模型参数的后验分布来了解很多简单的测试用例图像。我最初以为PyMC会使这件事变得简单,但一旦我开始研究实际的实现细节,我就有点困惑了。
我查阅了托马斯·维茨基( Thomas )最近的PyMC3演示,并阅读了卡戴维森-皮隆的许多伟大的在线书。到目前为止,在我看来,PyMC3与PyMC2的伟大新特性(部分上)是一个时髦的模型规范语法和用于处理加速的西亚诺的自动使用。
在我到目前为止看到的示例中,数据模型现在通常是使用新的语法系统完全指定的。但在我的例子中,我有一个更复杂的函数。
以下是我的问题:
发布于 2013-11-25 22:10:53
上面指定的函数将作为一个确定性节点合并到一个PyMC模型中,在该模型中,它是基于一些(想必)随机父节点(您的参数)计算的。然后,将该节点连接到下游的一个似然(观察到的随机节点),该似然提供了用于拟合参数的信息。例如,您可能有一些参数分布来描述与process_and_compare输出的度量相对应的错误的分布。
PyMC维基有来自PyMC 2的一系列域的几个模型示例,在主分支的pymc/examples文件夹中有PyMC 3示例。
至于Theano,使用它作为PyMC依赖的动机是因为当前MCMC的最新技术涉及到使用梯度信息,因此我们需要为任意模型计算梯度的能力。我们希望最终能从它的GPU功能中获益,但现在它只是渐变。所有PyMC的对象都是版本3中的Theano张量,所以如果您在构建贝叶斯模型的背景下有其他的Theano计划,那么它很有可能会工作。例如,我们最终可能希望在PyMC中实现概率图形模型,因此Theano可能也会提供方便。
https://stackoverflow.com/questions/20200204
复制相似问题