{"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":1,"outputs":[{"output_type":"stream","text":"['sample_submission.csv', 'test.csv', 'train.csv']\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"**importing the necessary components**"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"from tensorflow.keras import  utils\nfrom tensorflow.python.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Dropout\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau, ModelCheckpoint\nfrom sklearn.model_selection import train_test_split","execution_count":2,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Data preprocessing**"},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")\n","execution_count":3,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"splitting on true labels and features"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = train.drop([\"label\"], axis=1)","execution_count":4,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = train[\"label\"]","execution_count":5,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test=test","execution_count":6,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Reshape data in 2D format"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = np.array(x_train)\nx_test = np.array(x_test)\nx_train=x_train.reshape(x_train.shape[0],28,28,1)\nx_test=x_test.reshape(x_test.shape[0],28,28,1)","execution_count":7,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"convert true labels to categorical format"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = utils.to_categorical(y_train,10)","execution_count":8,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Data normalization**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train / 255\nx_test = x_test / 255","execution_count":9,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"splitting train set to two sets: train and crossvalidation"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train, x_val, y_train , y_val=train_test_split(x_train,y_train,test_size=0.1)","execution_count":10,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Data augmentation**"},{"metadata":{},"cell_type":"markdown","source":"creating a datagenerator"},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen= ImageDataGenerator(\n            zoom_range=0.3,\n            rotation_range=0.2,\n            width_shift_range=0.5,\n            height_shift_range=0.5\n            )","execution_count":11,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Creating a CNN model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()","execution_count":12,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true,"collapsed":true},"cell_type":"code","source":"model.add(Conv2D(filters=32,kernel_size=(5,5),input_shape=(x_train.shape[1:]),padding=\"Same\",activation=\"relu\"))\nmodel.add(Conv2D(filters=32,kernel_size=(5,5),padding=\"Same\",activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\nmodel.add(Conv2D(filters=64,kernel_size=(5,5),padding=\"Same\",activation=\"relu\"))\nmodel.add(Conv2D(filters=64,kernel_size=(5,5),padding=\"Same\",activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),))\nmodel.add(Dropout(0.25))\nmodel.add(Conv2D(filters=128,kernel_size=(5,5),padding=\"Same\",activation=\"relu\"))\nmodel.add(Conv2D(filters=128,kernel_size=(5,5),padding=\"Same\",activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Dropout(0.5))\nmodel.add(Flatten())\nmodel.add(Dense(256,activation=\"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10,activation=\"softmax\"))","execution_count":13,"outputs":[{"output_type":"stream","text":"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:435: 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/tensorflow/python/keras/layers/core.py:143: 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":{},"cell_type":"markdown","source":"compiling our model!"},{"metadata":{"trusted":true,"_kg_hide-output":true,"collapsed":true},"cell_type":"code","source":"model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\nprint(model.summary())","execution_count":14,"outputs":[{"output_type":"stream","text":"_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d (Conv2D)              (None, 28, 28, 32)        832       \n_________________________________________________________________\nconv2d_1 (Conv2D)            (None, 28, 28, 32)        25632     \n_________________________________________________________________\nmax_pooling2d (MaxPooling2D) (None, 14, 14, 32)        0         \n_________________________________________________________________\ndropout (Dropout)            (None, 14, 14, 32)        0         \n_________________________________________________________________\nconv2d_2 (Conv2D)            (None, 14, 14, 64)        51264     \n_________________________________________________________________\nconv2d_3 (Conv2D)            (None, 14, 14, 64)        102464    \n_________________________________________________________________\nmax_pooling2d_1 (MaxPooling2 (None, 7, 7, 64)          0         \n_________________________________________________________________\ndropout_1 (Dropout)          (None, 7, 7, 64)          0         \n_________________________________________________________________\nconv2d_4 (Conv2D)            (None, 7, 7, 128)         204928    \n_________________________________________________________________\nconv2d_5 (Conv2D)            (None, 7, 7, 128)         409728    \n_________________________________________________________________\nmax_pooling2d_2 (MaxPooling2 (None, 3, 3, 128)         0         \n_________________________________________________________________\ndropout_2 (Dropout)          (None, 3, 3, 128)         0         \n_________________________________________________________________\nflatten (Flatten)            (None, 1152)              0         \n_________________________________________________________________\ndense (Dense)                (None, 256)               295168    \n_________________________________________________________________\ndropout_3 (Dropout)          (None, 256)               0         \n_________________________________________________________________\ndense_1 (Dense)              (None, 10)                2570      \n=================================================================\nTotal params: 1,092,586\nTrainable params: 1,092,586\nNon-trainable params: 0\n_________________________________________________________________\nNone\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"**Creating some callbacks**"},{"metadata":{"trusted":true},"cell_type":"code","source":"checkpoint=ModelCheckpoint(\"mnistCNN\",\n                           monitor=\"val_acc\",\n                          save_best_only=True,\n                          verbose=1)","execution_count":15,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"lr_reduce=ReduceLROnPlateau(monitor=\"val_acc\",\n                            patience=4,\n                            verbose=1,\n                            factor=0.5,\n                            min_lr=0.00000001\n    )","execution_count":16,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**training our model**"},{"metadata":{"trusted":true,"_kg_hide-output":true,"collapsed":true},"cell_type":"code","source":"model.fit(datagen.flow(x_train,y_train,batch_size=100),\n         batch_size=1,\n         epochs=40,\n         validation_data=(x_val,y_val),\n         verbose=1,\n         callbacks=[checkpoint,lr_reduce])","execution_count":18,"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/40\n4200/4200 [==============================] - 0s 97us/sample - loss: 0.3395 - acc: 0.9062\n\nEpoch 00001: val_acc improved from -inf to 0.90619, saving model to mnistCNN\n378/378 [==============================] - 13s 33ms/step - loss: 1.8936 - acc: 0.2800 - val_loss: 0.3395 - val_acc: 0.9062\nEpoch 2/40\n4200/4200 [==============================] - 0s 66us/sample - loss: 0.0865 - acc: 0.9779\n\nEpoch 00002: val_acc improved from 0.90619 to 0.97786, saving model to mnistCNN\n378/378 [==============================] - 11s 30ms/step - loss: 0.8028 - acc: 0.7361 - val_loss: 0.0865 - val_acc: 0.9779\nEpoch 3/40\n4200/4200 [==============================] - 0s 60us/sample - loss: 0.0740 - acc: 0.9831\n\nEpoch 00003: val_acc improved from 0.97786 to 0.98310, saving model to mnistCNN\n378/378 [==============================] - 11s 29ms/step - loss: 0.5661 - acc: 0.8146 - val_loss: 0.0740 - val_acc: 0.9831\nEpoch 4/40\n4200/4200 [==============================] - 0s 62us/sample - loss: 0.0622 - acc: 0.9867\n\nEpoch 00004: val_acc improved from 0.98310 to 0.98667, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.4934 - acc: 0.8400 - val_loss: 0.0622 - val_acc: 0.9867\nEpoch 5/40\n4200/4200 [==============================] - 0s 61us/sample - loss: 0.0561 - acc: 0.9867\n\nEpoch 00005: val_acc did not improve from 0.98667\n378/378 [==============================] - 10s 26ms/step - loss: 0.4496 - acc: 0.8531 - val_loss: 0.0561 - val_acc: 0.9867\nEpoch 6/40\n4200/4200 [==============================] - 0s 60us/sample - loss: 0.0429 - acc: 0.9905\n\nEpoch 00006: val_acc improved from 0.98667 to 0.99048, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.4108 - acc: 0.8683 - val_loss: 0.0429 - val_acc: 0.9905\nEpoch 7/40\n4200/4200 [==============================] - 0s 66us/sample - loss: 0.0496 - acc: 0.9888\n\nEpoch 00007: val_acc did not improve from 0.99048\n378/378 [==============================] - 10s 26ms/step - loss: 0.4165 - acc: 0.8669 - val_loss: 0.0496 - val_acc: 0.9888\nEpoch 8/40\n4200/4200 [==============================] - 0s 62us/sample - loss: 0.0437 - acc: 0.9907\n\nEpoch 00008: val_acc improved from 0.99048 to 0.99071, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.3837 - acc: 0.8759 - val_loss: 0.0437 - val_acc: 0.9907\nEpoch 9/40\n4200/4200 [==============================] - 0s 60us/sample - loss: 0.0464 - acc: 0.9902\n\nEpoch 00009: val_acc did not improve from 0.99071\n378/378 [==============================] - 10s 26ms/step - loss: 0.3777 - acc: 0.8763 - val_loss: 0.0464 - val_acc: 0.9902\nEpoch 10/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0430 - acc: 0.9912\n\nEpoch 00010: val_acc improved from 0.99071 to 0.99119, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.3664 - acc: 0.8816 - val_loss: 0.0430 - val_acc: 0.9912\nEpoch 11/40\n4200/4200 [==============================] - 0s 66us/sample - loss: 0.0375 - acc: 0.9910\n\nEpoch 00011: val_acc did not improve from 0.99119\n378/378 [==============================] - 11s 29ms/step - loss: 0.3669 - acc: 0.8810 - val_loss: 0.0375 - val_acc: 0.9910\nEpoch 12/40\n4200/4200 [==============================] - 0s 64us/sample - loss: 0.0408 - acc: 0.9919\n\nEpoch 00012: val_acc improved from 0.99119 to 0.99190, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.3559 - acc: 0.8835 - val_loss: 0.0408 - val_acc: 0.9919\nEpoch 13/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0346 - acc: 0.9929\n\nEpoch 00013: val_acc improved from 0.99190 to 0.99286, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.3481 - acc: 0.8864 - val_loss: 0.0346 - val_acc: 0.9929\nEpoch 14/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0386 - acc: 0.9921\n\nEpoch 00014: val_acc did not improve from 0.99286\n378/378 [==============================] - 10s 26ms/step - loss: 0.3434 - acc: 0.8884 - val_loss: 0.0386 - val_acc: 0.9921\nEpoch 15/40\n4200/4200 [==============================] - 0s 62us/sample - loss: 0.0448 - acc: 0.9914\n\nEpoch 00015: val_acc did not improve from 0.99286\n378/378 [==============================] - 10s 26ms/step - loss: 0.3439 - acc: 0.8885 - val_loss: 0.0448 - val_acc: 0.9914\nEpoch 16/40\n4200/4200 [==============================] - 0s 66us/sample - loss: 0.0370 - acc: 0.9929\n\nEpoch 00016: val_acc did not improve from 0.99286\n378/378 [==============================] - 10s 26ms/step - loss: 0.3349 - acc: 0.8906 - val_loss: 0.0370 - val_acc: 0.9929\nEpoch 17/40\n4200/4200 [==============================] - 0s 61us/sample - loss: 0.0359 - acc: 0.9929\n\nEpoch 00017: val_acc did not improve from 0.99286\n\nEpoch 00017: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.\n378/378 [==============================] - 10s 26ms/step - loss: 0.3379 - acc: 0.8906 - val_loss: 0.0359 - val_acc: 0.9929\nEpoch 18/40\n4200/4200 [==============================] - 0s 65us/sample - loss: 0.0291 - acc: 0.9936\n\nEpoch 00018: val_acc improved from 0.99286 to 0.99357, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.3095 - acc: 0.8984 - val_loss: 0.0291 - val_acc: 0.9936\nEpoch 19/40\n4200/4200 [==============================] - 0s 68us/sample - loss: 0.0264 - acc: 0.9943\n\nEpoch 00019: val_acc improved from 0.99357 to 0.99429, saving model to mnistCNN\n378/378 [==============================] - 11s 30ms/step - loss: 0.2882 - acc: 0.9061 - val_loss: 0.0264 - val_acc: 0.9943\nEpoch 20/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0318 - acc: 0.9943\n\nEpoch 00020: val_acc did not improve from 0.99429\n378/378 [==============================] - 10s 26ms/step - loss: 0.2858 - acc: 0.9045 - val_loss: 0.0318 - val_acc: 0.9943\nEpoch 21/40\n4200/4200 [==============================] - 0s 64us/sample - loss: 0.0278 - acc: 0.9957\n\nEpoch 00021: val_acc improved from 0.99429 to 0.99571, saving model to mnistCNN\n378/378 [==============================] - 10s 26ms/step - loss: 0.2951 - acc: 0.9028 - val_loss: 0.0278 - val_acc: 0.9957\nEpoch 22/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0336 - acc: 0.9929\n\nEpoch 00022: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2944 - acc: 0.9027 - val_loss: 0.0336 - val_acc: 0.9929\nEpoch 23/40\n4200/4200 [==============================] - 0s 61us/sample - loss: 0.0343 - acc: 0.9938\n\nEpoch 00023: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2791 - acc: 0.9074 - val_loss: 0.0343 - val_acc: 0.9938\nEpoch 24/40\n4200/4200 [==============================] - 0s 65us/sample - loss: 0.0341 - acc: 0.9940\n\nEpoch 00024: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2896 - acc: 0.9051 - val_loss: 0.0341 - val_acc: 0.9940\nEpoch 25/40\n4200/4200 [==============================] - 0s 61us/sample - loss: 0.0393 - acc: 0.9926\n\nEpoch 00025: val_acc did not improve from 0.99571\n\nEpoch 00025: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628.\n378/378 [==============================] - 10s 25ms/step - loss: 0.2852 - acc: 0.9044 - val_loss: 0.0393 - val_acc: 0.9926\nEpoch 26/40\n4200/4200 [==============================] - 0s 58us/sample - loss: 0.0350 - acc: 0.9948\n\nEpoch 00026: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 25ms/step - loss: 0.2755 - acc: 0.9081 - val_loss: 0.0350 - val_acc: 0.9948\nEpoch 27/40\n4200/4200 [==============================] - 0s 64us/sample - loss: 0.0328 - acc: 0.9940\n\nEpoch 00027: val_acc did not improve from 0.99571\n378/378 [==============================] - 11s 30ms/step - loss: 0.2612 - acc: 0.9142 - val_loss: 0.0328 - val_acc: 0.9940\nEpoch 28/40\n","name":"stdout"},{"output_type":"stream","text":"4200/4200 [==============================] - 0s 60us/sample - loss: 0.0315 - acc: 0.9943\n\nEpoch 00028: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2549 - acc: 0.9147 - val_loss: 0.0315 - val_acc: 0.9943\nEpoch 29/40\n4200/4200 [==============================] - 0s 64us/sample - loss: 0.0322 - acc: 0.9940\n\nEpoch 00029: val_acc did not improve from 0.99571\n\nEpoch 00029: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814.\n378/378 [==============================] - 10s 26ms/step - loss: 0.2602 - acc: 0.9133 - val_loss: 0.0322 - val_acc: 0.9940\nEpoch 30/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0308 - acc: 0.9938\n\nEpoch 00030: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2607 - acc: 0.9138 - val_loss: 0.0308 - val_acc: 0.9938\nEpoch 31/40\n4200/4200 [==============================] - 0s 61us/sample - loss: 0.0342 - acc: 0.9933\n\nEpoch 00031: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2517 - acc: 0.9157 - val_loss: 0.0342 - val_acc: 0.9933\nEpoch 32/40\n4200/4200 [==============================] - 0s 60us/sample - loss: 0.0339 - acc: 0.9933\n\nEpoch 00032: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2558 - acc: 0.9147 - val_loss: 0.0339 - val_acc: 0.9933\nEpoch 33/40\n4200/4200 [==============================] - 0s 70us/sample - loss: 0.0332 - acc: 0.9938\n\nEpoch 00033: val_acc did not improve from 0.99571\n\nEpoch 00033: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05.\n378/378 [==============================] - 11s 30ms/step - loss: 0.2492 - acc: 0.9162 - val_loss: 0.0332 - val_acc: 0.9938\nEpoch 34/40\n4200/4200 [==============================] - 0s 67us/sample - loss: 0.0343 - acc: 0.9940\n\nEpoch 00034: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2503 - acc: 0.9161 - val_loss: 0.0343 - val_acc: 0.9940\nEpoch 35/40\n4200/4200 [==============================] - 0s 64us/sample - loss: 0.0345 - acc: 0.9938\n\nEpoch 00035: val_acc did not improve from 0.99571\n378/378 [==============================] - 11s 29ms/step - loss: 0.2477 - acc: 0.9165 - val_loss: 0.0345 - val_acc: 0.9938\nEpoch 36/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0346 - acc: 0.9936\n\nEpoch 00036: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2436 - acc: 0.9176 - val_loss: 0.0346 - val_acc: 0.9936\nEpoch 37/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0332 - acc: 0.9943\n\nEpoch 00037: val_acc did not improve from 0.99571\n\nEpoch 00037: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05.\n378/378 [==============================] - 10s 26ms/step - loss: 0.2481 - acc: 0.9152 - val_loss: 0.0332 - val_acc: 0.9943\nEpoch 38/40\n4200/4200 [==============================] - 0s 63us/sample - loss: 0.0347 - acc: 0.9938\n\nEpoch 00038: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2478 - acc: 0.9149 - val_loss: 0.0347 - val_acc: 0.9938\nEpoch 39/40\n4200/4200 [==============================] - 0s 59us/sample - loss: 0.0344 - acc: 0.9936\n\nEpoch 00039: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2457 - acc: 0.9166 - val_loss: 0.0344 - val_acc: 0.9936\nEpoch 40/40\n4200/4200 [==============================] - 0s 62us/sample - loss: 0.0346 - acc: 0.9936\n\nEpoch 00040: val_acc did not improve from 0.99571\n378/378 [==============================] - 10s 26ms/step - loss: 0.2390 - acc: 0.9193 - val_loss: 0.0346 - val_acc: 0.9936\n","name":"stdout"},{"output_type":"execute_result","execution_count":18,"data":{"text/plain":"<tensorflow.python.keras.callbacks.History at 0x7f98e40185f8>"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"**predicting on test set**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.load_weights(\"mnistCNN\")","execution_count":19,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = model.predict(x_test)","execution_count":20,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(predictions.shape)","execution_count":21,"outputs":[{"output_type":"stream","text":"(28000, 10)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions=np.argmax(predictions, axis=1)","execution_count":22,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(predictions.shape)","execution_count":23,"outputs":[{"output_type":"stream","text":"(28000,)\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"**creating submission file**"},{"metadata":{"trusted":true},"cell_type":"code","source":"submission=pd.DataFrame({\"ImageId\":range(1,x_test.shape[0]+1),\"Label\": predictions})\n","execution_count":24,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = submission.to_csv(\"submission.csv\",index=False)","execution_count":25,"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}