├── result.png ├── tf-cnn-model.h5 ├── assets ├── images │ ├── 0a.jpg │ ├── 0b.jpg │ ├── 0c.jpg │ ├── 0d.jpg │ ├── 0e.jpg │ ├── 1a.jpg │ ├── 1b.jpg │ ├── 1c.jpg │ ├── 1d.jpg │ ├── 1e.jpg │ ├── 2a.jpg │ ├── 2b.jpg │ ├── 2c.jpg │ ├── 2d.jpg │ ├── 2e.jpg │ ├── 3a.jpg │ ├── 3b.jpg │ ├── 3c.jpg │ ├── 3d.jpg │ ├── 3e.jpg │ ├── 4a.jpg │ ├── 4b.jpg │ ├── 4c.jpg │ ├── 4d.jpg │ ├── 4e.jpg │ ├── 5a.jpg │ ├── 5b.jpg │ ├── 5c.jpg │ ├── 5d.jpg │ ├── 5e.jpg │ ├── 6a.jpg │ ├── 6b.jpg │ ├── 6c.jpg │ ├── 6d.jpg │ ├── 6e.jpg │ ├── 7a.jpg │ ├── 7b.jpg │ ├── 7c.jpg │ ├── 7d.jpg │ ├── 7e.jpg │ ├── 8a.jpg │ ├── 8b.jpg │ ├── 8c.jpg │ ├── 8d.jpg │ ├── 8e.jpg │ ├── 9a.jpg │ ├── 9b.jpg │ ├── 9c.jpg │ ├── 9d.jpg │ └── 9e.jpg └── model │ └── model_summary.png ├── requirements.txt ├── .gitignore ├── load_model.py ├── LICENSE ├── README.md ├── tf_cnn.py └── tf_cnn.ipynb /result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/result.png -------------------------------------------------------------------------------- /tf-cnn-model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/tf-cnn-model.h5 -------------------------------------------------------------------------------- /assets/images/0a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/0a.jpg -------------------------------------------------------------------------------- /assets/images/0b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/0b.jpg -------------------------------------------------------------------------------- /assets/images/0c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/0c.jpg -------------------------------------------------------------------------------- /assets/images/0d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/0d.jpg -------------------------------------------------------------------------------- /assets/images/0e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/0e.jpg -------------------------------------------------------------------------------- /assets/images/1a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/1a.jpg -------------------------------------------------------------------------------- /assets/images/1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/1b.jpg -------------------------------------------------------------------------------- /assets/images/1c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/1c.jpg -------------------------------------------------------------------------------- /assets/images/1d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/1d.jpg -------------------------------------------------------------------------------- /assets/images/1e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/1e.jpg -------------------------------------------------------------------------------- /assets/images/2a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/2a.jpg -------------------------------------------------------------------------------- /assets/images/2b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/2b.jpg -------------------------------------------------------------------------------- /assets/images/2c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/2c.jpg -------------------------------------------------------------------------------- /assets/images/2d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/2d.jpg -------------------------------------------------------------------------------- /assets/images/2e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/2e.jpg -------------------------------------------------------------------------------- /assets/images/3a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/3a.jpg -------------------------------------------------------------------------------- /assets/images/3b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/3b.jpg -------------------------------------------------------------------------------- /assets/images/3c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/3c.jpg -------------------------------------------------------------------------------- /assets/images/3d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/3d.jpg -------------------------------------------------------------------------------- /assets/images/3e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/3e.jpg -------------------------------------------------------------------------------- /assets/images/4a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/4a.jpg -------------------------------------------------------------------------------- /assets/images/4b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/4b.jpg -------------------------------------------------------------------------------- /assets/images/4c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/4c.jpg -------------------------------------------------------------------------------- /assets/images/4d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/4d.jpg -------------------------------------------------------------------------------- /assets/images/4e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/4e.jpg -------------------------------------------------------------------------------- /assets/images/5a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/5a.jpg -------------------------------------------------------------------------------- /assets/images/5b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/5b.jpg -------------------------------------------------------------------------------- /assets/images/5c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/5c.jpg -------------------------------------------------------------------------------- /assets/images/5d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/5d.jpg -------------------------------------------------------------------------------- /assets/images/5e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/5e.jpg -------------------------------------------------------------------------------- /assets/images/6a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/6a.jpg -------------------------------------------------------------------------------- /assets/images/6b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/6b.jpg -------------------------------------------------------------------------------- /assets/images/6c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/6c.jpg -------------------------------------------------------------------------------- /assets/images/6d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/6d.jpg -------------------------------------------------------------------------------- /assets/images/6e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/6e.jpg -------------------------------------------------------------------------------- /assets/images/7a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/7a.jpg -------------------------------------------------------------------------------- /assets/images/7b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/7b.jpg -------------------------------------------------------------------------------- /assets/images/7c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/7c.jpg -------------------------------------------------------------------------------- /assets/images/7d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/7d.jpg -------------------------------------------------------------------------------- /assets/images/7e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/7e.jpg -------------------------------------------------------------------------------- /assets/images/8a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/8a.jpg -------------------------------------------------------------------------------- /assets/images/8b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/8b.jpg -------------------------------------------------------------------------------- /assets/images/8c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/8c.jpg -------------------------------------------------------------------------------- /assets/images/8d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/8d.jpg -------------------------------------------------------------------------------- /assets/images/8e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/8e.jpg -------------------------------------------------------------------------------- /assets/images/9a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/9a.jpg -------------------------------------------------------------------------------- /assets/images/9b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/9b.jpg -------------------------------------------------------------------------------- /assets/images/9c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/9c.jpg -------------------------------------------------------------------------------- /assets/images/9d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/9d.jpg -------------------------------------------------------------------------------- /assets/images/9e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/images/9e.jpg -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | h5py==2.10.0 2 | matplotlib==3.3.2 3 | numpy==1.18.5 4 | tensorflow==2.3.1 5 | opencv-python==4.4.0.44 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | Handwritten-Digit-Recongnition-master/ 3 | cnn1.py 4 | cnn2.py 5 | cnn3.py 6 | cnn_notebook.ipynb 7 | -------------------------------------------------------------------------------- /assets/model/model_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashjhawar/handwritten-digit-recognition/HEAD/assets/model/model_summary.png -------------------------------------------------------------------------------- /load_model.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import sys 3 | import numpy as np 4 | from tensorflow.keras import models 5 | 6 | MODEL_PATH = "tf-cnn-model.h5" 7 | 8 | def predict_digit(image_path): 9 | 10 | # load model 11 | model = models.load_model(MODEL_PATH) 12 | print("[INFO] Loaded model from disk.") 13 | 14 | image = cv2.imread(image_path, 0) 15 | image1 = cv2.resize(image, (28,28)) # For cv2.imshow: dimensions should be 28x28 16 | image2 = image1.reshape(1,28,28,1) 17 | 18 | cv2.imshow('digit', image1 ) 19 | pred = np.argmax(model.predict(image2), axis=-1) 20 | return pred[0] 21 | 22 | def main(image_path): 23 | predicted_digit = predict_digit(image_path) 24 | print('Predicted Digit: {}'.format(predicted_digit)) 25 | 26 | if __name__ == "__main__": 27 | try: 28 | main(image_path = sys.argv[1]) 29 | except: 30 | print('[ERROR]: Image not found') 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Aakash Jhawar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MNIST Handwritten Digit Classifier 2 | ================================== 3 | 4 | An implementation of multilayer neural network using keras with an accuracy of 98.314% and using tensorflow with an accuracy over 99%. 5 | 6 | ### About MNIST dataset: 7 | The MNIST database (Modified National Institute of Standards and Technology database) of handwritten digits consists of a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. Additionally, the black and white images from NIST were size-normalized and centered to fit into a 28x28 pixel bounding box and anti-aliased, which introduced grayscale levels. 8 | 9 | 10 | ### Structure of Neural Network: 11 | A neural network is made up by stacking layers of neurons, and is defined by the weights 12 | of connections and biases of neurons. Activations are a result dependent on a certain input. 13 | 14 | This structure is known as a feedforward architecture because the connections in the network flow forward from the input layer to the output layer without any feedback loops. In this figure: 15 | 16 | * The input layer contains the predictors. 17 | * The hidden layer contains unobservable nodes, or units. The value of each hidden unit is some function of the predictors; the exact form of the function depends in part upon the network type and in part upon user-controllable specifications. 18 | * The output layer contains the responses. Since the history of default is a categorical variable with two categories, it is recoded as two indicator variables. Each output unit is some function of the hidden units. Again, the exact form of the function depends in part on the network type and in part on user-controllable specifications. 19 | ![Small Labelled Neural Network](http://i.imgur.com/HdfentB.png) 20 | 21 | 22 | #### Summary of Sequential model 23 | 24 | 25 | ![Summary](https://github.com/aakashjhawar/handwritten-digit-recognition/blob/master/assets/model/model_summary.png) 26 | 27 | ## Getting Started 28 | 29 | How to use 30 | ``` 31 | git clone https://github.com/aakashjhawar/Handwritten-Digit-Recognition.git 32 | cd Handwritten-Digit-Recognition 33 | pip3 install -r requirements.txt 34 | python3 tf_cnn.py 35 | ``` 36 | * You can also run the `load_model.py` to skip the training of NN. It will load the pre saved model from `model.json` and `model.h5` files. 37 | ``` 38 | python3 load_model.py 39 | ``` 40 | For example 41 | ``` 42 | python3 load_model.py assets/images/1a.jpg 43 | ``` 44 | 45 | ## Prerequisites 46 | 47 | - Python 3.5 48 | - OpenCV 49 | ``` 50 | sudo apt-get install python-opencv 51 | ``` 52 | ## Result: 53 | Following image is the prediction of the model. 54 | ![Result of CNN model](https://github.com/aakashjhawar/Handwritten-Digit-Recognition/blob/master/result.png) 55 | 56 | -------------------------------------------------------------------------------- /tf_cnn.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """tf_cnn.ipynb 3 | 4 | Automatically generated by Colaboratory. 5 | 6 | Original file is located at 7 | https://colab.research.google.com/drive/1HTJ_og2m-AlKH3nFJDdhdQoIDN1l8GUo 8 | """ 9 | 10 | import matplotlib.pyplot as plt 11 | import numpy as np 12 | import os 13 | import PIL 14 | import tensorflow as tf 15 | 16 | from tensorflow import keras 17 | from tensorflow.keras import layers, datasets, models 18 | from tensorflow.keras.models import Sequential 19 | 20 | """## Prepare Dataset""" 21 | 22 | (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() 23 | 24 | train_images = train_images.reshape((60000, 28, 28, 1)) 25 | test_images = test_images.reshape((10000, 28, 28, 1)) 26 | 27 | # Normalize pixel values to be between 0 and 1 28 | train_images, test_images = train_images / 255.0, test_images / 255.0 29 | 30 | print("TRAIN IMAGES: ", train_images.shape) 31 | print("TEST IMAGES: ", test_images.shape) 32 | 33 | """## Create Model""" 34 | 35 | num_classes = 10 36 | img_height = 28 37 | img_width = 28 38 | 39 | model = Sequential([ 40 | layers.Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)), 41 | layers.Conv2D(32, 3, padding='same', activation='relu'), 42 | layers.MaxPooling2D(), 43 | layers.Conv2D(16, 3, padding='same', activation='relu'), 44 | layers.MaxPooling2D(), 45 | layers.Conv2D(64, 3, padding='same', activation='relu'), 46 | layers.MaxPooling2D(), 47 | layers.Flatten(), 48 | layers.Dense(128, activation='relu'), 49 | layers.Dense(10, activation='sigmoid') 50 | ]) 51 | 52 | """## Compile Model""" 53 | 54 | model.compile(optimizer='adam', 55 | loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 56 | metrics=['accuracy']) 57 | 58 | model.summary() 59 | 60 | """## Train Model""" 61 | 62 | epochs = 10 63 | history = model.fit( 64 | train_images, 65 | train_labels, 66 | epochs = epochs 67 | ) 68 | 69 | """## Visualize Training Results""" 70 | 71 | acc = history.history['accuracy'] 72 | loss=history.history['loss'] 73 | 74 | epochs_range = range(epochs) 75 | 76 | plt.figure(figsize=(8, 8)) 77 | plt.plot(epochs_range, acc, label='Training Accuracy') 78 | plt.plot(epochs_range, loss, label='Loss') 79 | plt.legend(loc='lower right') 80 | plt.title('Training Accuracy and Loss') 81 | 82 | """## Test Image""" 83 | 84 | image = (train_images[1]).reshape(1,28,28,1) 85 | model_pred = model.predict_classes(image, verbose=0) 86 | plt.imshow(image.reshape(28,28)) 87 | print('Prediction of model: {}'.format(model_pred[0])) 88 | 89 | image = (train_images[2]).reshape(1,28,28,1) 90 | model_pred = model.predict_classes(image, verbose=0) 91 | plt.imshow(image.reshape(28,28)) 92 | print('Prediction of model: {}'.format(model_pred[0])) 93 | 94 | """## Test Multiple Image""" 95 | 96 | images = test_images[1:5] 97 | images = images.reshape(images.shape[0], 28, 28) 98 | print ("Test images array shape: {}".format(images.shape)) 99 | 100 | 101 | for i, test_image in enumerate(images, start=1): 102 | 103 | org_image = test_image 104 | test_image = test_image.reshape(1,28,28,1) 105 | prediction = model.predict_classes(test_image, verbose=0) 106 | 107 | print ("Predicted digit: {}".format(prediction[0])) 108 | plt.subplot(220+i) 109 | plt.axis('off') 110 | plt.title("Predicted digit: {}".format(prediction[0])) 111 | plt.imshow(org_image, cmap=plt.get_cmap('gray')) 112 | 113 | plt.show() 114 | 115 | """## Save Model""" 116 | 117 | model.save("tf-cnn-model.h5") 118 | 119 | """## Load Model""" 120 | 121 | loaded_model = models.load_model("tf-cnn-model.h5") 122 | 123 | image = (train_images[2]).reshape(1,28,28,1) 124 | model_pred = loaded_model.predict_classes(image, verbose=0) 125 | plt.imshow(image.reshape(28,28)) 126 | print('Prediction of model: {}'.format(model_pred[0])) 127 | 128 | -------------------------------------------------------------------------------- /tf_cnn.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "kernelspec": { 6 | "display_name": "Python 3", 7 | "language": "python", 8 | "name": "python3" 9 | }, 10 | "language_info": { 11 | "codemirror_mode": { 12 | "name": "ipython", 13 | "version": 3 14 | }, 15 | "file_extension": ".py", 16 | "mimetype": "text/x-python", 17 | "name": "python", 18 | "nbconvert_exporter": "python", 19 | "pygments_lexer": "ipython3", 20 | "version": "3.8.5" 21 | }, 22 | "colab": { 23 | "name": "tf_cnn.ipynb", 24 | "provenance": [], 25 | "collapsed_sections": [], 26 | "toc_visible": true 27 | }, 28 | "accelerator": "GPU" 29 | }, 30 | "cells": [ 31 | { 32 | "cell_type": "code", 33 | "metadata": { 34 | "id": "tV0ERF6VQpn3" 35 | }, 36 | "source": [ 37 | "import matplotlib.pyplot as plt\n", 38 | "import numpy as np\n", 39 | "import os\n", 40 | "import PIL\n", 41 | "import tensorflow as tf\n", 42 | "\n", 43 | "from tensorflow import keras\n", 44 | "from tensorflow.keras import layers, datasets, models\n", 45 | "from tensorflow.keras.models import Sequential" 46 | ], 47 | "execution_count": 1, 48 | "outputs": [] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "id": "SQUwwGUSQpos" 54 | }, 55 | "source": [ 56 | "## Prepare Dataset" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "metadata": { 62 | "id": "Md-nuU-BQpo3", 63 | "outputId": "9a9b9196-82e4-46f8-aa01-a4cdf48accb6", 64 | "colab": { 65 | "base_uri": "https://localhost:8080/", 66 | "height": 51 67 | } 68 | }, 69 | "source": [ 70 | "(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()\n", 71 | "\n", 72 | "train_images = train_images.reshape((60000, 28, 28, 1))\n", 73 | "test_images = test_images.reshape((10000, 28, 28, 1))\n", 74 | "\n", 75 | "# Normalize pixel values to be between 0 and 1\n", 76 | "train_images, test_images = train_images / 255.0, test_images / 255.0\n", 77 | "\n", 78 | "print(\"TRAIN IMAGES: \", train_images.shape)\n", 79 | "print(\"TEST IMAGES: \", test_images.shape)" 80 | ], 81 | "execution_count": 2, 82 | "outputs": [ 83 | { 84 | "output_type": "stream", 85 | "text": [ 86 | "TRAIN IMAGES: (60000, 28, 28, 1)\n", 87 | "TEST IMAGES: (10000, 28, 28, 1)\n" 88 | ], 89 | "name": "stdout" 90 | } 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": { 96 | "id": "u85pikI_QppL" 97 | }, 98 | "source": [ 99 | "## Create Model" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "metadata": { 105 | "id": "ABR85VMcQppM" 106 | }, 107 | "source": [ 108 | "num_classes = 10\n", 109 | "img_height = 28\n", 110 | "img_width = 28\n", 111 | "\n", 112 | "model = Sequential([\n", 113 | " layers.Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", 114 | " layers.Conv2D(32, 3, padding='same', activation='relu'),\n", 115 | " layers.MaxPooling2D(),\n", 116 | " layers.Conv2D(16, 3, padding='same', activation='relu'),\n", 117 | " layers.MaxPooling2D(),\n", 118 | " layers.Conv2D(64, 3, padding='same', activation='relu'),\n", 119 | " layers.MaxPooling2D(),\n", 120 | " layers.Flatten(),\n", 121 | " layers.Dense(128, activation='relu'),\n", 122 | " layers.Dense(10, activation='sigmoid')\n", 123 | "])" 124 | ], 125 | "execution_count": 3, 126 | "outputs": [] 127 | }, 128 | { 129 | "cell_type": "markdown", 130 | "metadata": { 131 | "id": "q273hPK2Qppc" 132 | }, 133 | "source": [ 134 | "## Compile Model" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "metadata": { 140 | "id": "K3OcHt-TQppf" 141 | }, 142 | "source": [ 143 | "model.compile(optimizer='adam',\n", 144 | " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", 145 | " metrics=['accuracy'])" 146 | ], 147 | "execution_count": 4, 148 | "outputs": [] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "metadata": { 153 | "scrolled": true, 154 | "id": "eehWMg2sQppr", 155 | "outputId": "5981b510-ee66-4494-e6bc-c2d55e8d6d9d", 156 | "colab": { 157 | "base_uri": "https://localhost:8080/", 158 | "height": 493 159 | } 160 | }, 161 | "source": [ 162 | "model.summary()" 163 | ], 164 | "execution_count": 5, 165 | "outputs": [ 166 | { 167 | "output_type": "stream", 168 | "text": [ 169 | "Model: \"sequential\"\n", 170 | "_________________________________________________________________\n", 171 | "Layer (type) Output Shape Param # \n", 172 | "=================================================================\n", 173 | "conv2d (Conv2D) (None, 26, 26, 64) 640 \n", 174 | "_________________________________________________________________\n", 175 | "conv2d_1 (Conv2D) (None, 26, 26, 32) 18464 \n", 176 | "_________________________________________________________________\n", 177 | "max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0 \n", 178 | "_________________________________________________________________\n", 179 | "conv2d_2 (Conv2D) (None, 13, 13, 16) 4624 \n", 180 | "_________________________________________________________________\n", 181 | "max_pooling2d_1 (MaxPooling2 (None, 6, 6, 16) 0 \n", 182 | "_________________________________________________________________\n", 183 | "conv2d_3 (Conv2D) (None, 6, 6, 64) 9280 \n", 184 | "_________________________________________________________________\n", 185 | "max_pooling2d_2 (MaxPooling2 (None, 3, 3, 64) 0 \n", 186 | "_________________________________________________________________\n", 187 | "flatten (Flatten) (None, 576) 0 \n", 188 | "_________________________________________________________________\n", 189 | "dense (Dense) (None, 128) 73856 \n", 190 | "_________________________________________________________________\n", 191 | "dense_1 (Dense) (None, 10) 1290 \n", 192 | "=================================================================\n", 193 | "Total params: 108,154\n", 194 | "Trainable params: 108,154\n", 195 | "Non-trainable params: 0\n", 196 | "_________________________________________________________________\n" 197 | ], 198 | "name": "stdout" 199 | } 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": { 205 | "id": "036GaKZGQpqE" 206 | }, 207 | "source": [ 208 | "## Train Model" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "metadata": { 214 | "id": "l4hi0rW_QpqL", 215 | "outputId": "a08c9ce3-3b24-4dd2-ac2f-cddaca285002", 216 | "colab": { 217 | "base_uri": "https://localhost:8080/", 218 | "height": 357 219 | } 220 | }, 221 | "source": [ 222 | "epochs = 10\n", 223 | "history = model.fit(\n", 224 | " train_images, \n", 225 | " train_labels,\n", 226 | " epochs = epochs\n", 227 | ")" 228 | ], 229 | "execution_count": 6, 230 | "outputs": [ 231 | { 232 | "output_type": "stream", 233 | "text": [ 234 | "Epoch 1/10\n", 235 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.5233 - accuracy: 0.9378\n", 236 | "Epoch 2/10\n", 237 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4818 - accuracy: 0.9771\n", 238 | "Epoch 3/10\n", 239 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4766 - accuracy: 0.9821\n", 240 | "Epoch 4/10\n", 241 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4751 - accuracy: 0.9833\n", 242 | "Epoch 5/10\n", 243 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4730 - accuracy: 0.9851\n", 244 | "Epoch 6/10\n", 245 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4740 - accuracy: 0.9844\n", 246 | "Epoch 7/10\n", 247 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4751 - accuracy: 0.9807\n", 248 | "Epoch 8/10\n", 249 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4734 - accuracy: 0.9831\n", 250 | "Epoch 9/10\n", 251 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4738 - accuracy: 0.9822\n", 252 | "Epoch 10/10\n", 253 | "1875/1875 [==============================] - 6s 3ms/step - loss: 1.4765 - accuracy: 0.9758\n" 254 | ], 255 | "name": "stdout" 256 | } 257 | ] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "metadata": { 262 | "id": "J1ThXQxmQpqZ" 263 | }, 264 | "source": [ 265 | "## Visualize Training Results" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "metadata": { 271 | "id": "ThQIghvNQpqb", 272 | "outputId": "97cb4d08-1c11-40f5-9732-3dff55937a6a", 273 | "colab": { 274 | "base_uri": "https://localhost:8080/", 275 | "height": 516 276 | } 277 | }, 278 | "source": [ 279 | "acc = history.history['accuracy']\n", 280 | "loss=history.history['loss']\n", 281 | "\n", 282 | "epochs_range = range(epochs)\n", 283 | "\n", 284 | "plt.figure(figsize=(8, 8))\n", 285 | "plt.plot(epochs_range, acc, label='Training Accuracy')\n", 286 | "plt.plot(epochs_range, loss, label='Loss')\n", 287 | "plt.legend(loc='lower right')\n", 288 | "plt.title('Training Accuracy and Loss')\n" 289 | ], 290 | "execution_count": 7, 291 | "outputs": [ 292 | { 293 | "output_type": "execute_result", 294 | "data": { 295 | "text/plain": [ 296 | "Text(0.5, 1.0, 'Training Accuracy and Loss')" 297 | ] 298 | }, 299 | "metadata": { 300 | "tags": [] 301 | }, 302 | "execution_count": 7 303 | }, 304 | { 305 | "output_type": "display_data", 306 | "data": { 307 | "image/png": "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UW3cuFHPPfecYrGY5s+fr6uvvlp/+MMfttpmxYoVevbZZ7Vp0ybtu+++uuiii7b6FZ5XXnlFy5cv1+67764pU6bob3/7myorK3XBBRdo0aJFGjVqlE455ZQO65ozZ45OOeUUHXfccbr66quVSCQUj8c1c+ZMTZ06VXPnzlUymVRtba2WL1+un/zkJ1q8eLFKS0u1bt26Ll/3yy+/rNdee635aee7775bQ4YM0ZYtW3TAAQfoxBNPVCqV0nnnnddc77p16xSJRHTaaadp9uzZuuSSSzR//nxVVFSorKxsG9/51vr9yPiDDVt08eyX9fU7/666xqR+ffok3X/OgQQxgH5hxowZikaDDyqqqanRjBkz9JnPfEaXXnqpli9f3u42xxxzjPLz81VaWqphw4bp448/3qrPgQceqPLyckUiEU2YMEGrVq3SihUrtNdeezUHYEdh3NjYqHnz5un444/XLrvsooMOOkhPPfWUJOmZZ57RRRddJEmKRqMaOHCgnnnmGc2YMUOlpcGvmQ4ZMqTL133ggQe2+rWjm2++WRUVFZo8ebJWr16tf//733rhhRd02GGHNfdL7/ecc87R/fffLykI8bPPPrvL43Wl346M6xNJ/Xrhu7p94duSpMs+/2mdfxifngWg523PCLanDBgwoHn+Bz/4gQ4//HDNnTtXq1at0rRp09rdJj+/5SHWaDSqpqam7erTkaeeekobNmzQuHHjJEl1dXUqLCzs8JJ2R2KxWPPDX6lUqtWDapmve8GCBZo/f76WLFmioqIiTZs2rdMPZxkxYoR23XVXPfPMM3rxxRc1e/bsbaqrPf1uZOyc05OvfaQjf75Qv5j/lo7Yb1c9/d1pmnnEPgQxgH6tpqZGw4cPlyTde++9Wd//vvvuq3fffVerVq2SJP3ud79rt9+cOXN01113adWqVVq1apVWrlypv/71r6qrq9MRRxyh22+/XZKUTCZVU1Ojz33uc3r44Ye1du1aSWq+TD1y5Ei99NJLkqTHHntMiUSi3ePV1NRo8ODBKioq0ooVK/TCCy9IkiZPnqxFixZp5cqVrfYrSeeee65OO+20VlcWdkS/CuO312zSGXe/qAsffEkD8mJ66LyDdOvX99fwQYW+SwMA76644gpdddVVmjhx4jaNZLursLBQt912m6ZPn65JkyappKREAwcObNWnrq5OTz75pI45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\n", 308 | "text/plain": [ 309 | "
" 310 | ] 311 | }, 312 | "metadata": { 313 | "tags": [], 314 | "needs_background": "light" 315 | } 316 | } 317 | ] 318 | }, 319 | { 320 | "cell_type": "markdown", 321 | "metadata": { 322 | "id": "bLqZHZ1uVhpI" 323 | }, 324 | "source": [ 325 | "## Test Image" 326 | ] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "metadata": { 331 | "id": "WUKvyxTgVgYN", 332 | "outputId": "62348f85-fb40-4761-d872-90fe597a6114", 333 | "colab": { 334 | "base_uri": "https://localhost:8080/", 335 | "height": 353 336 | } 337 | }, 338 | "source": [ 339 | "image = (train_images[1]).reshape(1,28,28,1)\n", 340 | "model_pred = model.predict_classes(image, verbose=0)\n", 341 | "plt.imshow(image.reshape(28,28))\n", 342 | "print('Prediction of model: {}'.format(model_pred[0]))" 343 | ], 344 | "execution_count": 8, 345 | "outputs": [ 346 | { 347 | "output_type": "stream", 348 | "text": [ 349 | "WARNING:tensorflow:From :2: Sequential.predict_classes (from tensorflow.python.keras.engine.sequential) is deprecated and will be removed after 2021-01-01.\n", 350 | "Instructions for updating:\n", 351 | "Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype(\"int32\")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).\n", 352 | "Prediction of model: 0\n" 353 | ], 354 | "name": "stdout" 355 | }, 356 | { 357 | "output_type": "display_data", 358 | "data": { 359 | "image/png": "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\n", 360 | "text/plain": [ 361 | "
" 362 | ] 363 | }, 364 | "metadata": { 365 | "tags": [], 366 | "needs_background": "light" 367 | } 368 | } 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "metadata": { 374 | "id": "26tM44tYTcAq", 375 | "outputId": "1a2166b6-57cf-466a-b049-73da63119782", 376 | "colab": { 377 | "base_uri": "https://localhost:8080/", 378 | "height": 282 379 | } 380 | }, 381 | "source": [ 382 | "image = (train_images[2]).reshape(1,28,28,1)\n", 383 | "model_pred = model.predict_classes(image, verbose=0)\n", 384 | "plt.imshow(image.reshape(28,28))\n", 385 | "print('Prediction of model: {}'.format(model_pred[0]))" 386 | ], 387 | "execution_count": 9, 388 | "outputs": [ 389 | { 390 | "output_type": "stream", 391 | "text": [ 392 | "Prediction of model: 4\n" 393 | ], 394 | "name": "stdout" 395 | }, 396 | { 397 | "output_type": "display_data", 398 | "data": { 399 | "image/png": "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\n", 400 | "text/plain": [ 401 | "
" 402 | ] 403 | }, 404 | "metadata": { 405 | "tags": [], 406 | "needs_background": "light" 407 | } 408 | } 409 | ] 410 | }, 411 | { 412 | "cell_type": "markdown", 413 | "metadata": { 414 | "id": "pv4mRzFPV8RV" 415 | }, 416 | "source": [ 417 | "## Test Multiple Image" 418 | ] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "metadata": { 423 | "id": "zXdh59ABV4Hi", 424 | "outputId": "12f250e5-c117-4d31-a84b-cfe1264ec27f", 425 | "colab": { 426 | "base_uri": "https://localhost:8080/", 427 | "height": 349 428 | } 429 | }, 430 | "source": [ 431 | "\n", 432 | "images = test_images[1:5]\n", 433 | "images = images.reshape(images.shape[0], 28, 28)\n", 434 | "print (\"Test images array shape: {}\".format(images.shape))\n", 435 | "\n", 436 | "\n", 437 | "for i, test_image in enumerate(images, start=1):\n", 438 | "\n", 439 | " org_image = test_image\n", 440 | " test_image = test_image.reshape(1,28,28,1)\n", 441 | " prediction = model.predict_classes(test_image, verbose=0)\n", 442 | "\n", 443 | " print (\"Predicted digit: {}\".format(prediction[0]))\n", 444 | " plt.subplot(220+i)\n", 445 | " plt.axis('off')\n", 446 | " plt.title(\"Predicted digit: {}\".format(prediction[0]))\n", 447 | " plt.imshow(org_image, cmap=plt.get_cmap('gray'))\n", 448 | "\n", 449 | "plt.show()\n" 450 | ], 451 | "execution_count": 10, 452 | "outputs": [ 453 | { 454 | "output_type": "stream", 455 | "text": [ 456 | "Test images array shape: (4, 28, 28)\n", 457 | "Predicted digit: 2\n", 458 | "Predicted digit: 1\n", 459 | "Predicted digit: 0\n", 460 | "Predicted digit: 4\n" 461 | ], 462 | "name": "stdout" 463 | }, 464 | { 465 | "output_type": "display_data", 466 | "data": { 467 | "image/png": "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\n", 468 | "text/plain": [ 469 | "
" 470 | ] 471 | }, 472 | "metadata": { 473 | "tags": [], 474 | "needs_background": "light" 475 | } 476 | } 477 | ] 478 | }, 479 | { 480 | "cell_type": "markdown", 481 | "metadata": { 482 | "id": "FphNanNsW8AL" 483 | }, 484 | "source": [ 485 | "## Save Model" 486 | ] 487 | }, 488 | { 489 | "cell_type": "code", 490 | "metadata": { 491 | "id": "NXj_sZ1lV_S2" 492 | }, 493 | "source": [ 494 | "model.save(\"tf-cnn-model.h5\")" 495 | ], 496 | "execution_count": 11, 497 | "outputs": [] 498 | }, 499 | { 500 | "cell_type": "markdown", 501 | "metadata": { 502 | "id": "9hVmcb9EXwDI" 503 | }, 504 | "source": [ 505 | "## Load Model" 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "metadata": { 511 | "id": "c6I1LBQaWsYx" 512 | }, 513 | "source": [ 514 | "loaded_model = models.load_model(\"tf-cnn-model.h5\")" 515 | ], 516 | "execution_count": 12, 517 | "outputs": [] 518 | }, 519 | { 520 | "cell_type": "code", 521 | "metadata": { 522 | "id": "EkSnt7uNX2fn", 523 | "outputId": "2b2a6d70-f3e0-4ec0-a695-a8fd2063e006", 524 | "colab": { 525 | "base_uri": "https://localhost:8080/", 526 | "height": 282 527 | } 528 | }, 529 | "source": [ 530 | "image = (train_images[2]).reshape(1,28,28,1)\n", 531 | "model_pred = loaded_model.predict_classes(image, verbose=0)\n", 532 | "plt.imshow(image.reshape(28,28))\n", 533 | "print('Prediction of model: {}'.format(model_pred[0]))" 534 | ], 535 | "execution_count": 13, 536 | "outputs": [ 537 | { 538 | "output_type": "stream", 539 | "text": [ 540 | "Prediction of model: 4\n" 541 | ], 542 | "name": "stdout" 543 | }, 544 | { 545 | "output_type": "display_data", 546 | "data": { 547 | "image/png": "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\n", 548 | "text/plain": [ 549 | "
" 550 | ] 551 | }, 552 | "metadata": { 553 | "tags": [], 554 | "needs_background": "light" 555 | } 556 | } 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "metadata": { 562 | "id": "5b6Qa1-ZX_8j" 563 | }, 564 | "source": [ 565 | "" 566 | ], 567 | "execution_count": 13, 568 | "outputs": [] 569 | } 570 | ] 571 | } 572 | --------------------------------------------------------------------------------