Fauz
Fauz

Reputation: 89

AttributeError: 'NumpyArrayIterator' object has no attribute 'classes'

I get this error:

AttributeError: 'NumpyArrayIterator' object has no attribute 'classes'

I am trying to make a confusion matrix to evaluate the Neural Net I have trained. I am using ImageDatagenerator and datagen.flow functions for before the fit_generator function for training.

For predictions I use the predict_generator function on the test set. All is working fine so far. Issue arrises in the following:

test_generator.reset()
pred = model.predict_generator(test_generator, steps=len(test_generator), verbose=2)

from sklearn.metrics import classification_report, confusion_matrix, cohen_kappa_score

y_pred = np.argmax(pred, axis=1)

print('Confusion Matrix')
print(pd.DataFrame(confusion_matrix(test_generator.classes, y_pred)))

I should be seeing a confusion matrix but instead I see an error. I ran the same code with sample data before I ran on the actual dataset and that did show me the results.

Upvotes: 1

Views: 6316

Answers (1)

FirePower
FirePower

Reputation: 444

First you need to extract labels from generator and then put them in confusion_matrix function.
To extract labels use x_gen,y_gen = test_generator.next(), just pay attention that labels are one hot encoded.

Example:

test_generator.reset()
pred = model.predict_generator(test_generator, steps=len(test_generator), verbose=2)

from sklearn.metrics import classification_report, confusion_matrix, cohen_kappa_score

y_pred = np.argmax(pred, axis=1)

x_gen,y_gen = test_generator.next()
y_gen = np.argmax(y_gen, axis=1)

print('Confusion Matrix')
print(pd.DataFrame(confusion_matrix(y_gen, y_pred)))

Upvotes: 1

Related Questions