PyMC3: RuntimeError в Spyder - PullRequest
       11

PyMC3: RuntimeError в Spyder

0 голосов
/ 18 января 2020

Я учусь использовать PyMC3. Однако всякий раз, когда я пытаюсь запустить симуляцию MCM C в Spyder 4.0.0, я получаю следующее RuntimeError:

RuntimeError: Канал связи между основным процессом и его порожденными дочерними элементами нарушен. В ОС Windows это обычно означает, что дочерний процесс вызвал исключение во время его порождения, прежде чем он был настроен для связи с основным процессом. Исключения, созданные дочерним процессом при порождении, не могут быть перехвачены или обработаны основным процессом, а при запуске из интерактивного ядра ноутбука I Python или jupyter исключение и трассировка дочернего процесса, похоже, теряются. Известный способ увидеть ошибку ребенка и попытаться исправить или обработать ее - запустить проблемный код c в виде пакетного сценария из командной строки системы. Исключение дочернего элемента будет напечатано в stderr командной строки, и оно должно быть видно над этой ошибкой и трассировкой. Обратите внимание, что при запуске записной книжки Jupyter, которая была вызвана из командной строки, исключение ребенка должно было быть напечатано в командной строке, в которой запущена записная книжка.

В качестве примера я использую скопируйте и вставьте из первого примера учебного руководства по началу работы с PyMC3 (https://docs.pymc.io/notebooks/getting_started.html), однако, похоже, я получаю эту ошибку независимо от используемой модели. Я получаю только ошибку при запуске функциональной строки pm.sample(). Я попытался использовать новую виртуальную среду и даже удалить и переустановить Python / Anaconda с моего компьютера. Интересно, когда я запускаю программу в Jupyter - она ​​работает. Есть идеи, что происходит?

# True parameter values
alpha, sigma = 1, 1
beta = [1, 2.5]

# Size of dataset
size = 100

# Predictor variable
X1 = np.random.randn(size)
X2 = np.random.randn(size) * 0.2

# Simulate outcome variable
Y = alpha + beta[0]*X1 + beta[1]*X2 + np.random.randn(size)*sigma

basic_model = pm.Model()
with basic_model:

    # Priors for unknown model parameters
    alpha = pm.Normal('alpha', mu=0, sigma=10)
    beta = pm.Normal('beta', mu=0, sigma=10, shape=2)
    sigma = pm.HalfNormal('sigma', sigma=1)

    # Expected value of outcome
    mu = alpha + beta[0]*X1 + beta[1]*X2

    # Likelihood (sampling distribution) of observations
    Y_obs = pm.Normal('Y_obs', mu=mu, sigma=sigma, observed=Y)

with basic_model:
    # draw 500 posterior samples
    trace = pm.sample(500)

1 Ответ

1 голос
/ 21 апреля 2020

попробуйте это:

with basic_model:
    # draw 500 posterior samples
    trace = pm.sample(500, cores=1)
...