0
votes

This was the code for building the artificial neural network and the classifier. It was simple churn modelling for determining whether a customer will leave a bank or not.


#Building the ANN
import keras
from keras.models import Sequential
from keras.layers import Dense

#Initializing the ANN
 classifier = Sequential()

#Adding input layer and hidden layer iinto ANN
classifier.add(Dense(6, kernel_initializer = 'glorot_uniform', activation = 'relu', input_shape = 
(11,)))

#Adding second hidden layer
classifier.add(Dense(6, kernel_initializer = 'glorot_uniform', activation = 'relu'))

#Adding the output/final layer
classifier.add(Dense(1, kernel_initializer = 'glorot_uniform', activation = 'sigmoid'))

#Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics=('accuracy'))

#Fitting the ANN on trainig set using fit method
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

#Making prediction and analyzing the dataset
y_prediction = classifier.predict(X_test)

#Converting the probablities into definite results for model validation
y_prediction = (y_prediction > 0.5)

#Making confusion matrix for evaluating the resuts
from sklearn.metrics import confusion_matrix  
cm = confusion_matrix(y_test, y_prediction)

#Evaluating, improving and tuning the ANN
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
def build_classifier():
   classifier = Sequential()
   classifier.add(Dense(6, kernel_initializer = 'glorot_uniform', activation = 'relu', input_shape = 
   (11,)))
   classifier.add(Dense(6, kernel_initializer = 'glorot_uniform', activation = 'relu'))
   classifier.add(Dense(1, kernel_initializer = 'glorot_uniform', activation = 'sigmoid'))
   classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics=('accuracy'))
   return classifier

classifier = KerasClassifier(build_fn = build_classifier(), batch_size = 10, epochs = 100)
accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1)
 ---

And this was the error


RemoteTraceback: """ Traceback (most recent call last): File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\externals\loky\backend\queues.py", line 153, in _ feed obj = dumps(obj, reducers=reducers) File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\externals\loky\backend\reduction.py", line 271, in dumps dump(obj, buf, reducers=reducers, protocol=protocol) File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\externals\loky\backend\reduction.py", line 264, in dump _LokyPickler(file, reducers=reducers, protocol=protocol).dump(obj) File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\externals\cloudpickle\cloudpickle_fast.py", line 563, in dump return Pickler.dump(self, obj) TypeError: cannot pickle 'weakref' object """

The above exception was the direct cause of the following exception:

Traceback (most recent call last):

File "C:\Users\BSNL\Documents\Deep_Learning_A_Z\Volume 1 - Supervised Deep Learning\Part 1 - Artificial Neural Networks (ANN)\Section 4 - Building an ANN\ANN.py", line 78, in accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1)

File "C:\Users\BSNL\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 72, in inner_f return f(**kwargs)

File "C:\Users\BSNL\anaconda3\lib\site-packages\sklearn\model_selection_validation.py", line 401, in cross_val_score cv_results = cross_validate(estimator=estimator, X=X, y=y, groups=groups,

File "C:\Users\BSNL\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 72, in inner_f return f(**kwargs)

File "C:\Users\BSNL\anaconda3\lib\site-packages\sklearn\model_selection_validation.py", line 242, in cross_validate scores = parallel(

File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\parallel.py", line 1061, in call self.retrieve()

File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib\parallel.py", line 940, in retrieve self._output.extend(job.get(timeout=self.timeout))

File "C:\Users\BSNL\anaconda3\lib\site-packages\joblib_parallel_backends.py", line 542, in wrap_future_result return future.result(timeout=timeout)

File "C:\Users\BSNL\anaconda3\lib\concurrent\futures_base.py", line 432, in result return self.__get_result()

File "C:\Users\BSNL\anaconda3\lib\concurrent\futures_base.py", line 388, in __get_result raise self._exception

PicklingError: Could not pickle the task to send it to the workers.

1
did u try with n_jobs = 1 in cross_val_score ?Marco Cerliani
Doesn't that mean it would use no processor for the function. Although I tried it, but it showed this warning C:\Users\BSNL\anaconda3\lib\site-packages\sklearn\model_selection_validation.py:548: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan.rocky kumar
use error_score=‘raise’ in cross_val_score (mantaining n_jobs = 1) to see what's happeningMarco Cerliani
well, now it shows this - File "C:\Users\BSNL\anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 3047, in _split_out_first_arg raise ValueError( ValueError: The first argument to Layer.call must always be passed.rocky kumar
Thank you @MarcoCerliani. Putting n = 1 worked after correcting my mistake in KerasClassifier function's build_fn argument.rocky kumar

1 Answers

0
votes

putting n_jobs = 1 worked because I had also did a mistake of putting brackets in Kerasclassifier's build_fn argument i.e. use build_classifier instead of build_classifier().