{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Intro","metadata":{}},{"cell_type":"markdown","source":"LeNet-5 is a simple and efficient convolutional neural network for handwritten digit recognition. It was created by Yann LeCun in 1998 and published in the paper: [Gradient-Based Learning Applied to Document Recognition](http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf).<br>\nYann LeCun's website view demos of the network classifying handwritten images [here](http://yann.lecun.com/exdb/lenet/index.html).","metadata":{}},{"cell_type":"markdown","source":"# Architecture","metadata":{}},{"cell_type":"markdown","source":"The general architecture of LeNet-5 is shown in this figure from the original paper ![lenet.png](attachment:fab12fe4-1c67-4c01-9896-ab9dba0d5261.png)","metadata":{},"attachments":{"fab12fe4-1c67-4c01-9896-ab9dba0d5261.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"# Changes in this notebook","metadata":{}},{"cell_type":"markdown","source":"Today, modern CNNs implementations practically don't use some methods in the original network, and use some modern methods. This notebook implements LeNet-5 by some modern methods usin keras and train it on MNIST dataset.<br>\nThe changes in this notebook are inspired from [Coursera: Deep Learning Specialization](https://www.coursera.org/specializations/deep-learning) by Andrew NG, and the book [Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition](https://www.oreilly.com/library/view/hands-on-machine-learning/9781492032632/)<br>\nThis notebook uses the following changes:\n- Using Max-pooling instead of average-pooling.\n- Applying ReLU activation function instead of tanh or sigmoid.\n- Using Softmax in the last layer instead of Radial Basis Function RBF.\n- No non-linearity after pooling.\n- Every filter in the convolution layers uses every channel as usual instead of the original paper with different filters look at different channels (see table 1, page 8 in the paper).\n- Add batch-normalization.\n- Zero-padding the first layer since the network uses 32x32 images as input, but, MNIST images are 28x28","metadata":{}},{"cell_type":"markdown","source":"# Implementation","metadata":{}},{"cell_type":"code","source":"# load the dataset\nimport tensorflow as tf\n\n(X_train_full, y_train_full), (X_test, y_test) = tf.keras.datasets.mnist.load_data()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-09-11T12:46:36.595754Z","iopub.execute_input":"2022-09-11T12:46:36.596496Z","iopub.status.idle":"2022-09-11T12:46:39.753204Z","shell.execute_reply.started":"2022-09-11T12:46:36.596425Z","shell.execute_reply":"2022-09-11T12:46:39.751596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# reshape the data to be fed in the network\nX_train_full = X_train_full.reshape(60000, 28, 28, 1)\nX_test = X_test.reshape(10000, 28, 28, 1)","metadata":{"execution":{"iopub.status.busy":"2022-09-11T15:04:26.995965Z","iopub.execute_input":"2022-09-11T15:04:26.996751Z","iopub.status.idle":"2022-09-11T15:04:27.090197Z","shell.execute_reply.started":"2022-09-11T15:04:26.996614Z","shell.execute_reply":"2022-09-11T15:04:27.088528Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# image scaling\nX_train_full = X_train_full/255.0\nX_test = X_test/255.0","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:39.766570Z","iopub.execute_input":"2022-09-11T12:46:39.767514Z","iopub.status.idle":"2022-09-11T12:46:39.976066Z","shell.execute_reply.started":"2022-09-11T12:46:39.767475Z","shell.execute_reply":"2022-09-11T12:46:39.974764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# split a validation set that is representative for each class\nfrom sklearn.model_selection import StratifiedShuffleSplit\n\nsplit = StratifiedShuffleSplit(n_splits=1, test_size=10000)\nfor train_index, test_index in split.split(X_train_full, y_train_full):\n    X_train, X_val = X_train_full[train_index], X_train_full[test_index]\n    y_train, y_val = y_train_full[train_index], y_train_full[test_index]","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:39.980141Z","iopub.execute_input":"2022-09-11T12:46:39.980846Z","iopub.status.idle":"2022-09-11T12:46:40.646887Z","shell.execute_reply.started":"2022-09-11T12:46:39.980793Z","shell.execute_reply":"2022-09-11T12:46:40.645691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# building the model\nlenet_5 = tf.keras.Sequential([\n    tf.keras.layers.Conv2D(filters=6, kernel_size=(5,5), strides=1, padding=\"same\", input_shape=[28,28,1]),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding=\"valid\"),\n    tf.keras.layers.Conv2D(filters=16, kernel_size=(5,5), strides=1),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding=\"valid\"),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(120),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.Dense(84),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.Dense(10, activation='softmax')\n])","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:40.648348Z","iopub.execute_input":"2022-09-11T12:46:40.648714Z","iopub.status.idle":"2022-09-11T12:46:40.800195Z","shell.execute_reply.started":"2022-09-11T12:46:40.648679Z","shell.execute_reply":"2022-09-11T12:46:40.799046Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model architecture summary\nlenet_5.summary()","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:40.802111Z","iopub.execute_input":"2022-09-11T12:46:40.802878Z","iopub.status.idle":"2022-09-11T12:46:40.811479Z","shell.execute_reply.started":"2022-09-11T12:46:40.802825Z","shell.execute_reply":"2022-09-11T12:46:40.810582Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# defining the loss and the optimizer\nlenet_5.compile(loss=\"sparse_categorical_crossentropy\", \n                optimizer=tf.keras.optimizers.Adam(learning_rate=0.0005), \n                metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:40.813000Z","iopub.execute_input":"2022-09-11T12:46:40.813992Z","iopub.status.idle":"2022-09-11T12:46:40.832757Z","shell.execute_reply.started":"2022-09-11T12:46:40.813945Z","shell.execute_reply":"2022-09-11T12:46:40.831612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fitting the model\nhistory = lenet_5.fit(X_train, y_train, epochs=30, batch_size=1024, validation_data=(X_val, y_val))","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:46:40.834291Z","iopub.execute_input":"2022-09-11T12:46:40.835148Z","iopub.status.idle":"2022-09-11T12:52:18.921650Z","shell.execute_reply.started":"2022-09-11T12:46:40.835111Z","shell.execute_reply":"2022-09-11T12:52:18.920628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Plot the learning curves","metadata":{}},{"cell_type":"code","source":"# plot accuracy and validations per epoch\nimport matplotlib.pyplot as plt\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,7))\n\nax1.plot(history.history['loss'], label=\"Train loss\")\nax1.plot(history.history['val_loss'], label=\"Validation loss\")\nax2.plot(history.history['accuracy'], label=\"Train accuracy\")\nax2.plot(history.history['val_accuracy'], label=\"Validation accuracy\")\n\nax1.legend(fontsize=15);\nax2.legend(fontsize=15);\n\nax1.set_title('Loss per epoch', fontsize=25);\nax1.set_xlabel(\"epoch\", fontsize=20);\nax2.set_title('Accuracy per epoch', fontsize=25);\nax2.set_xlabel(\"epoch\", fontsize=20);\n\nax1.grid(True)\nax2.grid(True);","metadata":{"execution":{"iopub.status.busy":"2022-09-11T15:06:37.651360Z","iopub.execute_input":"2022-09-11T15:06:37.651810Z","iopub.status.idle":"2022-09-11T15:06:38.041156Z","shell.execute_reply.started":"2022-09-11T15:06:37.651774Z","shell.execute_reply":"2022-09-11T15:06:38.039731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Retrain on the whole training + validation set","metadata":{}},{"cell_type":"code","source":"lenet_5 = tf.keras.Sequential([\n    tf.keras.layers.Conv2D(filters=6, kernel_size=(5,5), strides=1, padding=\"same\", input_shape=[28,28,1]),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding=\"valid\"),\n    tf.keras.layers.Conv2D(filters=16, kernel_size=(5,5), strides=1),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding=\"valid\"),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(120),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.Dense(84),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.ReLU(),\n    tf.keras.layers.Dense(10, activation='softmax')\n])","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:52:19.438146Z","iopub.execute_input":"2022-09-11T12:52:19.438501Z","iopub.status.idle":"2022-09-11T12:52:19.561510Z","shell.execute_reply.started":"2022-09-11T12:52:19.438468Z","shell.execute_reply":"2022-09-11T12:52:19.560214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lenet_5.summary()","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:52:19.563223Z","iopub.execute_input":"2022-09-11T12:52:19.564094Z","iopub.status.idle":"2022-09-11T12:52:19.572778Z","shell.execute_reply.started":"2022-09-11T12:52:19.564038Z","shell.execute_reply":"2022-09-11T12:52:19.571390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lenet_5.compile(loss=\"sparse_categorical_crossentropy\", optimizer=tf.keras.optimizers.Adam(learning_rate=0.0005), \n                metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:52:19.574514Z","iopub.execute_input":"2022-09-11T12:52:19.575227Z","iopub.status.idle":"2022-09-11T12:52:19.590312Z","shell.execute_reply.started":"2022-09-11T12:52:19.575189Z","shell.execute_reply":"2022-09-11T12:52:19.589103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_full = lenet_5.fit(X_train_full, y_train_full, epochs=30, batch_size=1024)","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:52:19.594396Z","iopub.execute_input":"2022-09-11T12:52:19.595196Z","iopub.status.idle":"2022-09-11T12:58:57.002729Z","shell.execute_reply.started":"2022-09-11T12:52:19.595156Z","shell.execute_reply":"2022-09-11T12:58:57.001747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,7))\n\nax1.plot(history_full.history['loss'], label=\"Train loss\")\n#ax1.plot(history_full.history['val_loss'], label=\"Validation loss\")\nax2.plot(history_full.history['accuracy'], label=\"Train accuracy\")\n#ax2.plot(history_full.history['val_accuracy'], label=\"Validation accuracy\")\n\nax1.legend(fontsize=15);\nax2.legend(fontsize=15);\n\nax1.set_title('Loss per epoch', fontsize=25);\nax1.set_xlabel(\"epoch\", fontsize=20);\nax2.set_title('Accuracy per epoch', fontsize=25);\nax2.set_xlabel(\"epoch\", fontsize=20);\n\nax1.grid(True)\nax2.grid(True);","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:58:57.004039Z","iopub.execute_input":"2022-09-11T12:58:57.004375Z","iopub.status.idle":"2022-09-11T12:58:57.482199Z","shell.execute_reply.started":"2022-09-11T12:58:57.004342Z","shell.execute_reply":"2022-09-11T12:58:57.480964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model test set evaluation","metadata":{}},{"cell_type":"code","source":"lenet_5.evaluate(X_test, y_test)","metadata":{"execution":{"iopub.status.busy":"2022-09-11T12:58:57.483731Z","iopub.execute_input":"2022-09-11T12:58:57.484108Z","iopub.status.idle":"2022-09-11T12:58:59.051948Z","shell.execute_reply.started":"2022-09-11T12:58:57.484073Z","shell.execute_reply":"2022-09-11T12:58:59.050654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**As shown, LeNet-5 is great for handwritten digit classification. It scored about 99% in the test set.**","metadata":{}}]}