,當我試圖用cross_val_score與n_job不等於1cross_val_score在Windows10,錯誤與並行計算
我的系統,我遇到了一個錯誤是Intel的i7處理器,Windows10,python3.6 ,Spyder。
下面是我的代碼:
from numpy.random import randn
import pandas as pd
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from keras.models import Sequential
from keras.layers import Dense
# build a data set
dataset = pd.DataFrame(randn(100, 2), columns='X1 X2'.split())
dataset["Y"]=dataset["X1"]+dataset["X2"]
# seperate X and y
X = dataset.iloc[:, 0:2].values
Y = dataset.iloc[:, 2].values
# define classifier
def build_classifier():
classifier = Sequential()
classifier.add(Dense(units = 2, kernel_initializer = 'uniform', activation = 'relu', input_dim = 2))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 1, epochs = 4)
class testnjob():
def run():
accuracies = cross_val_score(estimator = classifier, X = X, y = Y, cv = 5, n_jobs = -1)
return(accuracies)
if __name__ == '__main__':
accuracies = testnjob.run()
錯誤消息是:
ImportError: [joblib] Attempting to do parallel computing without protecting
your import on a system that does not support forking. To use parallel-
computing in a script, you must protect your main loop using
"if __name__ == '__main__'". Please see the joblib documentation on Parallel
for more information
的代碼工作,如果我設置n_jobs = 1。
有沒有辦法解決這個問題?
補充:代碼適用於Linux虛擬機。我嘗試在Virtualbox,anaconda(python 3.6)+ spyder(Tensorflow後端)上使用Ubuntu。
補充:我試過在pycharm相同的代碼,不同的錯誤消息出現了:
AttributeError: Can't get attribute 'build_classifier' on
<module '__main__' (built-in)>
謝謝!
你能爲了儘可能讀者能夠重現你的錯誤提供了一個小型的代碼樣本? –
在Linux上,你不應該有這個問題。我發佈了一個可能的解決方案。 – sera
@sera謝謝。我試過了,它可以在Linux上運行(我在Virtualbox上的Ubuntu上嘗試過)。我現在將此用作解決方案。 –