{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Digit Recognizer\n<html>\n    <body>\n<p><t>There are 2 files. They are <li>train.csv</li> <li>test.csv</li> <p>which are used for training and testing respectively. <br>Each row in dataset contain <b>28 x 28 gray-scale image</b> of hand-drawn digit flattened as <b>784 pixels</b>.This pixel values from 0 to 255. These number are from <b>zero to nine</b> indicated by \"label\" column in train dataset.</p>\n<p> This kernel consists of 4 sections<p>\n    <ol>\n        <li> Data Analysis</li>\n        <li> Data preprocessing</li>\n        <li> Training</li>\n        <li> Testing</li>\n    </ol>\n<p>Dataset consists of <ul><li>Train data 42,000 rows</li> <li>Test data 28,000 rows</li></ul>\n\nThe train dataset is divided into training (90%) and development (10%) datasets.\n\nThis data is training on LeNet-5 model which have 2 Convolution layers and 3 fully connected layers published this <a href = \"http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf\"> paper</a> by Yann LeCun 1998 who received Turning award in 2019.<br><br>\n<b>Applied a trick to make Lenet architecture comfortable with these data dimensions. Let's see what is that!\n    </body>\n</html>"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":1,"outputs":[{"output_type":"stream","text":"['train.csv', 'sample_submission.csv', 'test.csv']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# import libraries\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport itertools\n\nfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, BatchNormalization, AveragePooling2D, Flatten\nfrom keras.optimizers import Adam\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\nrandom_seed = 1\nnp.random.seed(random_seed)","execution_count":2,"outputs":[{"output_type":"stream","text":"Using TensorFlow backend.\n","name":"stderr"}]},{"metadata":{},"cell_type":"markdown","source":"# Data Analysis"},{"metadata":{"trusted":true},"cell_type":"code","source":"# loading training data\ntrain = pd.read_csv('../input/train.csv')\ntrain.shape","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"data":{"text/plain":"(42000, 785)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# loading test data\ntest = pd.read_csv('../input/test.csv')\ntest.shape","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":"(28000, 784)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":5,"outputs":[{"output_type":"execute_result","execution_count":5,"data":{"text/plain":"   label  pixel0  pixel1    ...     pixel781  pixel782  pixel783\n0      1       0       0    ...            0         0         0\n1      0       0       0    ...            0         0         0\n2      1       0       0    ...            0         0         0\n3      4       0       0    ...            0         0         0\n4      0       0       0    ...            0         0         0\n\n[5 rows x 785 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>pixel0</th>\n      <th>pixel1</th>\n      <th>pixel2</th>\n      <th>pixel3</th>\n      <th>pixel4</th>\n      <th>pixel5</th>\n      <th>pixel6</th>\n      <th>pixel7</th>\n      <th>pixel8</th>\n      <th>pixel9</th>\n      <th>pixel10</th>\n      <th>pixel11</th>\n      <th>pixel12</th>\n      <th>pixel13</th>\n      <th>pixel14</th>\n      <th>pixel15</th>\n      <th>pixel16</th>\n      <th>pixel17</th>\n      <th>pixel18</th>\n      <th>pixel19</th>\n      <th>pixel20</th>\n      <th>pixel21</th>\n      <th>pixel22</th>\n      <th>pixel23</th>\n      <th>pixel24</th>\n      <th>pixel25</th>\n      <th>pixel26</th>\n      <th>pixel27</th>\n      <th>pixel28</th>\n      <th>pixel29</th>\n      <th>pixel30</th>\n      <th>pixel31</th>\n      <th>pixel32</th>\n      <th>pixel33</th>\n      <th>pixel34</th>\n      <th>pixel35</th>\n      <th>pixel36</th>\n      <th>pixel37</th>\n      <th>pixel38</th>\n      <th>...</th>\n      <th>pixel744</th>\n      <th>pixel745</th>\n      <th>pixel746</th>\n      <th>pixel747</th>\n      <th>pixel748</th>\n      <th>pixel749</th>\n      <th>pixel750</th>\n      <th>pixel751</th>\n      <th>pixel752</th>\n      <th>pixel753</th>\n      <th>pixel754</th>\n      <th>pixel755</th>\n      <th>pixel756</th>\n      <th>pixel757</th>\n      <th>pixel758</th>\n      <th>pixel759</th>\n      <th>pixel760</th>\n      <th>pixel761</th>\n      <th>pixel762</th>\n      <th>pixel763</th>\n      <th>pixel764</th>\n      <th>pixel765</th>\n      <th>pixel766</th>\n      <th>pixel767</th>\n      <th>pixel768</th>\n      <th>pixel769</th>\n      <th>pixel770</th>\n      <th>pixel771</th>\n      <th>pixel772</th>\n      <th>pixel773</th>\n      <th>pixel774</th>\n      <th>pixel775</th>\n      <th>pixel776</th>\n      <th>pixel777</th>\n      <th>pixel778</th>\n      <th>pixel779</th>\n      <th>pixel780</th>\n      <th>pixel781</th>\n      <th>pixel782</th>\n      <th>pixel783</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.head()","execution_count":6,"outputs":[{"output_type":"execute_result","execution_count":6,"data":{"text/plain":"   pixel0  pixel1  pixel2    ...     pixel781  pixel782  pixel783\n0       0       0       0    ...            0         0         0\n1       0       0       0    ...            0         0         0\n2       0       0       0    ...            0         0         0\n3       0       0       0    ...            0         0         0\n4       0       0       0    ...            0         0         0\n\n[5 rows x 784 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>pixel0</th>\n      <th>pixel1</th>\n      <th>pixel2</th>\n      <th>pixel3</th>\n      <th>pixel4</th>\n      <th>pixel5</th>\n      <th>pixel6</th>\n      <th>pixel7</th>\n      <th>pixel8</th>\n      <th>pixel9</th>\n      <th>pixel10</th>\n      <th>pixel11</th>\n      <th>pixel12</th>\n      <th>pixel13</th>\n      <th>pixel14</th>\n      <th>pixel15</th>\n      <th>pixel16</th>\n      <th>pixel17</th>\n      <th>pixel18</th>\n      <th>pixel19</th>\n      <th>pixel20</th>\n      <th>pixel21</th>\n      <th>pixel22</th>\n      <th>pixel23</th>\n      <th>pixel24</th>\n      <th>pixel25</th>\n      <th>pixel26</th>\n      <th>pixel27</th>\n      <th>pixel28</th>\n      <th>pixel29</th>\n      <th>pixel30</th>\n      <th>pixel31</th>\n      <th>pixel32</th>\n      <th>pixel33</th>\n      <th>pixel34</th>\n      <th>pixel35</th>\n      <th>pixel36</th>\n      <th>pixel37</th>\n      <th>pixel38</th>\n      <th>pixel39</th>\n      <th>...</th>\n      <th>pixel744</th>\n      <th>pixel745</th>\n      <th>pixel746</th>\n      <th>pixel747</th>\n      <th>pixel748</th>\n      <th>pixel749</th>\n      <th>pixel750</th>\n      <th>pixel751</th>\n      <th>pixel752</th>\n      <th>pixel753</th>\n      <th>pixel754</th>\n      <th>pixel755</th>\n      <th>pixel756</th>\n      <th>pixel757</th>\n      <th>pixel758</th>\n      <th>pixel759</th>\n      <th>pixel760</th>\n      <th>pixel761</th>\n      <th>pixel762</th>\n      <th>pixel763</th>\n      <th>pixel764</th>\n      <th>pixel765</th>\n      <th>pixel766</th>\n      <th>pixel767</th>\n      <th>pixel768</th>\n      <th>pixel769</th>\n      <th>pixel770</th>\n      <th>pixel771</th>\n      <th>pixel772</th>\n      <th>pixel773</th>\n      <th>pixel774</th>\n      <th>pixel775</th>\n      <th>pixel776</th>\n      <th>pixel777</th>\n      <th>pixel778</th>\n      <th>pixel779</th>\n      <th>pixel780</th>\n      <th>pixel781</th>\n      <th>pixel782</th>\n      <th>pixel783</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dividing Independent and Dependent features in dataset\nY = train[\"label\"].values\nX = train.drop([\"label\"],axis=1).values","execution_count":7,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dimensions of each example (a gray image with 28 x 28 is flattern into 784)\nX[0].shape","execution_count":8,"outputs":[{"output_type":"execute_result","execution_count":8,"data":{"text/plain":"(784,)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Visualizing first example in dataset\nplt.imshow(np.reshape(X[0],(28,28)))\nplt.title(Y[0])\nplt.show()","execution_count":9,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plotting count of each digit\nsns.countplot(Y)","execution_count":10,"outputs":[{"output_type":"execute_result","execution_count":10,"data":{"text/plain":"<matplotlib.axes._subplots.AxesSubplot at 0x7f9b633c7f60>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Count of each digit\ntrain[\"label\"].value_counts()","execution_count":11,"outputs":[{"output_type":"execute_result","execution_count":11,"data":{"text/plain":"1    4684\n7    4401\n3    4351\n9    4188\n2    4177\n6    4137\n0    4132\n4    4072\n8    4063\n5    3795\nName: label, dtype: int64"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Checking null values\ntrain.isnull().sum().sum()","execution_count":12,"outputs":[{"output_type":"execute_result","execution_count":12,"data":{"text/plain":"0"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plotting grid of first 12 examples\nplt.figure(figsize=(10,6))\nfor i in range(12):\n    plt.subplot(3,4,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(np.reshape(X[i],(28,28)))\n    plt.title(Y[i])\n \nplt.show()","execution_count":13,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 720x432 with 12 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"# Data preprocessing"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Normalizing pixel values from (0 to 255) to (0 to 1)\nX = X/255\ntest /= 255\n#Y is digit label, No need of normalization and Test data do not have labels.","execution_count":14,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Checking normalized values\nprint(X.max(), X.min())","execution_count":15,"outputs":[{"output_type":"stream","text":"1.0 0.0\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Reshaping images\nX = X.reshape(-1,28,28,1)  # training examples\ntest = test.values.reshape(-1,28,28,1) #test examples","execution_count":16,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Encode labels to one hot vectors (ex : 2 -> [0,0,1,0,0,0,0,0,0,0])\nY = to_categorical(Y, num_classes = 10)","execution_count":17,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Spliting into Train dataset and Validating(development dataset)\nX_train, X_val, Y_train, Y_val = train_test_split(X, Y, test_size = 0.1, random_state=random_seed)","execution_count":18,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Checking shape of train data\nX_train.shape","execution_count":19,"outputs":[{"output_type":"execute_result","execution_count":19,"data":{"text/plain":"(37800, 28, 28, 1)"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Now data is ready to train, Let's design our model"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Defining LeNet model\ndef lenet5():\n    model = Sequential()\n    model.add(Conv2D(filters=6, kernel_size=(5,5), strides=(1,1),padding='same', activation='relu', name='Conv2D0', input_shape=(28,28,1)))\n    model.add(BatchNormalization(axis=-1, name='bn0'))\n    model.add(AveragePooling2D())\n    \n    model.add(Conv2D(filters=16, kernel_size=(5,5), strides=(1,1), activation='relu', name='Conv2D1'))\n    model.add(BatchNormalization(axis=-1, name='bn1'))\n    model.add(AveragePooling2D())\n    \n    model.add(Flatten())\n    model.add(Dense(units=120, activation='relu'))\n    model.add(Dense(units=84, activation='relu'))\n    model.add(Dense(units=10, activation='softmax'))\n    return model","execution_count":20,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Initializing lenet model and its data flow\nmodel = lenet5()\nmodel.summary()","execution_count":21,"outputs":[{"output_type":"stream","text":"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\nInstructions for updating:\nColocations handled automatically by placer.\n_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nConv2D0 (Conv2D)             (None, 28, 28, 6)         156       \n_________________________________________________________________\nbn0 (BatchNormalization)     (None, 28, 28, 6)         24        \n_________________________________________________________________\naverage_pooling2d_1 (Average (None, 14, 14, 6)         0         \n_________________________________________________________________\nConv2D1 (Conv2D)             (None, 10, 10, 16)        2416      \n_________________________________________________________________\nbn1 (BatchNormalization)     (None, 10, 10, 16)        64        \n_________________________________________________________________\naverage_pooling2d_2 (Average (None, 5, 5, 16)          0         \n_________________________________________________________________\nflatten_1 (Flatten)          (None, 400)               0         \n_________________________________________________________________\ndense_1 (Dense)              (None, 120)               48120     \n_________________________________________________________________\ndense_2 (Dense)              (None, 84)                10164     \n_________________________________________________________________\ndense_3 (Dense)              (None, 10)                850       \n=================================================================\nTotal params: 61,794\nTrainable params: 61,750\nNon-trainable params: 44\n_________________________________________________________________\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"# Train our model"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Compiling our model and training on train data\nmodel.compile(optimizer='Adam',loss='categorical_crossentropy', metrics=[\"accuracy\"])\nhistroy = model.fit(X_train, Y_train, epochs=5, batch_size=16)","execution_count":22,"outputs":[{"output_type":"stream","text":"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.cast instead.\nEpoch 1/5\n37800/37800 [==============================] - 46s 1ms/step - loss: 0.1321 - acc: 0.9590\nEpoch 2/5\n37800/37800 [==============================] - 44s 1ms/step - loss: 0.0576 - acc: 0.9816\nEpoch 3/5\n37800/37800 [==============================] - 44s 1ms/step - loss: 0.0405 - acc: 0.9876\nEpoch 4/5\n37800/37800 [==============================] - 44s 1ms/step - loss: 0.0340 - acc: 0.9889\nEpoch 5/5\n37800/37800 [==============================] - 44s 1ms/step - loss: 0.0281 - acc: 0.9911\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plotting Training accuracy and Training Loss curves\ntrain_accuracy = histroy.history['acc']\ntrain_loss = histroy.history['loss']\n\niterations = range(len(train_accuracy))\nplt.plot(iterations, train_accuracy, label='Training accuracy')\nplt.title('epochs vs Training accuracy')\nplt.legend()\n\nplt.figure()\nplt.plot(iterations, train_loss, label='Training Loss')\nplt.title('epochs vs Training Loss')\nplt.legend()","execution_count":23,"outputs":[{"output_type":"execute_result","execution_count":23,"data":{"text/plain":"<matplotlib.legend.Legend at 0x7f9b6195bdd8>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"# Testing our model"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Evaluating our model with dev dataset\npreds = model.evaluate(x=X_val, y=Y_val)\n\nprint (\"\\nLoss = \" + str(preds[0]))\nprint (\"Test Accuracy = \" + str(preds[1]))","execution_count":24,"outputs":[{"output_type":"stream","text":"4200/4200 [==============================] - 1s 349us/step\n\nLoss = 0.04269737161502181\nTest Accuracy = 0.9859523809523809\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Look at confusion matrix \n\ndef plot_confusion_matrix(cm, classes,\n                          normalize=False,\n                          title='Confusion matrix',\n                          cmap=plt.cm.Blues):\n    \"\"\"\n    This function prints and plots the confusion matrix.\n    Normalization can be applied by setting `normalize=True`.\n    \"\"\"\n    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n    plt.title(title)\n    plt.colorbar()\n    tick_marks = np.arange(len(classes))\n    plt.xticks(tick_marks, classes, rotation=45)\n    plt.yticks(tick_marks, classes)\n\n    if normalize:\n        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n\n    thresh = cm.max() / 2.\n    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n        plt.text(j, i, cm[i, j],\n                 horizontalalignment=\"center\",\n                 color=\"white\" if cm[i, j] > thresh else \"black\")\n\n    plt.tight_layout()\n    plt.ylabel('True label')\n    plt.xlabel('Predicted label')\n\n# Predict the values from the validation dataset\nY_pred = model.predict(X_val)\n# Convert predictions classes to one hot vectors \nY_pred_classes = np.argmax(Y_pred,axis = 1) \n# Convert validation observations to one hot vectors\nY_true = np.argmax(Y_val,axis = 1) \n# compute the confusion matrix\nconfusion_mtx = confusion_matrix(Y_true, Y_pred_classes) \n# plot the confusion matrix\nplot_confusion_matrix(confusion_mtx, classes = range(10)) ","execution_count":25,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 2 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save(\"DigiModel.h5\")","execution_count":26,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Predicting on Test data\ny_pred = model.predict(test)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Checking sample submission format\nsam_sub = pd.read_csv('../input/sample_submission.csv')\nsam_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Compressing prediction to labels (ex :  [0,0,1,0,0,0,0,0,0,0] -> 2)\ny_pred =  np.argmax(y_pred,axis = 1)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\n# Making our predictions as Pandas Series \ny_pred = pd.Series(y_pred,name=\"Label\")\ny_pred.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Saving our model prediction of test data\n# step 1 -> Create a DataFrame with ImageId(given in test data) and Label (Model predicted value)\n# step 2 -> Save that DataFrame to make submission in kaggle competition for evaluation\nsubmission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),y_pred],axis = 1)\n\nsubmission.to_csv(\"lenet5_mnist.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Conclusion:\n1. Applied a Same convolution in First layer because given image size is 28 x 28 where Lenet designed for 32 x 32 input size.\n2. Trained 5 epochs with 16 batch size\n3. Achieved 98% accuracy"}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}