Pymc3& P中用户定义的联合先验分布。 Theano例外

时间:2016-11-16 21:32:41

标签: theano pymc3

我试图建立一个模型,该模型来自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的新手,并且没有在调试方面取得任何成功。我想知道正确的设置方法,以及我收到长度未知异常的原因。我的代码如下。

1 个答案:

答案 0 :(得分:0)

我相信我找到了答案。似乎问题可能出在Theano.Tensor条件流的任何(值)部分。将其更改为T.le(值[0],0)| T.le(值[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)