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