2

我有一个图像处理问题,我想我可以用它来尝试更多地了解 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 Wiecki 最近的PyMC3 演示文稿,还阅读了Cam Davidson-Pilon的大部分优秀在线书籍。到目前为止,在我看来,PyMC3 与 PyMC2 相比的伟大新特性(部分)是一种时髦的模型规范语法和自动使用Theano来加速处理。

在我到目前为止看到的示例中,看起来数据模型现在通常使用新的语法系统完全指定。但就我而言,我有这个更复杂的功能。

以下是我的问题:

  1. 有人可以指出一个现有的 PyMC 示例,该示例涉及作为用户函数实现的黑盒数据模型吗?PyMC2 或 PyMC3 都很棒!

  2. 一旦我弄清楚如何使用 PyMC3 进行这项工作,我是否能够在我的 Python 数据模型函数中实现 Theano 的优势?

4

1 回答 1

2

您在上面指定的函数将作为确定性节点合并到 PyMC 模型中,它是根据一些(可能)随机父节点(您的参数)计算的。然后,该节点将连接到下游连接到提供拟合参数信息的可能性(观察到的随机节点)。例如,您可能有一些参数分布,它描述了与度量输出相对应的误差分布process_and_compare

PyMC wiki有来自 PyMC 2 的一系列域的几个模型示例。主分支的文件夹中有 PyMC 3示例pymc/examples

就 Theano 而言,将其用作 PyMC 依赖项的动机是因为 MCMC 中当前最先进的技术涉及使用梯度信息,因此我们需要能够为任意模型计算梯度。我们希望最终能从它的 GPU 功能中受益,但目前它只是用于渐变。PyMC 的所有对象都是版本 3 中的 Theano 张量,因此,如果您在构建贝叶斯模型的背景下对 Theano 有其他计划,那么它很有可能可以工作。例如,我们最终可能希望在 PyMC 中实现概率图形模型,因此 Theano 可能也会促进这一点。

于 2013-11-25T22:10:53.057 回答