我正在尝试使用pymc3
对我的系统进行建模:n
随机变量,未知分布,与函数z
的某些观测数据findz
相关。我已经使用theano编写了函数findz
,但是我不确定如何将随机指标输入到我的theano代码中。这就是我的尝试:
w = T.dscalar('w')
I = T.dvector('i')
R = T.dvector('r')
L = I.size-1
Cn = np.array([1,-1])*T.sqrt(w/R[-1])))
result, updates = theano.scan(fn=step, \
sequences=[dict(input=I[::-1],taps=[-1,0]),R[::-1]], n_steps=L,\
outputs_info=Cn, non_sequences = w)
final_result = result[-1]
find_z = theano.function(inputs=[I,R,w],outputs=final_result,updates=updates)
interfaces = np.logspace(2,3.9,9)[3:]
with pm.Model() as model:
list_of_dist = [pm.Uniform('res'+str(i),1,100,testval=50) for i in range(len(interfaces))]
z_hat = pm.Deterministic('z_hat',find_z(interfaces,list_of_dist,10))
z_like = pm.Normal('z_like',mu=z_hat,sd=z_err,observed=z)
这会在z_hat行返回错误:
ValueError :('带名称的theano函数的错误输入参数 " scan_pm_v.py:60"在索引1(从0开始)','设置数组元素 用序列。')
我可以将list_of_dist
设置为numpy对象,然后给出错误
AttributeError :('带名字的theano函数的错误输入参数 " scan_pm_v.py:60"在索引1(从0开始)',"'浮动'对象没有 属性' dtype'")
在同一条线上。我还尝试通过添加以下行来输入aano张量:
list_of_dist = T.stacklists(list_of_dist)
然后返回错误:
TypeError :('带名称的theano函数的错误输入参数 " scan_pm_v.py:60"在索引1(从0开始)','预期类似于数组 对象,但找到了一个变量:也许你正试图调用一个函数 在(可能是共享的)变量而不是数字数组?')