diff --git a/Machine_Learning/src/MNIST_Classification_Using_Perceptron/perceptron_mnist_keras.py b/Machine_Learning/src/MNIST_Classification_Using_Perceptron/perceptron_mnist_keras.py new file mode 100644 index 00000000..020a2adc --- /dev/null +++ b/Machine_Learning/src/MNIST_Classification_Using_Perceptron/perceptron_mnist_keras.py @@ -0,0 +1,86 @@ +# MNIST classification using multi layered perceptron in keras + +from __future__ import print_function +import numpy as np +import matplotlib.pyplot as plt +plt.rcParams['figure.figsize'] = (7,7) # Make the figures a bit bigger + +from keras.datasets import mnist +from keras.models import Sequential +from keras.layers.core import Dense, Dropout, Activation +from keras.utils import np_utils + +nb_classes = 10 + +(X_train, Y_train), (X_test, Y_test) = mnist.load_data() +print("X_train shape", X_train.shape) +print("Y_train shape", Y_train.shape) + +for i in range(9): + plt.subplot(3,3, i+1) + plt.imshow(X_train[i], cmap='gray', interpolation='none') + plt.title("Class {}".format(Y_train[i])) +plt.show() + +print ("Formatting data") +X_train = X_train.reshape(60000, 784) +X_test = X_test.reshape(10000, 784) +X_train = X_train.astype('float32') +X_test = X_test.astype('float32') +X_train /= 225 +X_test /= 255 + +# Back up for later re-use +y_test = Y_test +y_train = Y_train + +Y_train = np_utils.to_categorical(Y_train, nb_classes) +Y_test = np_utils.to_categorical(Y_test, nb_classes) + +print("Train matrix is", X_train.shape) + +print("Building ANN") + +model = Sequential() +model.add(Dense(1024, input_shape=(784,))) +model.add(Activation('relu')) +model.add(Dropout(0.2)) +model.add(Dense(512)) +model.add(Activation('relu')) +model.add(Dropout(0.2)) +model.add(Dense(10)) +model.add(Activation('softmax')) + +model.compile(loss='categorical_crossentropy', optimizer='adam') + + +model.fit(X_train, Y_train, + batch_size=128, nb_epoch=20, + verbose=1, + validation_data=(X_test, Y_test)) + +score = model.evaluate(X_test, Y_test,) +print("Score:", score) + + +predicted_classes = model.predict_classes(X_test) + +correct_indices = np.nonzero(predicted_classes == y_test)[0] +incorrect_indices = np.nonzero(predicted_classes != y_test)[0] + +plt.figure() +for i, correct in enumerate(correct_indices[:9]): + plt.subplot(3,3,i+1) + plt.imshow(X_test[correct].reshape(28,28), cmap='gray', interpolation='none') + plt.title("Predicted {}, Class {}".format(predicted_classes[correct], y_test[correct])) + +plt.show() + +plt.figure() +for i, incorrect in enumerate(incorrect_indices[:9]): + plt.subplot(3,3,i+1) + plt.imshow(X_test[incorrect].reshape(28,28), cmap='gray', interpolation='none') + plt.title("Predicted {}, Class {}".format(predicted_classes[incorrect], y_test[incorrect])) + +plt.show() +