【发布时间】:2017-12-12 10:28:35
【问题描述】:
当我尝试在 n_job 不等于 1 的情况下使用 cross_val_score 时遇到错误。
我的系统是 Intel-i7 cpu,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 上你不应该有这个问题。我发布了一个可能的 windows 解决方案。
-
@sera 谢谢。我试过了,它可以在 Linux 上运行(我在 Virtualbox 上的 Ubuntu 上试过)。我暂时将其用作解决方案。
-
@WestYang 好的。但奇怪的是它在 pycharm 中对你不起作用。这对我来说可以。正如我告诉你的,我使用 Windows 8 和 sklearn 0.18 和 Theano 后端。也许您可以尝试重新安装 sklearn 和 keras 并再次尝试我的解决方案
标签: python python-3.x tensorflow scikit-learn keras