我正在使用以下代码,但我收到一个错误
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。非常感谢任何帮助。提前致谢。
听起来这个例外是由joblib
库抛出的,它使用pickle
将模型发送到不同的进程。最简单的解决方法是通过将最后一行更改为仅使用单个核心
trace = pm.sample(10000, tune=5000, step=step, cores=1, chains=4)
没有更多细节,很难用joblib
诊断问题。创建fresh conda
environment可能会有所帮助。
colcarroll建议的解决方法对我不起作用。您看到的行为与PyMC3的PR#3140有关,您可能想要跟踪它。解决方案和/或解决方法可能取决于您运行theano的方式(有或没有GPU支持)。