Я учусь использовать 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)