{"cells":[{"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 random\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport matplotlib.image as mpimg\nfrom matplotlib import pyplot\n%matplotlib inline\n\n\n\nfrom keras.utils.np_utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\nfrom sklearn.model_selection import train_test_split\n\nfrom sklearn.metrics import confusion_matrix\nimport itertools","execution_count":24,"outputs":[{"output_type":"stream","text":"['test.csv', 'train.csv', 'sample_submission.csv']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"Train = pd.read_csv(\"../input/train.csv\")\nTest = pd.read_csv(\"../input/test.csv\")","execution_count":3,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Train.head()\n","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"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":"Train.shape\n","execution_count":5,"outputs":[{"output_type":"execute_result","execution_count":5,"data":{"text/plain":"(42000, 785)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = Train['label']\n\nX_train = Train.drop(labels='label', axis=1)\ny_train.value_counts()","execution_count":6,"outputs":[{"output_type":"execute_result","execution_count":6,"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":"X_train.isnull().any().describe()\n","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"count       784\nunique        1\ntop       False\nfreq        784\ndtype: object"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"Test.isnull().any().describe()","execution_count":8,"outputs":[{"output_type":"execute_result","execution_count":8,"data":{"text/plain":"count       784\nunique        1\ntop       False\nfreq        784\ndtype: object"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#normalizing the data\nX_train = X_train/255.0\nTest = Test/255.0","execution_count":9,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#reshaping the data\nX_train = X_train.values.reshape(-1,28,28,1)\n","execution_count":10,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Test = Test.values.reshape(-1,28,28,1)\n","execution_count":11,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(Test.shape,X_train.shape)","execution_count":12,"outputs":[{"output_type":"stream","text":"(28000, 28, 28, 1) (42000, 28, 28, 1)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#converting the label to one hot encoded vector\ny_train = to_categorical(y_train, num_classes = 10)","execution_count":13,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#spliting the data into test and validate\nX_train,X_val,Y_train,Y_val =train_test_split(X_train, y_train, test_size=0.1, random_state=0)","execution_count":14,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(X_train.shape,X_val.shape,Y_train.shape,Y_val.shape)","execution_count":15,"outputs":[{"output_type":"stream","text":"(37800, 28, 28, 1) (4200, 28, 28, 1) (37800, 10) (4200, 10)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(X_train[0][:,:,0])","execution_count":16,"outputs":[{"output_type":"execute_result","execution_count":16,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7f767c5981d0>"},"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":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#image augmentation\ndatagen = ImageDataGenerator( rotation_range = 15, width_shift_range = 0.1, height_shift_range = 0.1)\n\ndatagen.fit(X_train)\nnp.concatenate((X_train,X_train),axis=0)\nrandom.seed(12345)\nfor X_batch, Y_batch in datagen.flow(np.concatenate((X_train,X_train),axis=0), np.concatenate((Y_train,Y_train),axis=0), batch_size=35700):\n    break\nX_train_aug = X_batch\nY_train_aug = Y_batch\n\n\nfor i in range(0, 9):\n        pyplot.subplot(330 + 1 + i)\n        pyplot.imshow(X_train_aug[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))\n# show the plot\npyplot.show()","execution_count":25,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 9 Axes>","image/png":"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USzRUsz9FUAH7+f2+bZEIiJNyQky1jn3UL75vfz+i+7DrK7W/CpMqcu41GjbyHWFjH5mq61rgw+WRGQg0N85d3b+59OBns6582sYuzm5TerOEeaaBdYkPVFFKbrm+zcHvo5xikkk8bpCgz6zpmsRulb8YElEhgIvA5awE5bWPyQdiMhQEXmVnLaNHdM1mxSla5SkzEWZ+865keRDsEQks/tNGcJ0zS71apsEXVu0aFHw87p166oxjaKJYonOALqISGcRaQb8BJhUz+8Yycd0zS6mbQVosCXqnNsgIucDTwBNgFHOuTllm5lRFUzX7GJcMVXZAAAN/UlEQVTaVoa4M9s39mXfzDQmuK0P09V0bSi77rprwSPAXnvtBcCOO+4IQLNmzYI+LX+uJdLnz58PwD333BOMef311wH46quvok6vKF0tAYlhGEYEMlft0zCMZHHssccG1yeemIu+VCtRK/D27NkzGNOxY0cAmjRpAkBNq2Xt+8EPflDwPABXXHEFEFby/fbbb8vwv6gds0QNwzAiYJaokRm++93vBte/+MUvAJg8eTIAEyZMAOCbb8xdOS622GILAP74xz8GbXvvvTcATZs2BUKL8ssvvwzG6D6n9ql2AP/+978BaN++PQAXXHABAAMHDgzGPProowC88847gFmihmEYicYsUSNVbLZZ+L2/5ZZbAjBgQC78++yzzw76DjvssIIxDzzwQK3PudVWWwFw2223bdJ2zjnnAPDhhx9GnntjQ63F1q1bB236d/3444+B0GpcvToMbb/99tsBWLEiFwewfv36oE+tyrfeeguA448/HoAePXoEY9q0ySVs+vrreKJWzRI1DMOIgN1EDcMwItDol/P7778/EC4Fdblwxx13BGPefPPN+CdmAOEBRKtWrQBo1y7MC6zL+HPPPReAbbfdNuhbujSXO+Kpp56q9bk1Rlvdbvr37x/0TZs2DSg88DBKQ5fjv/vd74I2/RvPnj0bgMceewyAd999Nxjz+eef1/qcIgKEWwXqDrV27dpgjG4VxIVZooZhGBFo9JZot265xN5HH300AC1b5ooCrlq1KhijrhKfffZZzLNrvOiBkK4UTjnllIJHCA8Q9ODhtddeC/ruv/9+IDy42Ph5Afbdd18gdI9Rqxdg2bJcZQwNLzRK54svvgDg8ccfD9pmzJgBhNaiZmgq1g1JD6nU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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#combining the data\nX_train_aug = np.concatenate((X_train,X_train_aug),axis=0)\nY_train_aug = np.concatenate((Y_train,Y_train_aug),axis=0)\nprint(X_train_aug.shape,Y_train_aug.shape)","execution_count":26,"outputs":[{"output_type":"stream","text":"(73500, 28, 28, 1) (73500, 10)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#CNN architecture => (Conv2D(ReLU)--Conv2D(ReLU)--MaxPool2D--Dropout)*2--Flatten--Dense--Droupout--Out\n\nmodel = Sequential()\n\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu', input_shape = (28,28,1)))\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\n\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(0.25))\n\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))","execution_count":27,"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.\nWARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#optimizer\noptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)","execution_count":28,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#compiling the model\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics=[\"accuracy\"])\n","execution_count":29,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', \n                                            patience=3, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)","execution_count":33,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs = 10\nbatch_size = 86","execution_count":30,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#compiling the model\nhistory = model.fit(X_train_aug,\n                    Y_train_aug,\n                    batch_size = batch_size,\n                    epochs = epochs,\n                    validation_data = (X_val, Y_val),\n                    verbose = 2,\n                   callbacks=[learning_rate_reduction])","execution_count":34,"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.\nTrain on 73500 samples, validate on 4200 samples\nEpoch 1/10\n - 9s - loss: 0.2403 - acc: 0.9229 - val_loss: 0.0535 - val_acc: 0.9838\nEpoch 2/10\n - 6s - loss: 0.0772 - acc: 0.9763 - val_loss: 0.0320 - val_acc: 0.9910\nEpoch 3/10\n - 6s - loss: 0.0614 - acc: 0.9823 - val_loss: 0.0236 - val_acc: 0.9926\nEpoch 4/10\n - 6s - loss: 0.0516 - acc: 0.9846 - val_loss: 0.0241 - val_acc: 0.9914\nEpoch 5/10\n - 6s - loss: 0.0510 - acc: 0.9856 - val_loss: 0.0393 - val_acc: 0.9902\nEpoch 6/10\n - 6s - loss: 0.0485 - acc: 0.9866 - val_loss: 0.0234 - val_acc: 0.9931\nEpoch 7/10\n - 6s - loss: 0.0482 - acc: 0.9864 - val_loss: 0.0379 - val_acc: 0.9898\nEpoch 8/10\n - 6s - loss: 0.0513 - acc: 0.9867 - val_loss: 0.0315 - val_acc: 0.9924\nEpoch 9/10\n - 6s - loss: 0.0536 - acc: 0.9860 - val_loss: 0.0279 - val_acc: 0.9926\n\nEpoch 00009: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.\nEpoch 10/10\n - 6s - loss: 0.0366 - acc: 0.9901 - val_loss: 0.0238 - val_acc: 0.9938\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots(2,1)\nax[0].plot(history.history['loss'], color='b', label=\"Train loss\")\nax[0].plot(history.history['val_loss'], color='r', label=\"Val loss\",axes =ax[0])\nlegend = ax[0].legend(loc='best', shadow=True)\n\nax[1].plot(history.history['acc'], color='b', label=\"Train accuracy\")\nax[1].plot(history.history['val_acc'], color='r',label=\"Val accuracy\")\nlegend = ax[1].legend(loc='best', shadow=True)","execution_count":44,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 2 Axes>","image/png":"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Bg0axF133VVtwG+oULpsrgX6i0hfXLC/Drg+eAER6QocU9VS4F5gEYCqzgpaZg4u06/U+6e5WFu+MaYlu/zyy9m3b1+Tfkatmb6qFgN3AsuBbcArqrpFRB4Skat9i40DdojI57iTtr9uovI2iGX5xphoF9LFWar6N+BvFeb9Muj5MmBZLdv4M/DnOpewkViWb4wxUXRF7ooVLst/5hnL8o0x0Ssqxt6xLN8YY5yoCPorVsDHH1tbvjEt0fjx4ytdbPXkk09y++2317heYmJiUxYrYkV80Lcs35iWbebMmSxdurTcvKVLlzJz5kyPShSaqoZ4CAcRH/QtyzemZZs+fTpvv/122Q1B9u7dy8GDB7nkkks4efIkEyZMICsri7S0NN58881at/eDH/yAoUOHMnjwYBYuXFg2/9133yUrK4uMjAwmTJgAwMmTJ5k7dy5paWmkp6eXDZMQfBSxbNky5syZA8CcOXO47bbbGDFiBPfccw9r1qwpG6b5oosuKruZS0lJCfPnzy8bpvm//uu/+OCDD/jBD35Qtt333nuv3MBszSWiT+Ralm9MHXkwtnLnzp0ZPnw477zzDpMnT2bp0qXMmDEDESE+Pp7XX3+dDh06cPToUUaOHMnVV19dNqBZVRYtWkTnzp05ffo0w4YNY9q0aZSWlvKjH/2IVatW0bdvX44dOwbAww8/zDnnnMPmzZsBOH78eK1f58CBA3z88cfExsby7bfflg3TvGLFCu677z5effVVFi5cyN69e8nNzaVVq1YcO3aMTp06cccdd5Cfn09SUhLPPfccN998cx13ZsNFdND3Z/nWY8eYls3fxOMP+n/6058Ad9es++67j1WrVhETE0NeXh6HDx8uuzl4Vf7zP/+T119/HYD9+/ezc+dO8vPzGTNmDH379gVcRQNuOOXgpqVOnTrVWtZrrrmmbLjjgoICbrrpJnbu3ImIcPbs2bLt3nbbbbRq1arc591www288MILzJ07l9WrV7N48eI67afGELFB37J8Y+rBo7GVJ0+ezF133cX69espLCwsGwtoyZIl5Ofnk5OTQ+vWrenTp0+NQxN/+OGHrFixgtWrV5OQkMC4ceNqXL46wUcSFdcPHvL5F7/4BePHj+f1119n7969jBs3rsbtzp07l6uuuor4+HiuueaaskqhOUVsm7615RsTPhITExk/fjw333xz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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"result = model.predict(Test)\nresult = np.argmax(result,axis = 1)\n\nresult.shape","execution_count":36,"outputs":[{"output_type":"execute_result","execution_count":36,"data":{"text/plain":"(28000,)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = pd.Series(result,name=\"Label\")","execution_count":37,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),results],axis = 1)\n\nsubmission.to_csv(\"cnn_mnist_datagen.csv\",index=False)","execution_count":null,"outputs":[]}],"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}