在jupyter笔记本上使用PyMc3的协议问题

问题描述 投票:0回答:2

我正在使用以下代码,但我收到一个错误

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。非常感谢任何帮助。提前致谢。

python-3.x jupyter-notebook pymc3
2个回答
1
投票

听起来这个例外是由joblib库抛出的,它使用pickle将模型发送到不同的进程。最简单的解决方法是通过将最后一行更改为仅使用单个核心

trace = pm.sample(10000, tune=5000, step=step, cores=1, chains=4)

没有更多细节,很难用joblib诊断问题。创建fresh conda environment可能会有所帮助。


1
投票

colcarroll建议的解决方法对我不起作用。您看到的行为与PyMC3的PR#3140有关,您可能想要跟踪它。解决方案和/或解决方法可能取决于您运行theano的方式(有或没有GPU支持)。

© www.soinside.com 2019 - 2024. All rights reserved.