使用pymc3缩放概率参数估计时的尺寸错误

问题描述

我创建了一个简单的模型来模拟正弦波:

x = np.linspace(0,4,100)
A = 3
f = 2
noise = np.random.normal(scale = 0.1,size=100)
model = A * np.sin(f * x)
y = model + noise

我可以使用基本模型估算这些变量:

with pm.Model() as model: 
    sigma = pm.HalfCauchy('sigma',beta=10,testval=1.)
    A = pm.normal('Amplitude',sigma=10)
    f = pm.normal('freq',sigma=10)
    predict = A * tt.sin(f * x)
    likelihood = pm.normal('y',mu = predict,sigma=sigma,observed=y)
    step = pm.Metropolis()
    trace = pm.sample(5000,step = step)

这一切都按预期进行。 但是,我想对此进行扩展。我想使用广播,并像这样缩放变量以创建数据:

A = np.array([1,3]).reshape((2,1))
f = np.array([1,2]).reshape((2,1))
model = tt.sum(A * tt.sin(f * x),axis=0)
y = model + noise

到目前为止,太好了。现在,问题是: 如果我像这样重塑pm.Model,它将起作用:

with pm.Model as model:
   ...
   A = pm.normal('Amplitude',2,sigma=10,shape = 2)
   f = pm.normal('freq',1,shape = 2)
   predict = A[0] * tt.sin(f[0] * x) + A[1] * tt.sin(f[1] * x)
   ...

但是显然,这很难扩展。

所以我尝试了这个:

A = pm.normal('Amplitude',shape = (2,1))
f = pm.normal('freq',1))
predict = tt.sum(A * tt.sin(f * x),axis=0)

但这给了我一个尺寸错误

ValueError: Input dimension mis-match. (input[0].shape[1] = 1,input[3].shape[1] = 200)

我真的不明白为什么在数据创建过程中theano会起作用,但是在最终模型中给出了尺寸不匹配的问题。 我还用predict.tag.test_value检查了预测的形状,在所有情况下它都是相等的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)