Numpy 为pymc3声明无变量
我在使用pymc3复制pymc2代码时遇到问题 我相信这是因为pymc3使用的theano类型变量与我使用的numpy操作不兼容。所以我使用@theano.decorator: 我有这个功能:Numpy 为pymc3声明无变量,numpy,theano,pymc,pymc3,Numpy,Theano,Pymc,Pymc3,我在使用pymc3复制pymc2代码时遇到问题 我相信这是因为pymc3使用的theano类型变量与我使用的numpy操作不兼容。所以我使用@theano.decorator: 我有这个功能: with pymc3.Model() as model: z_stars = pymc3.Uniform('z_star', self.z_min_ssp_limit, self.z_max_ssp_limit) Av_stars = pymc3.Un
with pymc3.Model() as model:
z_stars = pymc3.Uniform('z_star', self.z_min_ssp_limit, self.z_max_ssp_limit)
Av_stars = pymc3.Uniform('Av_star', 0.0, 5.00)
sigma_stars = pymc3.Uniform('sigma_star',0.0, 5.0)
#Fit observational wavelength
ssp_fit_output = self.ssp_fit_theano(z_stars, Av_stars, sigma_stars,
self.obj_data['obs_wave_resam'],
self.obj_data['obs_flux_norm_masked'],
self.obj_data['basesWave_resam'],
self.obj_data['bases_flux_norm'],
self.obj_data['int_mask'],
self.obj_data['normFlux_obs'])
#Define likelihood
like = pymc.Normal('ChiSq', mu=ssp_fit_output,
sd=self.obj_data['obs_fluxEr_norm'],
observed=self.obj_data['obs_fluxEr_norm'])
#Run the sampler
trace = pymc3.sample(iterations, step=step, start=start_conditions, trace=db)
其中:
@theano.compile.ops.as_op(itypes=[t.dscalar,t.dscalar,t.dscalar,t.dvector,
t.dvector,t.dvector,t.dvector,t.dvector,t.dscalar],
otypes=[t.dvector])
def ssp_fit_theano(self, input_z, input_sigma, input_Av, obs_wave, obs_flux_masked,
rest_wave, bases_flux, int_mask, obsFlux_mean):
...
...
前三个变量是标量(来自pymc3均匀分布)。这个
剩下的变量是numpy数组,最后一个是float。然而,我是
获取此“'numpy.ndarray'对象没有属性'type'”错误:
文件“/home/user/anaconda/lib/python2.7/site packages/theano/gof/op.py”,第615行,在调用中__
节点=self.make_节点(*输入,**kwargs)
文件“/home/user/anaconda/lib/python2.7/site packages/theano/gof/op.py”,第963行,在make_节点中
如果不是全部(inp.type==it for inp,它在zip中(inputs,self.itypes)):
文件“/home/user/anaconda/lib/python2.7/site packages/theano/gof/op.py”,第963行,在
如果不是全部(inp.type==it for inp,它在zip中(inputs,self.itypes)):
AttributeError:'numpy.ndarray'对象没有属性'type'
请注意,任何正确的建议都会受到欢迎。当我从pymc2转到pymc3时,我有一大堆浪费时间的站点。我想问题是,医生很糟糕。我怀疑他们忽略了文档,因为代码还在不断发展。3评论/建议:
- 我希望您能在这里使用“@theano.compile.ops.as_op”或在这里找到一些帮助
- “@theano.compile.ops.as_op”的缺点是隐式排除了与函数梯度相关的任何分析。为了获得梯度,我认为你需要用一种更复杂的方式来定义你的函数
- 警告:目前,如果您想在Windows下分发代码,使用theano似乎是一个问题源。你看,但我不确定这是个人的笨拙还是一个真正的问题。就我个人而言,我不得不放弃theano来分发我的代码
ssp_fit_theano
不应该是self.ssp_fit_theano(z_星、sigma_星、Av_星等)
?(与ssp\u fit\u theano
的呼叫签名相比,第二个和第三个参数似乎不合适)。非常感谢您的回复(以及您的理解)。我一直了解到,这个问题比这复杂得多。使用pymc2,我一直设法将其变量与第三方python库结合在一起,没有任何问题。然而,现在还不是那么直截了当。当然,他们必须有自己的理由,但是文档中应该有更多的例子。
File "/home/user/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 615, in __call__
node = self.make_node(*inputs, **kwargs)
File "/home/user/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 963, in make_node
if not all(inp.type == it for inp, it in zip(inputs, self.itypes)):
File "/home/user/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 963, in <genexpr>
if not all(inp.type == it for inp, it in zip(inputs, self.itypes)):
AttributeError: 'numpy.ndarray' object has no attribute 'type'