Jupyter笔记本电脑上的PyMc3协议问题

时间:2018-09-08 09:41:52

标签: python-3.x jupyter-notebook pymc3

我正在使用以下代码,但出现错误

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。任何帮助深表感谢。预先感谢。

2 个答案:

答案 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支持)。