我不确定这是PyMC3问题还是Theano问题。我已经使用PyMC2很长一段时间来适应超新星数据的宇宙学。这需要一些凌乱的积分(见http://arxiv.org/abs/astroph/9905116)如何在PyMC3中建立需要外部封装的模型?
所以我在python中使用一个名为Cosmolopy的包来完成集成和其他一些便利功能。然而,这对PyMC2来说工作得很好,依靠PyMC3中的theano,我无法弄清楚是否有使用Cosmolopy的方法。
这里是我当前的因为Cosmolopy预计float型的omega_matter但收到theano.TensorVariable,而不是如何在PyMC3建立一个模型
import numpy as np
import pymc as pm
import cosmolopy as cp
# generate some redshifts
nSNe = 100
z = np.random.uniform(low=0.0, high=1.0, size=nSNe)
# set cosmology and simulate some distance moduli and errors
cosmo = cp.fidcosmo
muSN = cp.magnitudes.distance_modulus(z, **cosmo) + np.random.normal(loc=0, scale=0.15, size=nSNe)
muSN_err = np.random.uniform(low=0.1, high=0.3, size=nSNe)
# pymc model
with pm.Model() as model:
# omega matter is the free parameter in this simple example
omega_matter = pm.Uniform('omega_matter', lower=0.0, upper=1.0)
# the cosmology as a function of omega_matter
cosmo['omega_M_0'] = omega_matter
cosmo['omega_lambda_0'] = 1.0 - omega_matter
mu_fit = cp.magnitudes.distance_modulus(z, **cosmo)
# what should be fit by the MCMC
snr = pm.Normal('snr', mu = mu_fit, sd = muSN_err, observed = muSN)
此代码崩溃理解一些示例代码。
所以现在的问题是双重的:
我只思念语法与PyMC3的东西,让我这样做(可能是因为我仍然在某种程度上停留在PyMC2模型建设)?
如果不是1,那么我是否需要找到一种方法来完成theano中的积分?
我试过TensorVariable.eval(),它只是返回eval()方法,但没有评估。 –