Help in adding confusion matrix - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Data Science (https://python-forum.io/forum-44.html) +--- Thread: Help in adding confusion matrix (/thread-17485.html) |
Help in adding confusion matrix - Aashish - Apr-13-2019 Help....performed image classification on cifar-10 dataset but not able to add confusion matrix. Kindly help me out in adding confusion matrix in this code. from keras.models import Sequential from keras.layers import Convolution2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True classifier = Sequential() classifier.add(Convolution2D(32, 3, 3, input_shape = (32, 32, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Convolution2D(32, 3, 3, activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Convolution2D(32, 3, 3, activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Flatten()) classifier.add(Dense(output_dim = 128, activation = 'relu')) classifier.add(Dense(output_dim = 10, activation = 'sigmoid')) classifier.compile(optimizer = 'Adam', loss = 'binary_crossentropy', metrics = ['accuracy']) from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.4, horizontal_flip = True) test_datagen = ImageDataGenerator(rescale = 1./255) training_set = train_datagen.flow_from_directory('Dataset/train', target_size = (32,32), batch_size = 64, class_mode = 'categorical') test_set = test_datagen.flow_from_directory('Dataset/test', target_size = (32,32), batch_size = 64, class_mode = 'categorical') classifier.fit_generator( training_set, steps_per_epoch=1000, epochs=25, validation_data=test_set, validation_steps=2000)[icode] RE: Help in adding confusion matrix - scidam - Apr-14-2019 Something like this, but not tested: import numpy as np # move to the beginning of the file from sklearn.metrics import confusion_matrix # .... _ = classifier.predict_generator(test_set, num_of_test_samples // batch_size+1) y_pred = np.argmax(_, axis=1) print('Confusion Matrix') print(confusion_matrix(test_set.classes, y_pred)) RE: Help in adding confusion matrix - Aashish - Apr-15-2019 Its not working RE: Help in adding confusion matrix - scidam - Apr-15-2019 The main idea is to pass predicted and original class label arrays to the confusion_matrix function. Arrays should have the same length. Currently, I haven't installed keras framework and can't reproduce the problem...
RE: Help in adding confusion matrix - Aashish - Apr-15-2019 Here is the final code ...its not working ..please help import numpy as np from keras.models import Sequential from keras.layers import Convolution2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense from sklearn.metrics import confusion_matrix from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True # Initialising the CNN classifier = Sequential() # Step 1 - Convolution classifier.add(Convolution2D(32, 3, 3, input_shape = (32, 32, 3), activation = 'relu')) # Step 2 - Pooling classifier.add(MaxPooling2D(pool_size = (2, 2))) # Adding a second convolutional layer classifier.add(Convolution2D(32, 3, 3, activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Convolution2D(32, 3, 3, activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) # Step 3 - Flattening classifier.add(Flatten()) # Step 4 - Full connection classifier.add(Dense(output_dim = 128, activation = 'relu')) classifier.add(Dense(output_dim = 10, activation = 'sigmoid')) # Compiling the CNN classifier.compile(optimizer = 'Adam', loss = 'binary_crossentropy', metrics = ['accuracy']) # Part 2 - Fitting the CNN to the images from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.4, horizontal_flip = True) test_datagen = ImageDataGenerator(rescale = 1./255) training_set = train_datagen.flow_from_directory('Dataset/train', target_size = (32,32), batch_size = 64, class_mode = 'categorical') print('Before Test Set') test_set = test_datagen.flow_from_directory('Dataset/test', target_size = (32,32), batch_size = 64, class_mode = 'categorical') classifier.fit_generator( training_set, steps_per_epoch=2, epochs=1, validation_data=test_set, validation_steps=20) print('After Epoch') #Confution Matrix and Classification Report Y_pred = classifier.predict_generator(test_set, 60000) y_pred = np.argmax(Y_pred, axis=1) print('Confusion Matrix') print(confusion_matrix(test_set.classes, y_pred)) print('Classification Report') target_names = ['Airplan','Car','Birds','Cats','Deer', 'Dogs','Frog', 'Horse','Ship','Truck'] print(classification_report(test_set.classes, y_pred, target_names=target_names)) RE: Help in adding confusion matrix - scidam - Apr-15-2019 (Apr-15-2019, 03:10 PM)Aashish Wrote: Here is the final code ...its not workingWhat means it isn't working. What kind of error occurred? Do test_set.classes and y_pred variables have the same sizes?
RE: Help in adding confusion matrix - AndresGmz - Sep-11-2019 You have to put shuffle=False when you do test_datagen.flow_from_directory() so the samples don't get shuffled and have the same order as validation_generator.classes |