Pymc3 和 Theano 异常中用户定义的联合先验分布

User-defined joint prior distribution in Pymc3 & Theano exception

我正在尝试构建一个模型,该模型从 Pymc3 中的以下联合先验分布中抽取样本:

f(a,b) ~ (a+b)^(-5/2) 其中 a, b > 0

with pm.Model() as the:

    def ab_dist(value=[1.0,1.0]):
        return T.switch(any(T.le(value, 0)), -np.Inf, T.log(np.power((value[0] + value[1]), -2.5)))

    ab = pm.DensityDist('ab', ab_dist, shape=2, testval = [1,1])

    a = ab[0]
    b = ab[1]

    p = pm.Beta('p', a, b)

    trace = pm.sample(20000)

我已经按照 Pymc3's github page 上打开的问题中的示例进行操作,但仍然收到以下错误:

ValueError: length not known: Elemwise{le,no_inplace} [id A] ''   
 |ab [id B]
 |DimShuffle{x} [id C] ''   
   |TensorConstant{0} [id D]

我是 Theano 的新手,在调试方面没有任何成功。我想知道设置它的正确方法以及为什么我收到长度未知异常。我的代码如下。

我相信我找到了答案。问题似乎出在 Theano.Tensor 条件流的任何(值)部分。将其更改为 T.le(value[0], 0)|T.le(value[1], 0) 后,它似乎没有问题。

更新了以下代码:

with pm.Model() as the:
    def ab_dist(value=[1.0,1.0]):
        return T.switch(T.le(value[0], 0)|T.le(value[1], 0), -np.Inf, T.log(np.power((value[0] + value[1]), -2.5)))

    ab = pm.DensityDist('ab', ab_dist, shape=2, testval = [1,1])

    a = ab[0]
    b = ab[1]

    p = pm.Beta('p', a, b)

    trace = pm.sample(10000)