问题描述
我创建了一个简单的模型来模拟正弦波:
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 (将#修改为@)