我正在使用以下代码,但出现错误
import pymc3 as pm
import theano.tensor as tt
with pm.Model() as model:
alpha = 1.0/count_data.mean() # Recall count_data is the
# variable that holds our txt counts
lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)
tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)
with model:
idx = np.arange(n_count_data) # Index
lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)
with model:
observation = pm.Poisson("obs", lambda_, observed=count_data)
with model:
step = pm.Metropolis()
trace = pm.sample(10000, tune=5000,step=step)
但是我得到了错误
ValueError:必须使用协议4或更高版本来复制此对象;因为 getnewargs_ex 返回了关键字参数。
我有Windows-10,python-3.5.6, pymc3- 3.5,ipython-6.5.0。任何帮助深表感谢。预先感谢。
答案 0 :(得分:1)
听起来joblib
库引发了此异常,该库使用pickle
将模型发送到不同的进程。最简单的解决方法是通过将最后一行更改为
trace = pm.sample(10000, tune=5000, step=step, cores=1, chains=4)
如果没有更多详细信息,将很难用joblib
诊断问题。创建fresh conda
environment可能会有所帮助。
答案 1 :(得分:1)
colcarroll建议的解决方法对我不起作用。您看到的行为与PyMC3的PR#3140有关,您可能希望在此处进行跟踪。解决方案和/或解决方法可能取决于您如何运行theano(带有或不带有GPU支持)。