{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Imports"},{"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 \nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport keras\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.datasets import mnist\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%matplotlib inline\n# Any results you write to the current directory are saved as output.","execution_count":1,"outputs":[{"output_type":"stream","text":"['test.csv', 'train.csv', 'sample_submission.csv']\n","name":"stdout"},{"output_type":"stream","text":"Using TensorFlow backend.\n","name":"stderr"}]},{"metadata":{},"cell_type":"markdown","source":"# Load the Dataset and Normalize it"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# Load Train and test dataset and normalize them\ndf_train = pd.read_csv(\"../input/train.csv\")\nx_train = np.array(df_train.iloc[:,1:])\nx_train = np.array([np.reshape(i, (28, 28, 1)) for i in x_train])\ny_train = np.array(df_train.iloc[:,0])\n\nx_train = x_train/255.0\ny_train = keras.utils.to_categorical(y_train)\n\ndf_test = pd.read_csv(\"../input/test.csv\")\nx_test = np.array(df_test)\nx_test = np.array([np.reshape(i, (28, 28, 1)) for i in x_test])\nx_test = x_test/255.0\n\nprint(x_train.shape, y_train.shape)","execution_count":11,"outputs":[{"output_type":"stream","text":"(42000, 28, 28, 1) (42000, 10)\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"# Split the dataset into training and testing set"},{"metadata":{"trusted":true,"_uuid":"924b12b832caf3c2dafc7b54af1519a6d2299242"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, Y_train, Y_test = train_test_split(x_train, y_train, test_size=0.2, stratify=y_train)\nprint(X_train.shape, Y_train.shape, X_test.shape, Y_test.shape)","execution_count":14,"outputs":[{"output_type":"stream","text":"(33600, 28, 28, 1) (33600, 10) (8400, 28, 28, 1) (8400, 10)\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"# Sample Plot"},{"metadata":{"trusted":true,"_uuid":"01243decff8e46085178cddbe6b932a2c226752c"},"cell_type":"code","source":"# Plot a sample image with label\nimg_num = 8008\nplt.imshow(x_train[img_num][:,:,0], cmap='gray')\nplt.title(np.argmax(y_train[img_num]), fontsize=25)\nplt.show()","execution_count":17,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"# Model Architecture"},{"metadata":{"trusted":true,"_uuid":"44ba38fadf515c9a845c64968e506a21e2bbd926"},"cell_type":"code","source":"model = keras.models.Sequential()\n\nmodel.add(keras.layers.Conv2D(filters=32, kernel_size=(3,3), kernel_initializer='random_uniform', padding='same', activation='relu', input_shape=(X_train.shape[1:])))\nmodel.add(keras.layers.Conv2D(filters=32, kernel_size=(3,3), kernel_initializer='random_uniform', padding='same', activation='relu'))\nmodel.add(keras.layers.MaxPool2D(pool_size=(2,2)))\n\nmodel.add(keras.layers.Conv2D(filters=64, kernel_size=(5,5), kernel_initializer='random_uniform', padding='same', activation='relu'))\nmodel.add(keras.layers.Conv2D(filters=64, kernel_size=(5,5), kernel_initializer='random_uniform', padding='same', activation='relu'))\nmodel.add(keras.layers.MaxPool2D(pool_size=(2,2)))\n\nmodel.add(keras.layers.Conv2D(filters=128, kernel_size=(7,7), kernel_initializer='random_uniform', padding='same', activation='relu'))\nmodel.add(keras.layers.Conv2D(filters=128, kernel_size=(7,7), kernel_initializer='random_uniform', padding='same', activation='relu'))\nmodel.add(keras.layers.MaxPool2D(pool_size=(3,3)))\n\nmodel.add(keras.layers.Conv2D(filters=256, kernel_size=(7,7), padding='same'))\nmodel.add(keras.layers.BatchNormalization())\nmodel.add(keras.layers.Activation('relu'))\n\nmodel.add(keras.layers.Flatten())\nmodel.add(keras.layers.Dense(units=256, activation='relu'))\nmodel.add(keras.layers.Dropout(0.5))\nmodel.add(keras.layers.Dense(units=100, activation='relu'))\nmodel.add(keras.layers.Dropout(0.5))\nmodel.add(keras.layers.Dense(units=y_train.shape[1], activation='softmax'))\n\nmodel.summary()","execution_count":25,"outputs":[{"output_type":"stream","text":"_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d_14 (Conv2D)           (None, 28, 28, 32)        320       \n_________________________________________________________________\nconv2d_15 (Conv2D)           (None, 28, 28, 32)        9248      \n_________________________________________________________________\nmax_pooling2d_9 (MaxPooling2 (None, 14, 14, 32)        0         \n_________________________________________________________________\nconv2d_16 (Conv2D)           (None, 14, 14, 64)        51264     \n_________________________________________________________________\nconv2d_17 (Conv2D)           (None, 14, 14, 64)        102464    \n_________________________________________________________________\nmax_pooling2d_10 (MaxPooling (None, 7, 7, 64)          0         \n_________________________________________________________________\nconv2d_18 (Conv2D)           (None, 7, 7, 128)         401536    \n_________________________________________________________________\nconv2d_19 (Conv2D)           (None, 7, 7, 128)         802944    \n_________________________________________________________________\nmax_pooling2d_11 (MaxPooling (None, 2, 2, 128)         0         \n_________________________________________________________________\nconv2d_20 (Conv2D)           (None, 2, 2, 256)         1605888   \n_________________________________________________________________\nbatch_normalization_3 (Batch (None, 2, 2, 256)         1024      \n_________________________________________________________________\nactivation_3 (Activation)    (None, 2, 2, 256)         0         \n_________________________________________________________________\nflatten_4 (Flatten)          (None, 1024)              0         \n_________________________________________________________________\ndense_12 (Dense)             (None, 256)               262400    \n_________________________________________________________________\ndropout_12 (Dropout)         (None, 256)               0         \n_________________________________________________________________\ndense_13 (Dense)             (None, 100)               25700     \n_________________________________________________________________\ndropout_13 (Dropout)         (None, 100)               0         \n_________________________________________________________________\ndense_14 (Dense)             (None, 10)                1010      \n=================================================================\nTotal params: 3,263,798\nTrainable params: 3,263,286\nNon-trainable params: 512\n_________________________________________________________________\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"# Train the Model"},{"metadata":{"trusted":true,"_uuid":"f6a3b0299790147baf6f07a085acf9745b9ca8ce"},"cell_type":"code","source":"# Configure and train the model\nmodel.compile(loss='categorical_crossentropy',optimizer='Adam', metrics=['accuracy'])\nhistory = model.fit(X_train, Y_train,  batch_size=500, epochs=50, validation_data=(X_test,Y_test))","execution_count":null,"outputs":[{"output_type":"stream","text":"Train on 33600 samples, validate on 8400 samples\nEpoch 1/100\n33600/33600 [==============================] - 5s 157us/step - loss: 0.8743 - acc: 0.7000 - val_loss: 0.1588 - val_acc: 0.9580\nEpoch 2/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.1274 - acc: 0.9690 - val_loss: 0.0993 - val_acc: 0.9731\nEpoch 3/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0762 - acc: 0.9825 - val_loss: 0.0799 - val_acc: 0.9795\nEpoch 4/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0587 - acc: 0.9859 - val_loss: 0.0859 - val_acc: 0.9806\nEpoch 5/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0459 - acc: 0.9888 - val_loss: 0.0675 - val_acc: 0.9857\nEpoch 6/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0345 - acc: 0.9918 - val_loss: 0.0665 - val_acc: 0.9889\nEpoch 7/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0344 - acc: 0.9921 - val_loss: 0.0793 - val_acc: 0.9829\nEpoch 8/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0233 - acc: 0.9946 - val_loss: 0.0597 - val_acc: 0.9882\nEpoch 9/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0249 - acc: 0.9940 - val_loss: 0.0751 - val_acc: 0.9854\nEpoch 10/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0159 - acc: 0.9958 - val_loss: 0.0567 - val_acc: 0.9895\nEpoch 11/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0183 - acc: 0.9956 - val_loss: 0.0628 - val_acc: 0.9874\nEpoch 12/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0178 - acc: 0.9956 - val_loss: 0.0547 - val_acc: 0.9911\nEpoch 13/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0116 - acc: 0.9971 - val_loss: 0.0498 - val_acc: 0.9914\nEpoch 14/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0166 - acc: 0.9963 - val_loss: 0.0991 - val_acc: 0.9819\nEpoch 15/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0164 - acc: 0.9959 - val_loss: 0.0488 - val_acc: 0.9917\nEpoch 16/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0145 - acc: 0.9966 - val_loss: 0.0499 - val_acc: 0.9890\nEpoch 17/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0102 - acc: 0.9975 - val_loss: 0.0694 - val_acc: 0.9892\nEpoch 18/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0095 - acc: 0.9982 - val_loss: 0.0628 - val_acc: 0.9915\nEpoch 19/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0074 - acc: 0.9981 - val_loss: 0.0800 - val_acc: 0.9887\nEpoch 20/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0066 - acc: 0.9985 - val_loss: 0.0504 - val_acc: 0.9918\nEpoch 21/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0063 - acc: 0.9985 - val_loss: 0.0708 - val_acc: 0.9876\nEpoch 22/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0166 - acc: 0.9963 - val_loss: 0.0585 - val_acc: 0.9907\nEpoch 23/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0095 - acc: 0.9977 - val_loss: 0.0472 - val_acc: 0.9925\nEpoch 24/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0073 - acc: 0.9983 - val_loss: 0.0572 - val_acc: 0.9920\nEpoch 25/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0082 - acc: 0.9980 - val_loss: 0.0608 - val_acc: 0.9898\nEpoch 26/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0087 - acc: 0.9976 - val_loss: 0.0542 - val_acc: 0.9919\nEpoch 27/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0112 - acc: 0.9976 - val_loss: 0.0727 - val_acc: 0.9892\nEpoch 28/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0051 - acc: 0.9990 - val_loss: 0.0674 - val_acc: 0.9888\nEpoch 29/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0096 - acc: 0.9980 - val_loss: 0.0628 - val_acc: 0.9918\nEpoch 30/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0077 - acc: 0.9982 - val_loss: 0.0557 - val_acc: 0.9904\nEpoch 31/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0028 - acc: 0.9993 - val_loss: 0.0492 - val_acc: 0.9926\nEpoch 32/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0015 - acc: 0.9997 - val_loss: 0.0614 - val_acc: 0.9917\nEpoch 33/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0051 - acc: 0.9987 - val_loss: 0.0772 - val_acc: 0.9904\nEpoch 34/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0094 - acc: 0.9979 - val_loss: 0.0751 - val_acc: 0.9902\nEpoch 35/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0060 - acc: 0.9984 - val_loss: 0.0631 - val_acc: 0.9913\nEpoch 36/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0033 - acc: 0.9992 - val_loss: 0.0729 - val_acc: 0.9896\nEpoch 37/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0043 - acc: 0.9989 - val_loss: 0.0701 - val_acc: 0.9905\nEpoch 38/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0076 - acc: 0.9985 - val_loss: 0.1050 - val_acc: 0.9876\nEpoch 39/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0077 - acc: 0.9979 - val_loss: 0.0708 - val_acc: 0.9898\nEpoch 40/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0054 - acc: 0.9987 - val_loss: 0.0799 - val_acc: 0.9904\nEpoch 41/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0109 - acc: 0.9980 - val_loss: 0.0657 - val_acc: 0.9899\nEpoch 42/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0043 - acc: 0.9990 - val_loss: 0.0658 - val_acc: 0.9915\nEpoch 43/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0154 - acc: 0.9964 - val_loss: 0.0548 - val_acc: 0.9919\nEpoch 44/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0059 - acc: 0.9988 - val_loss: 0.0600 - val_acc: 0.9914\nEpoch 45/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0015 - acc: 0.9996 - val_loss: 0.0491 - val_acc: 0.9937\nEpoch 46/100\n33600/33600 [==============================] - 3s 95us/step - loss: 9.7250e-04 - acc: 0.9997 - val_loss: 0.0514 - val_acc: 0.9933\nEpoch 47/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0017 - acc: 0.9996 - val_loss: 0.0576 - val_acc: 0.9924\nEpoch 48/100\n33600/33600 [==============================] - 3s 95us/step - loss: 5.3696e-04 - acc: 0.9999 - val_loss: 0.0542 - val_acc: 0.9931\nEpoch 49/100\n33600/33600 [==============================] - 3s 95us/step - loss: 2.7037e-04 - acc: 1.0000 - val_loss: 0.0487 - val_acc: 0.9942\nEpoch 50/100\n33600/33600 [==============================] - 3s 95us/step - loss: 1.3128e-04 - acc: 1.0000 - val_loss: 0.0487 - val_acc: 0.9943\nEpoch 51/100\n33600/33600 [==============================] - 3s 95us/step - loss: 2.0578e-04 - acc: 0.9999 - val_loss: 0.0496 - val_acc: 0.9938\nEpoch 52/100\n33600/33600 [==============================] - 3s 95us/step - loss: 1.4728e-04 - acc: 0.9999 - val_loss: 0.0547 - val_acc: 0.9936\nEpoch 53/100\n33600/33600 [==============================] - 3s 95us/step - loss: 1.2013e-04 - acc: 1.0000 - val_loss: 0.0533 - val_acc: 0.9938\nEpoch 54/100\n33600/33600 [==============================] - 3s 95us/step - loss: 1.4216e-04 - acc: 1.0000 - val_loss: 0.0562 - val_acc: 0.9939\nEpoch 55/100\n33600/33600 [==============================] - 3s 95us/step - loss: 3.3685e-04 - acc: 0.9999 - val_loss: 0.0563 - val_acc: 0.9935\nEpoch 56/100\n33600/33600 [==============================] - 3s 96us/step - loss: 1.5299e-04 - acc: 0.9999 - val_loss: 0.0572 - val_acc: 0.9933\nEpoch 57/100\n33600/33600 [==============================] - 3s 95us/step - loss: 1.2736e-04 - acc: 1.0000 - val_loss: 0.0580 - val_acc: 0.9935\nEpoch 58/100\n33600/33600 [==============================] - 3s 96us/step - loss: 3.9958e-05 - acc: 1.0000 - val_loss: 0.0593 - val_acc: 0.9932\nEpoch 59/100\n","name":"stdout"},{"output_type":"stream","text":"33600/33600 [==============================] - 3s 96us/step - loss: 5.3700e-05 - acc: 1.0000 - val_loss: 0.0597 - val_acc: 0.9932\nEpoch 60/100\n33600/33600 [==============================] - 3s 95us/step - loss: 5.7279e-05 - acc: 1.0000 - val_loss: 0.0588 - val_acc: 0.9932\nEpoch 61/100\n33600/33600 [==============================] - 3s 95us/step - loss: 2.9113e-05 - acc: 1.0000 - val_loss: 0.0601 - val_acc: 0.9932\nEpoch 62/100\n33600/33600 [==============================] - 3s 95us/step - loss: 3.4095e-05 - acc: 1.0000 - val_loss: 0.0603 - val_acc: 0.9932\nEpoch 63/100\n33600/33600 [==============================] - 3s 96us/step - loss: 3.7733e-05 - acc: 1.0000 - val_loss: 0.0607 - val_acc: 0.9931\nEpoch 64/100\n33600/33600 [==============================] - 3s 95us/step - loss: 6.3717e-05 - acc: 1.0000 - val_loss: 0.0607 - val_acc: 0.9932\nEpoch 65/100\n33600/33600 [==============================] - 3s 95us/step - loss: 3.3562e-05 - acc: 1.0000 - val_loss: 0.0607 - val_acc: 0.9933\nEpoch 66/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0042 - acc: 0.9996 - val_loss: 0.3160 - val_acc: 0.9700\nEpoch 67/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0369 - acc: 0.9924 - val_loss: 0.1066 - val_acc: 0.9865\nEpoch 68/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0200 - acc: 0.9959 - val_loss: 0.0566 - val_acc: 0.9918\nEpoch 69/100\n33600/33600 [==============================] - 3s 96us/step - loss: 0.0109 - acc: 0.9978 - val_loss: 0.0681 - val_acc: 0.9898\nEpoch 70/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0131 - acc: 0.9974 - val_loss: 0.0716 - val_acc: 0.9885\nEpoch 71/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0101 - acc: 0.9979 - val_loss: 0.0442 - val_acc: 0.9929\nEpoch 72/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0070 - acc: 0.9987 - val_loss: 0.0494 - val_acc: 0.9937\nEpoch 73/100\n33600/33600 [==============================] - 3s 95us/step - loss: 0.0020 - acc: 0.9995 - val_loss: 0.0558 - val_acc: 0.9927\nEpoch 74/100\n 9000/33600 [=======>......................] - ETA: 2s - loss: 0.0013 - acc: 0.9998","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"# Plot Accuracy Graph"},{"metadata":{"trusted":true,"_uuid":"4b21f44429f8a967d29e81b387cf617635efb4c8"},"cell_type":"code","source":"# Plot the model Accuracy graph\nplt.figure(figsize=[8,6])\nplt.plot(history.history['acc'],'r',linewidth=3.0)\nplt.plot(history.history['val_acc'],'b',linewidth=3.0)\nplt.legend(['Training  Accuracy', 'Test Accuracy'],fontsize=18)\nplt.xlabel('Epochs ',fontsize=16)\nplt.ylabel('Accuracy',fontsize=16)\nplt.title('Accuracy Curves',fontsize=16)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"72692c1f2e41f039eb90f887ce76818616fa2153"},"cell_type":"code","source":"# img_num = 1\n# plt.imshow(X_test[img_num][:,:,0], cmap='gray')\n# plt.title(np.argmax(model.predict(X_test[img_num:img_num+1])), fontsize=25)\n# plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d8c867862231a247fa227fd13901c9a8e3601586"},"cell_type":"code","source":"# for i in range(200):\n#     plt.imshow(X_test[i][:,:,0], cmap='gray')\n#     plt.title(\"{}. Predicted = {} | Actual = {}\".format(i, np.argmax(model.predict(X_test[i:i+1])), np.argmax(Y_test[i])), fontsize=15)\n#     plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Submission"},{"metadata":{"trusted":true,"_uuid":"132627496b3b1b5f2846b7bd2917b464aa1176bd"},"cell_type":"code","source":"# Predictions for the given test case\nimg_id = []\nlabel = []\nfor i in range(len(x_test)):\n    img_id.append(i+1)\n    label.append(np.argmax(model.predict(x_test[i:i+1])))\n    \nimg_id = np.array(img_id)\nlabel = np.array(label)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"443c25c5166fdbcb5ba19a6e5a5c2c96fb605d5e"},"cell_type":"code","source":"# Convert to pandas dataframe and convert to submission file\nop_df = pd.DataFrame()\nop_df['ImageId'] = img_id\nop_df['Label'] = label\nop_df.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}