Python 用pymc3进行概率参数估计时的维数误差

Python 用pymc3进行概率参数估计时的维数误差,python,theano,pymc3,Python,Theano,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.

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

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', 0, sigma=10)
    f = pm.Normal('freq', 0, 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, sigma=10, shape = 2)
   predict = A[0] * tt.sin(f[0] * x) + A[1] * tt.sin(f[1] * x)
   ...
但很明显,这并不容易扩展

所以我试了一下:

A = pm.Normal('Amplitude', 2, sigma=10, shape = (2,1))
f = pm.Normal('freq', 1, sigma=10, shape = (2,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
检查了predict的形状,它在所有情况下都是相等的