cross_val_score en Windows10, error con computación paralela

Encontré un error cuando intenté usar cross_val_score con n_job no es igual a 1.

Mi sistema era Intel-i7 cpu, Windows10, python3.6, Spyder.

A continuación se muestra mi código:

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() 

El mensaje de error fue:

 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 

El código funcionó si configuro n_jobs = 1 .

¿Hay alguna manera de resolver este problema?

Agregado: El código funciona en la máquina virtual de linux. Probé con Ubuntu en Virtualbox, anaconda (python 3.6) + spyder (backend Tensorflow).

Agregado: probé el mismo código en pycharm, apareció un mensaje de error diferente:

 AttributeError: Can't get attribute 'build_classifier' on  

¡Gracias!

Puedes probar esto ya que usas spyder, debería funcionar bien:

Código

 import... Class Test(object): def __init__(self): accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1) ###code here ###code here if __name__ == '__main__': Test() 

Espero que esto ayude.

Problema similar con spyder y n_jobs resuelto por mi publicación aquí, enlace

EDITAR

Modifiqué la última parte de su código y funciona bien en Windows 8.1.

Además, utilizo: Theano backend.

Parte cambiada:

 from numpy.random import randn ... ... classifier = KerasClassifier(build_fn = build_classifier, batch_size = 1, epochs = 4) #################################################################### #changed part from here class run(): def __init__(self): cross_val_score(estimator = classifier, X = X, y = Y, cv = 5, n_jobs = -1) if __name__ == '__main__': run() 

Captura de pantalla:

introduzca la descripción de la imagen aquí