{"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\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport seaborn as sns\n%matplotlib inline\n\nnp.random.seed(2)\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, MaxPool2D\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\n\nsns.set(style='white', context='notebook', palette='deep')\n","execution_count":1,"outputs":[{"output_type":"stream","text":"Using TensorFlow backend.\n","name":"stderr"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Load the data\ntrain = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")","execution_count":2,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_train = train[\"label\"]\n\n# Drop 'label' column\nX_train = train.drop(labels = [\"label\"],axis = 1) \n\n# free some space\ndel train \n\ng = sns.countplot(Y_train)\n\nY_train.value_counts()","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"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":{}},{"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":"# Check the data\nX_train.isnull().any().describe()","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":"count       784\nunique        1\ntop       False\nfreq        784\ndtype: object"},"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":"Y_train","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"0        1\n1        0\n2        1\n3        4\n4        0\n5        0\n6        7\n7        3\n8        5\n9        3\n10       8\n11       9\n12       1\n13       3\n14       3\n15       1\n16       2\n17       0\n18       7\n19       5\n20       8\n21       6\n22       2\n23       0\n24       2\n25       3\n26       6\n27       9\n28       9\n29       7\n        ..\n41970    2\n41971    3\n41972    4\n41973    4\n41974    3\n41975    9\n41976    2\n41977    4\n41978    4\n41979    4\n41980    7\n41981    2\n41982    8\n41983    7\n41984    3\n41985    3\n41986    0\n41987    5\n41988    0\n41989    5\n41990    3\n41991    1\n41992    9\n41993    6\n41994    4\n41995    0\n41996    1\n41997    7\n41998    6\n41999    9\nName: label, Length: 42000, dtype: int64"},"metadata":{}}]},{"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_train = to_categorical(Y_train, num_classes = 10)","execution_count":8,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_train.shape","execution_count":11,"outputs":[{"output_type":"execute_result","execution_count":11,"data":{"text/plain":"(42000, 10)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"random_seed = 2","execution_count":12,"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":13,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Some examples\n","execution_count":16,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Set the CNN model \n# my CNN architechture is In -> [[Conv2D->relu]*2 -> MaxPool2D -> Dropout]*2 -> Flatten -> Dense -> Dropout -> 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\"))\n","execution_count":17,"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":"# Define the optimizer\noptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)","execution_count":18,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Compile the model\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics=[\"accuracy\"])","execution_count":19,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs = 30 # Turn epochs to 30 to get 0.9967 accuracy\nbatch_size = 86","execution_count":25,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndatagen = 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","execution_count":26,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Set a learning rate annealer\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', \n                                            patience=3, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)","execution_count":27,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Fit the model\nhistory = model.fit_generator(datagen.flow(X_train,Y_train, batch_size=batch_size),\n                              epochs = epochs, validation_data = (X_val,Y_val),\n                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size\n                              , callbacks=[learning_rate_reduction])","execution_count":28,"outputs":[{"output_type":"stream","text":"Epoch 1/30\n - 9s - loss: 0.1352 - acc: 0.9592 - val_loss: 0.0442 - val_acc: 0.9857\nEpoch 2/30\n - 8s - loss: 0.0979 - acc: 0.9710 - val_loss: 0.0352 - val_acc: 0.9888\nEpoch 3/30\n - 8s - loss: 0.0815 - acc: 0.9757 - val_loss: 0.0299 - val_acc: 0.9900\nEpoch 4/30\n - 8s - loss: 0.0751 - acc: 0.9783 - val_loss: 0.0381 - val_acc: 0.9893\nEpoch 5/30\n - 9s - loss: 0.0690 - acc: 0.9798 - val_loss: 0.0296 - val_acc: 0.9917\nEpoch 6/30\n - 9s - loss: 0.0636 - acc: 0.9815 - val_loss: 0.0224 - val_acc: 0.9940\nEpoch 7/30\n - 8s - loss: 0.0630 - acc: 0.9827 - val_loss: 0.0272 - val_acc: 0.9926\nEpoch 8/30\n - 8s - loss: 0.0578 - acc: 0.9831 - val_loss: 0.0298 - val_acc: 0.9905\nEpoch 9/30\n - 8s - loss: 0.0590 - acc: 0.9834 - val_loss: 0.0248 - val_acc: 0.9919\n\nEpoch 00009: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.\nEpoch 10/30\n - 8s - loss: 0.0453 - acc: 0.9874 - val_loss: 0.0240 - val_acc: 0.9945\nEpoch 11/30\n - 8s - loss: 0.0423 - acc: 0.9879 - val_loss: 0.0242 - val_acc: 0.9929\nEpoch 12/30\n - 8s - loss: 0.0429 - acc: 0.9874 - val_loss: 0.0267 - val_acc: 0.9936\nEpoch 13/30\n - 8s - loss: 0.0418 - acc: 0.9879 - val_loss: 0.0197 - val_acc: 0.9938\n\nEpoch 00013: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628.\nEpoch 14/30\n - 9s - loss: 0.0340 - acc: 0.9907 - val_loss: 0.0158 - val_acc: 0.9960\nEpoch 15/30\n - 9s - loss: 0.0365 - acc: 0.9899 - val_loss: 0.0161 - val_acc: 0.9948\nEpoch 16/30\n - 8s - loss: 0.0362 - acc: 0.9897 - val_loss: 0.0184 - val_acc: 0.9948\nEpoch 17/30\n - 8s - loss: 0.0346 - acc: 0.9905 - val_loss: 0.0206 - val_acc: 0.9945\n\nEpoch 00017: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814.\nEpoch 18/30\n - 8s - loss: 0.0328 - acc: 0.9911 - val_loss: 0.0162 - val_acc: 0.9950\nEpoch 19/30\n - 8s - loss: 0.0302 - acc: 0.9917 - val_loss: 0.0172 - val_acc: 0.9960\nEpoch 20/30\n - 8s - loss: 0.0308 - acc: 0.9907 - val_loss: 0.0165 - val_acc: 0.9952\n\nEpoch 00020: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05.\nEpoch 21/30\n - 8s - loss: 0.0300 - acc: 0.9905 - val_loss: 0.0169 - val_acc: 0.9945\nEpoch 22/30\n - 8s - loss: 0.0294 - acc: 0.9916 - val_loss: 0.0178 - val_acc: 0.9952\nEpoch 23/30\n - 8s - loss: 0.0275 - acc: 0.9922 - val_loss: 0.0193 - val_acc: 0.9948\n\nEpoch 00023: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05.\nEpoch 24/30\n - 9s - loss: 0.0286 - acc: 0.9918 - val_loss: 0.0171 - val_acc: 0.9950\nEpoch 25/30\n - 9s - loss: 0.0296 - acc: 0.9911 - val_loss: 0.0169 - val_acc: 0.9950\nEpoch 26/30\n - 8s - loss: 0.0291 - acc: 0.9916 - val_loss: 0.0179 - val_acc: 0.9950\n\nEpoch 00026: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05.\nEpoch 27/30\n - 8s - loss: 0.0280 - acc: 0.9918 - val_loss: 0.0161 - val_acc: 0.9948\nEpoch 28/30\n - 8s - loss: 0.0277 - acc: 0.9917 - val_loss: 0.0161 - val_acc: 0.9950\nEpoch 29/30\n - 8s - loss: 0.0287 - acc: 0.9920 - val_loss: 0.0167 - val_acc: 0.9950\n\nEpoch 00029: ReduceLROnPlateau reducing learning rate to 1e-05.\nEpoch 30/30\n - 8s - loss: 0.0302 - acc: 0.9907 - val_loss: 0.0168 - val_acc: 0.9950\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Plot the loss and accuracy curves for training and validation \nfig, ax = plt.subplots(2,1)\nax[0].plot(history.history['loss'], color='b', label=\"Training loss\")\nax[0].plot(history.history['val_loss'], color='r', label=\"validation loss\",axes =ax[0])\nlegend = ax[0].legend(loc='best', shadow=True)\n\nax[1].plot(history.history['acc'], color='b', label=\"Training accuracy\")\nax[1].plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\nlegend = ax[1].legend(loc='best', shadow=True)","execution_count":29,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 2 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAYUAAAEBCAYAAACXArmGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4HPW56PHv9qqVVqveXGR7jIvccDe40QkltOBAgNBJclIuJ5dAgBA4EOCcc0MJNSH0XmxjwIRgqnHvxmXc1HvXrrbvzP1j12vZuEi25FX5fZ5nnyk7O3pHK807vzajUVUVQRAEQQDQJjoAQRAEofcQSUEQBEGIE0lBEARBiBNJQRAEQYgTSUEQBEGIE0lBEARBiBNJQRAEQYgTSUEQBEGIE0lBEARBiBNJQRAEQYgTSUEQBEGI0yc6gGORJMkETAaqgUiCwxEEQegrdEA2sFaW5UBnP9TrkwLRhPBtooMQBEHoo04Dlnd2476QFKoBXn/9dbKyshIdiyAIQp9QU1PDVVddBbFzaGf1haQQAcjKyiIvLy/RsQiCIPQ1Xap279cNzV5/iJ0lTYkOQxAEoc/o10lhzbYafv/kt1TUuRMdiiAIQp/QF6qPjlvR8HS0GvhiXTnXnDcq0eEIQsI1NTVRWVlJMBhMdChCN3E4HBQWFqLVds81fr9OCqkOMxNHZvLFunKuOucUdFpNokMShIRpamqivLycwsJCrFZrt51EhMRRFIV9+/ZRVlbGoEGD0GhO/BzX7/8q5k/Op7HVz5bd9YkORRASqrKyksLCQux2u0gI/YRWqyU/P5/6+noWLVrULSXAfv+XMWVUFnaLgWVryxMdiiAkVDAYxGq1JjoMoZsZjUa0Wi2lpaV88803J7y/fp8UjAYdp0/IZeXWKtp9oUSHIwgJJUoI/c/+KqPk5GQqKytPeH8D4i9k/uQCgmGF5ZtP/BcmCEL3uPzyy7nooos477zzGDVqFBdddBEXXXQRd955Z5f3dcMNN1BRUXHM7e688042bNhwPOEeVmlpKTNnzuy2/Z0IjUZDJHLidwLq1w3N+w3PTyE/086yteWcPW1wosMRBAF49913AaioqODSSy9l8eLFR9w2Eomg0+mO+P4LL7zQqZ/5l7/8pWtBDkADIiloNBrmn1rASx9vp7LeQ266PdEhCYJwFCtWrODRRx9lxIgR7Ny5k9tvv53m5mZee+01wuEwGo2GP/zhD0ydOhWA008/nRdffJHCwkIWLFjAhAkT2LhxI7W1tVxwwQX87ne/A2DBggXcdtttnH766fznf/4ndrudvXv3UlNTw6mnnspDDz2ERqOhurqa//t//y9NTU0UFBQQiUSYO3cuCxYsOGrcX331FY899hiRSIS0tDTuv/9+8vPz2bt3L3feeSd+vx9FUbjsssu47rrr+Oyzz3jiiSfQ6XREIhHuu+8+Tj311B7//R7NgEgKAHMm5fHKJ9tZtrZMjFkQBOCLdWX8e01Zj+z7zCkFzDu14IT2Icsy999/P0VFRQA0Nzdz8cUXA7Bnzx5uvPFGvvrqq8N+tra2ltdffx2Px8MZZ5zBZZddRn5+/g+227NnD//85z8BuPDCC1m9ejXTpk3j/vvv57TTTuPmm2+mvLycCy+8kLlz5x413vr6eu644w7eeOMNCgsLeeutt/j973/PW2+9xWuvvcZZZ53FjTfeCEBraysAjz/+OH/5y18oKioiHA7j9/uP63fVnQZEmwKAK9nCBCmDL9eVE1HURIcjCMIxFBYWxhMCROvvr7/+en70ox9x++23U1tbS1PT4W9jc+6556LVanE4HAwZMoTy8sP3PjzjjDMwGo0YjUZGjRoV32716tVccsklAOTn58dLJEezadMmxowZQ2FhIQCXXXYZ33//PT6fj8mTJ/P222/z2GOPsWrVKhwOBwDTpk3jwQcf5IUXXqC4uBi7PfG1GAOmpADRBudHX13H1j31jB+RkehwBCGh5p164lfzPenQ7rO/+93vuPfee5k7dy6RSIRx48YdsV++0WiMz2u1WsLh8GG3M5lMndruRJ133nlMmjSJ5cuX8+yzz7Jo0SIefvhh7rnnHnbu3MmqVav41a9+xU033cRll13WIzF01oApKQBMHZ2FTYxZEIQ+ye12x++U/M477xAK9VwX8ylTprBw4UIgOuhv9erVx/zM+PHj2bZtG8XFxQB88MEHjB07FovFQklJCenp6Vx66aX84he/YMuWLQDs27ePkSNHct1113HBBRfw/fff99gxddaAKinsH7OwbG05t/pC2CyGRIckCEIn3XXXXdxyyy0kJycze/ZskpKSeuxn3Xvvvdxxxx0sWrSI/Px8ioqKjvnz0tPTefjhh/nd736Hoiik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\n"},"metadata":{}}]},{"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":30,"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":"# Display some error results \n\n# Errors are difference between predicted labels and true labels\nerrors = (Y_pred_classes - Y_true != 0)\n\nY_pred_classes_errors = Y_pred_classes[errors]\nY_pred_errors = Y_pred[errors]\nY_true_errors = Y_true[errors]\nX_val_errors = X_val[errors]\n\ndef display_errors(errors_index,img_errors,pred_errors, obs_errors):\n    \"\"\" This function shows 6 images with their predicted and real labels\"\"\"\n    n = 0\n    nrows = 2\n    ncols = 3\n    fig, ax = plt.subplots(nrows,ncols,sharex=True,sharey=True)\n    for row in range(nrows):\n        for col in range(ncols):\n            error = errors_index[n]\n            ax[row,col].imshow((img_errors[error]).reshape((28,28)))\n            ax[row,col].set_title(\"Predicted label :{}\\nTrue label :{}\".format(pred_errors[error],obs_errors[error]))\n            n += 1\n\n# Probabilities of the wrong predicted numbers\nY_pred_errors_prob = np.max(Y_pred_errors,axis = 1)\n\n# Predicted probabilities of the true values in the error set\ntrue_prob_errors = np.diagonal(np.take(Y_pred_errors, Y_true_errors, axis=1))\n\n# Difference between the probability of the predicted label and the true label\ndelta_pred_true_errors = Y_pred_errors_prob - true_prob_errors\n\n# Sorted list of the delta prob errors\nsorted_dela_errors = np.argsort(delta_pred_true_errors)\n\n# Top 6 errors \nmost_important_errors = sorted_dela_errors[-6:]\n\n# Show the top 6 errors\ndisplay_errors(most_important_errors, X_val_errors, Y_pred_classes_errors, Y_true_errors)","execution_count":31,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 6 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# predict results\nresults = 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":32,"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":35,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}