我得到的IPython的筆記本電腦出現錯誤,說當我運行下面的代碼The kernel appears to have died. It will restart automatically.
:內核重啓運行中的IPython + PyMC
from sklearn.datasets import load_boston
import numpy as np
import pymc as pm
import pandas as pd
boston = load_boston()
features = ['INDUS', 'NOX', 'RM', 'TAX', 'PTRATIO', 'LSTAT']
df = pd.DataFrame(boston.data, columns=boston.feature_names)
X = np.array(df.ix[:, features])
y = boston.target
gamma = pm.Binomial('gamma', 1, 0.5, size=len(features))
var = pm.Lambda('var', lambda gamma=gamma: (1-gamma)*0.001 + gamma*10)
prec = pm.Lambda('prec', lambda var=var: 1.0/var)
b = pm.Normal('b', 0, prec)
int_ = pm.Normal('int_', 0, 0.01)
taue = pm.Gamma('taue', 0.1, 0.1)
mu = int_ + X[:,0]*b[0] + X[:,1]*b[1] + X[:,2]*b[2] + X[:,3]*b[3] + X[:,4]*b[4] + X[:,5]*b[5]
observed = pm.Normal('obs', mu, taue, observed=True, value=y)
M = pm.MCMC([observed, mu, int_, b, prec, var, gamma])
M.sample(10000, 500, 5)
pm.Matplot.plot(M)
如果它是相關的,我試圖重現的一個實例從此page(WinBUGS代碼,第14頁)的貝葉斯變量選擇。有時內核運行時出現故障M.sample()
但大多數時候運行時出現錯誤pm.Matplot.plot(M)
我也試過用ipython qtconsole
但結果是一樣的。在ipython
中,它會導致分段錯誤。我在ipython 2.3.0,matplotlib 1.4.0,pandas 0.14.1,scikit-learn 0.15.2,pymc 2.3.4和python 2.7.8中使用conda環境。我用ipython 3.0.0創建了一個新的環境,但是這個問題依然存在。
任何人都可以重現此問題嗎?
UPDATE:
我試過了這個例子中的EC2實例使用新的蟒蛇環境,這是我能找到的,讓錯誤的唯一例子。的代碼我需要添加的唯一片是以下內容:
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
因此,我基本上在IPython的運行此:
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
%run model
其中model
恰好含有我貼最初相同的代碼的文件。錯誤有所改變。例如:
IndexError Traceback (most recent call last)
/home/ubuntu/model.py in <module>()
16 int_ = pm.Normal('int_', 0, 0.01)
17 taue = pm.Gamma('taue', 0.1, 0.1)
---> 18 mu = int_ + X[:,0]*b[0] + X[:,1]*b[1] + X[:,2]*b[2] + X[:,3]*b[3] + X[:,4]*b[4] + X[:,5]*b[5]
19 observed = pm.Normal('obs', mu, taue, observed=True, value=y)
20 M = pm.MCMC([observed, mu, int_, b, prec, var, gamma])
IndexError: index 0 is out of bounds for axis 1 with size -4611686018427387904
*** Error in `/home/ubuntu/anaconda/envs/env3/bin/python': double free or corruption (out): 0x00000000028a0b00 ***
Aborted (core dumped)
另一種:
In [5]: %run model
[-----------------100%-----------------] 10000 of 10000 complete in 17.7 sec/home/ubuntu/anaconda/envs/env3/lib/python2.7/site-packages/numpy/core/fromnumeric.py:2499: VisibleDeprecationWarning: `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`.
VisibleDeprecationWarning)
Plotting int_
Plotting prec_0
Plotting prec_1
Plotting prec_2
Plotting prec_3
Plotting prec_4
Plotting prec_5
Plotting var_0
Plotting var_1
Plotting var_2
Plotting var_3
Plotting var_4
Plotting var_5
Plotting gamma_0
Plotting gamma_1
Plotting gamma_2
Plotting gamma_3
Plotting gamma_4
Plotting gamma_5
Plotting b_0
Plotting b_1
Plotting b_2
Plotting b_3
Plotting b_4
Plotting b_5
*** Error in `/home/ubuntu/anaconda/envs/env3/bin/python': double free or corruption (out): 0x00000000023dc940 ***
Aborted (core dumped)
再次,類似於上面的錯誤:
In [6]: %run model
[-----------------100%-----------------] 10000 of 10000 complete in 18.4 secPlotting var_0
*** Error in `/home/ubuntu/anaconda/envs/env3/bin/python': double free or corruption (out): 0x00000000035f0f10 ***
Aborted (core dumped)
這一個先發生:
In [13]: gamma = pm.Binomial('gamma', 1, 0.5, size=len(features))
Segmentation fault (core dumped)
最後:
In [22]: M.sample(10000, 500, 5)
Segmentation fault (core dumped)
有時,代碼正確運行併產生多個圖。爲了比較,我也跑了this example和this one沒有問題。
This是我在conda環境中安裝的軟件包列表。
謝謝。我會嘗試。 – 2014-10-14 19:41:58
使用Ipython 2.3.0和從主分支安裝的matplotlib有一點幫助。當我第一次運行代碼時,它可以工作。但是,如果我再次運行相同的代碼,它會在繪圖時重新啓動內核。我將再次安裝Ipython 3.0.0-dev,以查看是否有幫助。 – 2014-10-14 20:04:15
Ipython 3.0.0-dev根本沒有幫助。實際上,在重新運行代碼之後,有時會在繪圖之前重新啓動併產生與ipython 2.3.0中相同的行爲。你的環境中有其他不同的東西嗎? – 2014-10-14 20:30:45