{"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 os\nprint(os.listdir(\"../input\"))\n\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\n#import seaborn as sns\n#import matplotlib inline\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 keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, BatchNormalization\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras import backend as K\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom keras.optimizers import Adam \nfrom keras.utils import np_utils\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau","execution_count":2,"outputs":[{"output_type":"stream","text":"Using TensorFlow backend.\n","name":"stderr"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split","execution_count":3,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Load the data\ntrain = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")\n\ny_train = train[\"label\"]\n\n# Drop 'label' column\nx_train = train.drop(labels = [\"label\"],axis = 1) \n\ny_train.value_counts()","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"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":"# Normalize the data\nx_train = x_train / 255.0\ntest = test / 255.0","execution_count":5,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Reshape image in 3 dimensions (height = 28px, width = 28px , canal = 1)\nx_train = x_train.values.reshape(-1,28,28,1)\ntest = test.values.reshape(-1,28,28,1)","execution_count":6,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(x_train.shape)","execution_count":7,"outputs":[{"output_type":"stream","text":"(42000, 28, 28, 1)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"random_seed = 2","execution_count":8,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Split the train and the validation set for the fitting\nx_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size = 0.1, random_state=random_seed)","execution_count":9,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# change our image type to float32 data type\n#x_train = x_train.astype('float32')\n#x_test = x_test.astype('float32')\n\n\n\nprint('x_train shape:', x_train.shape)\nprint(x_train.shape[0], 'train samples')\nprint(x_val.shape[0], 'test samples')\n\n# Now we one hot encode outputs\ny_train = np_utils.to_categorical(y_train)\ny_val = np_utils.to_categorical(y_val)\n\n# Let's count the number columns in our hot encoded matrix \nprint (\"Number of Classes: \" + str(y_val.shape[1]))\n\nnum_classes = y_val.shape[1]\nnum_pixels = x_train.shape[1] * x_train.shape[2]\n\n# create model\nmodel = Sequential()\n\nmodel.add(Conv2D(32, kernel_size=(3, 3),\n                 activation='relu',\n                 padding = \"same\",\n                 input_shape=(28,28,1)))\nmodel.add(BatchNormalization())\n\nmodel.add(Conv2D(32, kernel_size=(3, 3),\n                 activation='relu',\n                 padding = \"same\",\n                 input_shape=(28,28,1)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\n#Dense Layers\n\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.5))\n\n#Final Dense Layer\nmodel.add(Dense(num_classes, activation='softmax'))\n\noptimizer = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)\n\nmodel.compile(loss = 'categorical_crossentropy',\n              optimizer = optimizer,\n              metrics = ['accuracy'])\n\nprint(model.summary())\n","execution_count":10,"outputs":[{"output_type":"stream","text":"x_train shape: (37800, 28, 28, 1)\n37800 train samples\n4200 test samples\nNumber of Classes: 10\nWARNING: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_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d_1 (Conv2D)            (None, 28, 28, 32)        320       \n_________________________________________________________________\nbatch_normalization_1 (Batch (None, 28, 28, 32)        128       \n_________________________________________________________________\nconv2d_2 (Conv2D)            (None, 28, 28, 32)        9248      \n_________________________________________________________________\nbatch_normalization_2 (Batch (None, 28, 28, 32)        128       \n_________________________________________________________________\nmax_pooling2d_1 (MaxPooling2 (None, 14, 14, 32)        0         \n_________________________________________________________________\ndropout_1 (Dropout)          (None, 14, 14, 32)        0         \n_________________________________________________________________\nconv2d_3 (Conv2D)            (None, 12, 12, 64)        18496     \n_________________________________________________________________\nbatch_normalization_3 (Batch (None, 12, 12, 64)        256       \n_________________________________________________________________\nmax_pooling2d_2 (MaxPooling2 (None, 6, 6, 64)          0         \n_________________________________________________________________\ndropout_2 (Dropout)          (None, 6, 6, 64)          0         \n_________________________________________________________________\nflatten_1 (Flatten)          (None, 2304)              0         \n_________________________________________________________________\ndense_1 (Dense)              (None, 128)               295040    \n_________________________________________________________________\nbatch_normalization_4 (Batch (None, 128)               512       \n_________________________________________________________________\ndropout_3 (Dropout)          (None, 128)               0         \n_________________________________________________________________\ndense_2 (Dense)              (None, 10)                1290      \n=================================================================\nTotal params: 325,418\nTrainable params: 324,906\nNon-trainable params: 512\n_________________________________________________________________\nNone\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(\n        featurewise_center=False,  # set input mean to 0 over the dataset\n        samplewise_center=False,  # set each sample mean to 0\n        featurewise_std_normalization=False,  # divide inputs by std of the dataset\n        samplewise_std_normalization=False,  # divide each input by its std\n        zca_whitening=False,  # apply ZCA whitening\n        rotation_range=10,  # randomly rotate images in the range (degrees, 0 to 180)\n        zoom_range = 0.1, # Randomly zoom image \n        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)\n        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)\n        horizontal_flip=False,  # randomly flip images\n        vertical_flip=False)  # randomly flip images\n\n\ndatagen.fit(x_train)","execution_count":11,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"batch_size = 128\nepochs = 50\n\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_loss', \n                                            patience=2, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)\nearlystop = EarlyStopping(monitor = 'val_loss', # value being monitored for improvement\n                          min_delta = 0, #Abs value and is the min change required before we stop\n                          patience = 5, #Number of epochs we wait before stopping \n                          verbose = 1,\n                          restore_best_weights = True) #keeps the best weigths once stopped\n\ncallbacks = [earlystop, learning_rate_reduction]\n\nhistory = model.fit_generator(datagen.flow(x_train,y_train, batch_size=batch_size),\n          epochs=epochs,\n          verbose=1,\n          callbacks=callbacks,\n          steps_per_epoch = x_train.shape[0] // batch_size,\n          validation_data = (x_val, y_val))\n\n\nscore = model.evaluate(x_val, y_val, verbose=0)\nprint('Test loss:', score[0])\nprint('Test accuracy:', score[1])","execution_count":12,"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/50\n295/295 [==============================] - 11s 38ms/step - loss: 0.5241 - acc: 0.8377 - val_loss: 0.0995 - val_acc: 0.9671\nEpoch 2/50\n295/295 [==============================] - 9s 29ms/step - loss: 0.1859 - acc: 0.9438 - val_loss: 0.0903 - val_acc: 0.9714\nEpoch 3/50\n295/295 [==============================] - 9s 31ms/step - loss: 0.1375 - acc: 0.9579 - val_loss: 0.0515 - val_acc: 0.9843\nEpoch 4/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.1190 - acc: 0.9646 - val_loss: 0.0481 - val_acc: 0.9855\nEpoch 5/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.1033 - acc: 0.9692 - val_loss: 0.0587 - val_acc: 0.9831\nEpoch 6/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0961 - acc: 0.9715 - val_loss: 0.0418 - val_acc: 0.9864\nEpoch 7/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0876 - acc: 0.9736 - val_loss: 0.0327 - val_acc: 0.9898\nEpoch 8/50\n295/295 [==============================] - 9s 31ms/step - loss: 0.0825 - acc: 0.9752 - val_loss: 0.0342 - val_acc: 0.9898\nEpoch 9/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0766 - acc: 0.9778 - val_loss: 0.0296 - val_acc: 0.9907\nEpoch 10/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0669 - acc: 0.9799 - val_loss: 0.0341 - val_acc: 0.9900\nEpoch 11/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0679 - acc: 0.9790 - val_loss: 0.0282 - val_acc: 0.9910\nEpoch 12/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0638 - acc: 0.9802 - val_loss: 0.0240 - val_acc: 0.9924\nEpoch 13/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0618 - acc: 0.9811 - val_loss: 0.0316 - val_acc: 0.9893\nEpoch 14/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0630 - acc: 0.9803 - val_loss: 0.0324 - val_acc: 0.9893\n\nEpoch 00014: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.\nEpoch 15/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0582 - acc: 0.9823 - val_loss: 0.0209 - val_acc: 0.9936\nEpoch 16/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0511 - acc: 0.9846 - val_loss: 0.0201 - val_acc: 0.9929\nEpoch 17/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0483 - acc: 0.9852 - val_loss: 0.0168 - val_acc: 0.9945\nEpoch 18/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0483 - acc: 0.9852 - val_loss: 0.0183 - val_acc: 0.9929\nEpoch 19/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0479 - acc: 0.9854 - val_loss: 0.0162 - val_acc: 0.9940\nEpoch 20/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0463 - acc: 0.9857 - val_loss: 0.0202 - val_acc: 0.9931\nEpoch 21/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0436 - acc: 0.9870 - val_loss: 0.0214 - val_acc: 0.9924\n\nEpoch 00021: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628.\nEpoch 22/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0410 - acc: 0.9870 - val_loss: 0.0155 - val_acc: 0.9943\nEpoch 23/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0417 - acc: 0.9881 - val_loss: 0.0174 - val_acc: 0.9943\nEpoch 24/50\n295/295 [==============================] - 9s 31ms/step - loss: 0.0370 - acc: 0.9888 - val_loss: 0.0166 - val_acc: 0.9938\n\nEpoch 00024: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814.\nEpoch 25/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0402 - acc: 0.9882 - val_loss: 0.0163 - val_acc: 0.9936\nEpoch 26/50\n295/295 [==============================] - 9s 31ms/step - loss: 0.0353 - acc: 0.9896 - val_loss: 0.0174 - val_acc: 0.9940\n\nEpoch 00026: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05.\nEpoch 27/50\n295/295 [==============================] - 9s 30ms/step - loss: 0.0349 - acc: 0.9889 - val_loss: 0.0167 - val_acc: 0.9938\nRestoring model weights from the end of the best epoch\nEpoch 00027: early stopping\nTest loss: 0.015499095162293608\nTest accuracy: 0.9942857142857143\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"**First Try** <br>\nEpoch 00010: early stopping <br>\nTest loss: 0.03936947566987718 <br>\nTest accuracy: 0.9908333333333333 <br>\nScore: 98.971\n\n**With Batch Normalisation, Data Augmentation and 2 layers deeper network** \n<br>Epoch 00026: early stopping\n<br>Test loss: 0.017659358445075452\n<br> Test accuracy: 0.9948809523809524\n<br> Score : 99.371\n\n**Reducing Validation set From 20% to 10% ** \n<br>Epoch 00029: early stopping\n<br>Test loss: 0.015992487932644076\n<br>Test accuracy: 0.9947619047619047\n<br>Score: 99.471"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plotting our loss chart\nhistory_dict = history.history\n\nloss_values = history_dict['loss']\nval_loss_values = history_dict['val_loss']\nepochs = range(1, len(loss_values) + 1)\n\nline1 = plt.plot(epochs, val_loss_values, label='Validation/Test Loss')\nline2 = plt.plot(epochs, loss_values, label='Training Loss')\nplt.setp(line1, linewidth=2.0, marker = '+', markersize=10.0)\nplt.setp(line2, linewidth=2.0, marker = '4', markersize=10.0)\nplt.xlabel('Epochs') \nplt.ylabel('Loss')\nplt.grid(True)\nplt.legend()\nplt.show()","execution_count":13,"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 our accuracy charts\nhistory_dict = history.history\n\nacc_values = history_dict['acc']\nval_acc_values = history_dict['val_acc']\nepochs = range(1, len(loss_values) + 1)\n\nline1 = plt.plot(epochs, val_acc_values, label='Validation/Test Accuracy')\nline2 = plt.plot(epochs, acc_values, label='Training Accuracy')\nplt.setp(line1, linewidth=2.0, marker = '+', markersize=10.0)\nplt.setp(line2, linewidth=2.0, marker = '4', markersize=10.0)\nplt.xlabel('Epochs') \nplt.ylabel('Accuracy')\nplt.grid(True)\nplt.legend()\nplt.show()","execution_count":14,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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Sv8uNRHorrP1R8mAPJue3NSRzjN9a4bzNv3OR39e6b7ExEQGDx7MkiVLmDBhAvPnz+fyyy9HRIiKiuL9998nLi6OI0eOMHToUC666KJK67pfeOEFmjZtyubNm9mwYQMDBw5073vooYdITEykqKiIsWPHsmHDBm6//XaefPJJli1bRosWpS/K1qxZw9y5c/nf//6HqjJkyBBGjRpFQkIC27ZtY968ebz88stcfvnlvPvuu1x99dUcOXKE8PBwmjVrVml558yZQ6tWrfjmm2/Iy8tj6NChjBs3jnnz5vHLX/6SP/zhDxQVFXHixAkGDx7MK6+8wrp16yo81ooVK+jevTtdu3ZlxIgR7r/h+vXr+fOf/8yXX35JYmIi6enpANx6662cd9553HbbbRQWFnLw4MFSga4iRUVF7qq8o0ePuv/+L774Ik888QR//vOfmTVrFi1btmTDhg2oKhkZGYSGhjJgwAAeffRRwsLCmDt3Lq+//nqV3+UrCxYlrBrKBImSqqiSYPH3v/8dcLpX3nPPPSxfvpyQkBD27t3LwYMHad26dYXHWb58ObfffjuA+yq3xNtvv82cOXMoLCxk//79bNq0qdT+slauXMnEiROJjo4GYNKkSaxYsYKLLrrI3SYBMGjQIHbu3AnAJ598wrhx46os6yeffMLmzZvdVW/Hjh1j27ZtnHXWWdx0003k5uZy8cUX069fv2qrfubNm8fkyZMBmDx5MvPmzWPChAl8/vnnXHHFFSQmJgK431NSUtzfGxYWRlxcXLXB4oorrnAv7969m8svv5wDBw6Ql5fHGWecAcBnn33GggULAKfROiEhAYBzzjmHJUuW0LVrV0JDQ+nRo0eV3+UrCxYlbPS2qWNV3QGU7ZPfeeaiKtP7YsKECdxxxx18++235OTkMGjQIADefPNNDh8+zJo1awgPD6dz58416mr5008/8fjjj7Nq1SoSEhK47rrrTqnLZmRkpHs5NDTUfcJdsmQJd955Z5WfVVWef/55xo4dW25fSkoKixYt4pprruGuu+4qdaIuq6CggPfee49FixbxwAMPUFxcTEZGBtnZ2VV+f9m7srCwMIqLi93rubm5hIWdPA2XBEtw7kzuueceLrzwQj777LNq21NuuOEGnnzySTp37uyuCqtN1mZRwj0vlLVZmMYtJiaGMWPGcP3115dq2D527BitWrUiPDycZcuWsWvXriqPc8455/DWW28B8P3337NhwwYAjh8/TnR0NM2aNePgwYMsWbLE/ZnY2FgyMzPLHWvkyJEsWLCAnJwcsrOzef/99xk5cmSl362qbNiwoVT9f0XOP/98nn/+efddw9atWzlx4gS7du2idevWTJ06lV//+tesXbvWfdKu6A7j008/5ayzzmLPnj3s3LmT3bt388tf/pIPPviAc889l3/961/u6qeS9zFjxvDiiy8CTvXS8ePHad26Nfv27ePo0aPk5uayaFHlVYvHjh2jXbt2qGqpKqXzzjuP5557zv13OHr0KADDhw/nxx9/5N///neVga+mLFiUsOnJTRCZMmUK69evLxUsrrrqKlavXk2fPn144403OPPMM6s8xrRp08jKyqJHjx7cd9997juUfv36MWDAAM4880yuvPJKhg8f7v7M1KlTGT9+vLuBu8TAgQO57rrrGDx4MEOGDOGGG25gwIABlX73mjVrGDBgQLVjB2666SZOP/10d0P2tGnTKCwsZOnSpe58vvfee/z2t860dL/5zW/o27dvuQbuefPmMXHixFLbLrnkEubNm0e/fv246667OOecc+jfv7+7YfnZZ5/l448/pk+fPiQnJ/PDDz8QFRXFPffcQ3JyMuPGjaNnz56V5n3WrFlMnDiRs846i6SkJPf2+++/n4MHD9K7d2/69+/PihUr3PsuvfRSzjnnnCrbcWpMVRvFa9CgQepp2bJl6rWiItVZCar3x6kW5Hn/uXrAp3I2cI2hrJs2bfIq3fHjx0utd/rDh/7ITsCVLae3HnzwQZ03b14t58a/alpWX5x//vmakpJS6f6K/v0Bq9WLc6y1WQDkZoAWQVQzCIsIdG6MKWf62NMDnYV65d577w10FuqVtLQ0hg4dSnJyMqNGjfLLd1iwAGvcNvXeHeedEegsmHqsefPmbNtWO6P8K2NtFmDdZo0xphoWLMBGbxtjTDUsWICN3jbGmGpYsACrhjLGmGpYsACPBm4LFqaeWfkUZB6stcOlpaW5p/Nu3bo17dq1c697ToxXlV//+tds3bq1yjTPPfccb775Zm1kGYCDBw8SFhbmngjQ1D3rDQUeo7ctWJh6JusQ/PcZGP9wrRyuefPm7onyZs2aRUxMTKnZSuHk2KuQSp4YOXfu3Gq/59Zbbz31zHp4++23GTZsGPPmzeOGG26o1WN7KiwsLDX9hjnJr3cWIjJeRLaKyHYRmVnB/o4iskxE1orIBhG5sIL9WSIyo+xna5WN3jb11fDpsP6tWr27qMj27dvp2bMnV111Fb169WL//v1MnTrVPc347Nmz3WlHjBjBunXrKCwsJD4+npkzZ9KvXz+GDRvmnkb73nvvdU8zPmLECGbOnMngwYPp3r07X375JQDZ2dlcffXV9OzZk0svvZTk5ORKZ3ydN28eTz/9NDt27GD//v3u7YsWLWLgwIH069fPPalgRVN4l+S1xPz5891B5+qrr2batGkMHjyYe+65h6+//pphw4YxYMAAhg8f7u6SWlhYyB133EHv3r3p27cvzz//PJ988kmph0EtWbKEyy677JR/j/rIbyFUREKB54DzgFRglYgsVFXPZ2nfi/O41RdEpCewGOjssf9JYAn+VtJmYQ3cpi7NqnxKhtiyG57wYZzFrGM1ys6WLVt44403SE5OBpxnLSQmJlJYWMiYMWO49NJLy01PcezYMUaNGsWjjz7KnXfeyauvvsrMmeWuC1FVvvnmGxYuXMjs2bP56KOP+Nvf/karVq344IMPWL9+fakpzj3t3LmT9PR0Bg0axGWXXcbbb7/N9OnTOXDgANOmTWPFihV06tTJPSdTRVN4V2f//v18/fXXhISEcOzYMVasWEFYWBgfffQR9957L//617944YUX2LdvH+vXryc0NJT09HTi4+O57bbbSEtLo3nz5sydO5frr7/e1z99g+DPO4vBwHZV3aGq+cB8YEKZNArEuZabAftKdojIxcBPwEY/5tFhkwgaQ7du3dyBApyr+YEDBzJw4EA2b97Mpk2byn2mSZMmXHDBBUDp6cPLmjRpUrk0K1eudF+V9+vXj169elX42fnz57snxiuZGhzgq6++YsyYMXTq1Ak4OTX4Z5995q4G85zCuyqXXXaZu9otIyODSy65hN69ezNjxgw2btzoPu7NN99MaGio+/tCQkK46qqreOutt0hPT2fNmjXVTpveUPmzcq4dsMdjPRUYUibNLOATEfktEA38DEBEYoA/4NyV+LcK6ovHID8LQiMhMq769MbUliruANxTlOdnw5wxMOJ30P9Kv2bHc3rsbdu28cwzz/DNN98QHx/P1VdfXeE04xERJ6fHCQ0NrfSZECXTjFeVpjLz5s3jyJEj7plX9+3bx44dO3w6RkhICM40SI6yZfEs+x//+EfOP/98brnlFrZv38748eOrPPb111/PJZdcAjjPoygJJo1NoFtypgCvqeoTIjIM+IeI9MYJIk+palZVs0qKyFRgKkBSUhIpKSnufVlZWaXWK9N9y9e0AXLDYvn6iy9qXpIA8bacjUFjKGuzZs0qnKK7rKKiIjIzM4n66A5I6kdut1+CF5/zRV5eHuHh4WRmZpKVlUVxcbE7b/v37yc6OhoRYdu2bXz00UeMGjWKzMxMioqKyM7OdqcteT9x4gQFBQVkZmaSl5dHbm5uufSe35OcnMy7777L2WefzcaNG9m0aVOp44JTNZafn8+WLVvc22bPns3rr7/ONddcw+23387GjRvp2LEj6enpJCYmMmrUKJ566ikeeughdzVUQkIC8fHxrF27lq5du/Lvf/+bFi1akJmZSUFBASdOnHB/b1paGomJiWRmZvLSSy+58zty5EieffZZBgwY4K6GSkxMJD4+nvj4eB555BE+/PDDSn/fkt80kHJzc2v8f8ifwWIv0MFjvb1rm6ffAOMBVPUrEYkCWuDcgVwqIo8B8UCxiOSq6rOeH1bVOcAcgOTkZB09erR7X0pKCp7rlWqbB28tJapZknfp6xmvy9kINIaybt68udRDjSqTmZlJ7PaFcOg7uPFzwiOiq/2MryIjI4mMjCQ2NpaYmBhCQkLceRs5ciS9e/fmrLPOolOnTowYMYImTZoQGxtLaGgo0dHR7rQl702aNCE8PJzY2FgiIyOJiooqlz47O9v9PTNmzODKK69kyJAh9OzZk549e9K2bdtSf5+FCxdyySWXlNo2ZcoUrr32Wh544AFefPFFrrrqKlSVtm3bsmTJEh566CFuueUWhg0bRmhoKA8++CAXXXQRjz32GJdccgmtWrVi0KBB5OXlERsbS3h4uLts4NxZXH/99Tz22GNccMEF7vxOnz6dPXv2MHz4cMLCwpg2bRo333wzANdccw0vvvhipe0uUP6BVoEQFRVV5dTvVfJmatqavHAC0Q6gCxABrAd6lUmzBLjOtdwDp81CyqSZBcyo7vtqPEX5lsXO1ORP9fEufT3TGKbt9lZjKKtPU5SveEr1oHfpG6KCggI9dOiQqqr+8MMP2rlzZy0oKAhwrmrmpptu0tdee63KNHUxRXl16uUU5apaKCK3AR8DocCrqrpRRGa7MrcQ+D3wsojcgdPYfZ0r83WnqACi4iFjV/neKaNmwpi76zQ7xriN+F2gc+BXWVlZjBs3juLiYlSVl156qUGOcejfvz8JCQn89a9/DXRW/Mqvv4yqLsbpDuu57T6P5U3A8LKfK5N+ll8yV+K0sRCTBOMf8XsDojHmpPj4eJYvXx7wqplTVdnYkMbGpvtYNAPaJ1ugMMaYKjS8e77atPZN2Pct3Ph5oHNigoiqVvvsaGNq26nW8Af3nUX2YbjsNfBDTxNjKhIVFUVaWtop/8c1xheqSlpaGlFRUTU+RnDfWTTyBkRT/7Rv357U1FQOHz5cZbrc3NxT+o/dUARLOSHwZY2KiqJ9+/Y1/nxwBwtj6lh4eDhdunSpNl1KSkrN+8M3IMFSTmj4ZQ3uaihjjDFesWBhjDGmWhYsjDHGVEsaS68METkM7PLY1AI4EqDs1KVgKSdYWRujYCkn1N+ydlLVarE2TagAAAULSURBVJ/81miCRVkislpVk6tP2bAFSznBytoYBUs5oeGX1aqhjDHGVMuChTHGmGo15mAxJ9AZqCPBUk6wsjZGwVJOaOBlbbRtFsYYY2pPY76zMMYYU0saXbAQkfEislVEtovIzEDnx59EZKeIfCci60RkdaDzU5tE5FUROSQi33tsSxSRT0Vkm+s9IZB5rA2VlHOWiOx1/a7rROTCQOaxtohIBxFZJiKbRGSjiEx3bW9Uv2sV5WzQv2ujqoYSkVDgB+A8IBVYBUxxPWSp0RGRnUCyqtbHvtunRETOAbKAN1S1t2vbY0C6qj7quhBIUNU/BDKfp6qScs4CslT18UDmrbaJSBugjap+KyKxwBrgYuA6GtHvWkU5L6cB/66N7c5iMLBdVXeoaj4wH5gQ4DyZGlDV5UB6mc0TgNddy6/j/Ads0CopZ6OkqvtV9VvXciawGWhHI/tdqyhng9bYgkU7YI/HeiqN4EeqggKfiMgaEZka6MzUgSRV3e9aPgAkBTIzfnabiGxwVVM16GqZiohIZ2AA8D8a8e9appzQgH/XxhYsgs0IVR0IXADc6qrSCArq1J82njrU0l4AugH9gf3AE4HNTu0SkRjgXeB3qnrcc19j+l0rKGeD/l0bW7DYC3TwWG/v2tYoqepe1/sh4H2carjG7KCrPrikXvhQgPPjF6p6UFWLVLUYeJlG9LuKSDjOCfRNVX3PtbnR/a4VlbOh/66NLVisAk4XkS4iEgFMBhYGOE9+ISLRrsYzRCQaGAd8X/WnGryFwLWu5WuBDwKYF78pOXG6TKSR/K7iPHj878BmVX3SY1ej+l0rK2dD/10bVW8oAFd3tKeBUOBVVX0owFnyCxHpinM3Ac4TD9/6/+3dP2hdZRjH8e/P2CEgFGnBpYYMZhKtipN0CK4dhYbSSRw0gzpJxMXFqWNqlzpIQVFcmjFYokhBoV1ixFWy2ZIMEQISJD4O5y292MaTf9fbhO8HLvec514O5+UOz33e997nPU5jTfIVME3XqfMe8DGwAHwDTNB1GL5QVUd6cXiHcU7TTVUUsAq8PTCnf2QlOQfcAn4B/m7hj+jm84/N5/of47zIEf5cj12ykCQdvuM2DSVJGgKThSSpl8lCktTLZCFJ6mWykCT1MllIPZJsD3QKXT7MbsZJJgc7zkqPqydHfQPSEfBnVb006puQRsnKQtqntp/I5banyO0kz7X4ZJLvWsO4pSQTLf5MkhtJfm6P19qlxpJ81vY++DbJeHv/e21PhJUkX49omBJgspB2Y/xf01AzA6/9UVUvAJ/SdQ4AuAJcr6oXgS+B+RafB36oqrPAK8CvLT4FXK2q54EN4I0W/xB4uV3nnWENTtoN/8Et9UiyWVVPPSK+CrxeVb+1xnF3q+pUknW6zW/+avHfq+p0kjXgTFVtDVxjErhZVVPtfA44UVWfJFmk2xhpAVioqs0hD1XakZWFdDC1w/FebA0cb/NgLfE8cJWuCrmTxDVGjYzJQjqYmYHnn9rxj3QdjwEu0TWVA1gCZqHbAjjJyZ0umuQJ4Nmq+h6YA04CD1U30v/FbypSv/EkywPni1V1/+ezTydZoasOLrbYu8DnST4A1oA3W/x94FqSt+gqiFm6TXAeZQz4oiWUAPNVtXFoI5L2yDULaZ/amsWrVbU+6nuRhs1pKElSLysLSVIvKwtJUi+ThSSpl8lCktTLZCFJ6mWykCT1MllIknr9A5lBceA5V65NAAAAAElFTkSuQmCC\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = model.predict(test)\n\n# select the indix with the maximum probability\nresults = np.argmax(results,axis = 1)\n\nresults = pd.Series(results,name=\"Label\")","execution_count":15,"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(\"2.csv\",index=False)","execution_count":16,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![](http://)![](http://)"}],"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}