Проблема с протоколом PyMc3 на ноутбуке Jupyter - PullRequest
0 голосов
/ 08 сентября 2018

Я работаю со следующим кодом, но получаю ошибку

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 голосов
/ 13 сентября 2018

Обходной путь, предложенный colcarroll, не сработал для меня. Поведение, которое вы видите, связано с PR # 3140 PyMC3, который вы можете отследить там. Решение и / или обходной путь могут зависеть от того, как вы используете theano (с поддержкой GPU или без нее).

0 голосов
/ 12 сентября 2018

Похоже, это исключение выдается библиотекой joblib, которая использует pickle для отправки модели в разные процессы. Самое простое решение - использовать только одно ядро, изменив последнюю строку на

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

Будет трудно диагностировать проблему с помощью joblib без дополнительных подробностей. Создание свежей conda среды может помочь.

...