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



我正在尝试构建一个模型,该模型从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的github页面上打开的一个问题的示例,但我仍然得到以下错误:

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

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

我相信我找到了答案。问题似乎出在Theano的任意(价值)部分。张量条件流。将其更改为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)

最新更新