diff --git a/Basic Image pre-processing - Jupyter Notebook.pdf b/Basic Image pre-processing - Jupyter Notebook.pdf new file mode 100644 index 0000000..68e9fc0 Binary files /dev/null and b/Basic Image pre-processing - Jupyter Notebook.pdf differ diff --git a/CNN_model.ipynb b/CNN_model.ipynb new file mode 100644 index 0000000..f7a39fd --- /dev/null +++ b/CNN_model.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 87000 images belonging to 29 classes.\n" + ] + } + ], + "source": [ + "#prep\n", + "\n", + "import numpy as np\n", + "import seaborn as sns\n", + "from keras.preprocessing.image import load_img, img_to_array\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# size of the image\n", + "pic_size = 48\n", + "\n", + "# input path for the images\n", + "base_path = 'images/'\n", + "\n", + "from keras.preprocessing.image import ImageDataGenerator\n", + "\n", + "# number of images to feed into the NN for every batch\n", + "batch_size = 1\n", + "\n", + "datagen_train = ImageDataGenerator()\n", + "datagen_validation = ImageDataGenerator()\n", + "\n", + "total_data = datagen_train.flow_from_directory(base_path + \"train/train\",\n", + " target_size=(pic_size,pic_size),\n", + " color_mode=\"grayscale\",\n", + " batch_size=batch_size,\n", + " class_mode='categorical',\n", + " shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "d = np.random.permutation(87000)\n", + "# out of 870 datasets I will be using 550 for training 250 for validation & 70 for testing\n", + "x_train = np.empty((10000, 48, 48, 1), dtype=np.float32)\n", + "y_train = np.empty((10000, 29), dtype=np.float32)\n", + "x_test = np.empty((700, 48, 48, 1), dtype=np.float32)\n", + "y_test = np.empty((700, 29), dtype=np.float32)\n", + "for i in range(0,10000):\n", + " x_train[i] = total_data[d[i]][0][0]\n", + " y_train[i] = total_data[d[i]][1][0]\n", + "for i in range(10000,10700):\n", + " x_test[i-10000] = total_data[d[i]][0][0] \n", + " y_test[i-10000] = total_data[d[i]][1][0] \n", + " \n", + "# data augmentation\n", + "def rotate_bound(image, angle):\n", + "# grab the dimensions of the image and then determine the\n", + "# center\n", + " (h, w) = image.shape[:2]\n", + " (cX, cY) = (w // 2, h // 2)\n", + "# grab the rotation matrix (applying the negative of the\n", + "# angle to rotate clockwise), then grab the sine and cosine\n", + "# (i.e., the rotation components of the matrix)\n", + " M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)\n", + " cos = np.abs(M[0, 0])\n", + " sin = np.abs(M[0, 1])\n", + "# compute the new bounding dimensions of the image\n", + " nW = int((h * sin) + (w * cos))\n", + " nH = int((h * cos) + (w * sin))\n", + "# adjust the rotation matrix to take into account translation\n", + " M[0, 2] += (nW / 2) - cX\n", + " M[1, 2] += (nH / 2) - cY\n", + "# perform the actual rotation and return the image\n", + " return cv2.warpAffine(image, M, (nW, nH))\n", + "\n", + "def augment_data(i):\n", + " angle = randint(-10,10)\n", + " return rotate_bound(x_test[i],angle)\n", + "\n", + "for i in range(0,10000):\n", + " aa = randint(0,1)\n", + " if (aa==1) :\n", + " x_test[i] = augment_data(x_test[i])\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# new_val = []\n", + "# for i in range (0,len(val)):\n", + "# for j in range (0,100):\n", + "# new_val.append((val[i][j][0],val[i][j][1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# len(new_val)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Logging before flag parsing goes to stderr.\n", + "W1226 10:55:41.267582 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:72: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", + "\n", + "W1226 10:55:41.289651 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:515: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", + "\n", + "W1226 10:55:41.293081 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:4048: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", + "\n", + "W1226 10:55:41.323543 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:172: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n", + "\n", + "W1226 10:55:41.324530 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:179: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n", + "\n", + "W1226 10:55:41.371208 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:1812: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.\n", + "\n", + "W1226 10:55:41.574867 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:3878: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", + "\n", + "W1226 10:55:41.582462 140340371121984 deprecation.py:506] From /usr/local/anaconda/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:3368: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n", + "W1226 10:55:42.086675 140340371121984 deprecation_wrapper.py:119] From /usr/local/anaconda/lib/python3.6/site-packages/keras/optimizers.py:782: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", + "\n" + ] + } + ], + "source": [ + "#defining the model\n", + "\n", + "from keras.layers import Dense, Input, Dropout, GlobalAveragePooling2D, Flatten, Conv2D, BatchNormalization, Activation, MaxPooling2D\n", + "from keras.models import Model, Sequential\n", + "from keras.optimizers import Adam\n", + "\n", + "# number of possible label values\n", + "nb_classes = 29\n", + "\n", + "# Initialising the CNN\n", + "model = Sequential()\n", + "\n", + "# 1 - Convolution\n", + "model.add(Conv2D(64,(3,3), padding='same', input_shape=(48, 48, 1)))\n", + "model.add(BatchNormalization())\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# 2nd Convolution layer\n", + "model.add(Conv2D(128,(5,5), padding='same'))\n", + "model.add(BatchNormalization())\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# 3rd Convolution layer\n", + "model.add(Conv2D(512,(3,3), padding='same'))\n", + "model.add(BatchNormalization())\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# 4th Convolution layer\n", + "# model.add(Conv2D(512,(3,3), padding='same'))\n", + "# model.add(BatchNormalization())\n", + "# model.add(Activation('relu'))\n", + "# model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "# model.add(Dropout(0.25))\n", + "\n", + "# Flattening\n", + "model.add(Flatten())\n", + "\n", + "# Fully connected layer 1st layer\n", + "model.add(Dense(256))\n", + "model.add(BatchNormalization())\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# Fully connected layer 2nd layer\n", + "model.add(Dense(512))\n", + "model.add(BatchNormalization())\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(0.25))\n", + "\n", + "model.add(Dense(nb_classes, activation='softmax'))\n", + "\n", + "opt = Adam(lr=0.0001)\n", + "model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W1226 10:55:42.205439 140340371121984 deprecation.py:323] From /usr/local/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/math_grad.py:1250: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 8000 samples, validate on 2000 samples\n", + "Epoch 1/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 3.3581 - acc: 0.1049 - val_loss: 2.9104 - val_acc: 0.1695\n", + "Epoch 2/50\n", + "8000/8000 [==============================] - 84s 11ms/step - loss: 2.7485 - acc: 0.2159 - val_loss: 2.6342 - val_acc: 0.2235\n", + "Epoch 3/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 2.4193 - acc: 0.2895 - val_loss: 2.6417 - val_acc: 0.2225\n", + "Epoch 4/50\n", + "8000/8000 [==============================] - 90s 11ms/step - loss: 2.1528 - acc: 0.3646 - val_loss: 2.4210 - val_acc: 0.2755\n", + "Epoch 5/50\n", + "8000/8000 [==============================] - 84s 11ms/step - loss: 1.9543 - acc: 0.4221 - val_loss: 2.1179 - val_acc: 0.3630\n", + "Epoch 6/50\n", + "8000/8000 [==============================] - 82s 10ms/step - loss: 1.7605 - acc: 0.4729 - val_loss: 2.1031 - val_acc: 0.3750\n", + "Epoch 7/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 1.5892 - acc: 0.5255 - val_loss: 1.7268 - val_acc: 0.4790\n", + "Epoch 8/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 1.4358 - acc: 0.5709 - val_loss: 1.7810 - val_acc: 0.4505\n", + "Epoch 9/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 1.3111 - acc: 0.6045 - val_loss: 1.5347 - val_acc: 0.5305\n", + "Epoch 10/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 1.1834 - acc: 0.6511 - val_loss: 1.4187 - val_acc: 0.5640\n", + "Epoch 11/50\n", + "8000/8000 [==============================] - 82s 10ms/step - loss: 1.0836 - acc: 0.6767 - val_loss: 1.3798 - val_acc: 0.5760\n", + "Epoch 12/50\n", + "8000/8000 [==============================] - 82s 10ms/step - loss: 0.9936 - acc: 0.6957 - val_loss: 1.1947 - val_acc: 0.6230\n", + "Epoch 13/50\n", + "8000/8000 [==============================] - 79s 10ms/step - loss: 0.9111 - acc: 0.7314 - val_loss: 1.2198 - val_acc: 0.6320\n", + "Epoch 14/50\n", + "8000/8000 [==============================] - 80s 10ms/step - loss: 0.8442 - acc: 0.7544 - val_loss: 1.2541 - val_acc: 0.6215\n", + "Epoch 15/50\n", + "8000/8000 [==============================] - 90s 11ms/step - loss: 0.7710 - acc: 0.7734 - val_loss: 0.9016 - val_acc: 0.7135\n", + "Epoch 16/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 0.7257 - acc: 0.7897 - val_loss: 0.9030 - val_acc: 0.7140\n", + "Epoch 17/50\n", + "8000/8000 [==============================] - 79s 10ms/step - loss: 0.6622 - acc: 0.8079 - val_loss: 0.8484 - val_acc: 0.7240\n", + "Epoch 18/50\n", + "8000/8000 [==============================] - 141s 18ms/step - loss: 0.6208 - acc: 0.8226 - val_loss: 0.8514 - val_acc: 0.7340\n", + "Epoch 19/50\n", + "8000/8000 [==============================] - 212s 26ms/step - loss: 0.5722 - acc: 0.8344 - val_loss: 0.6939 - val_acc: 0.7865\n", + "Epoch 20/50\n", + "8000/8000 [==============================] - 103s 13ms/step - loss: 0.5390 - acc: 0.8458 - val_loss: 0.5764 - val_acc: 0.8110\n", + "Epoch 21/50\n", + "8000/8000 [==============================] - 99s 12ms/step - loss: 0.4982 - acc: 0.8576 - val_loss: 0.5807 - val_acc: 0.8115\n", + "Epoch 22/50\n", + "8000/8000 [==============================] - 84s 11ms/step - loss: 0.4663 - acc: 0.8690 - val_loss: 0.4687 - val_acc: 0.8605\n", + "Epoch 23/50\n", + "8000/8000 [==============================] - 87s 11ms/step - loss: 0.4386 - acc: 0.8767 - val_loss: 0.5811 - val_acc: 0.8125\n", + "Epoch 24/50\n", + "8000/8000 [==============================] - 84s 10ms/step - loss: 0.4172 - acc: 0.8814 - val_loss: 0.5244 - val_acc: 0.8320\n", + "Epoch 25/50\n", + "8000/8000 [==============================] - 95s 12ms/step - loss: 0.4003 - acc: 0.8845 - val_loss: 0.6595 - val_acc: 0.7950\n", + "Epoch 26/50\n", + "8000/8000 [==============================] - 96s 12ms/step - loss: 0.3627 - acc: 0.8971 - val_loss: 0.3527 - val_acc: 0.8885\n", + "Epoch 27/50\n", + "8000/8000 [==============================] - 87s 11ms/step - loss: 0.3489 - acc: 0.8984 - val_loss: 0.4415 - val_acc: 0.8540\n", + "Epoch 28/50\n", + "8000/8000 [==============================] - 87s 11ms/step - loss: 0.3193 - acc: 0.9104 - val_loss: 0.3801 - val_acc: 0.8810\n", + "Epoch 29/50\n", + "8000/8000 [==============================] - 86s 11ms/step - loss: 0.3071 - acc: 0.9130 - val_loss: 0.3801 - val_acc: 0.8805\n", + "Epoch 30/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.2861 - acc: 0.9218 - val_loss: 0.3236 - val_acc: 0.9025\n", + "Epoch 31/50\n", + "8000/8000 [==============================] - 86s 11ms/step - loss: 0.2708 - acc: 0.9260 - val_loss: 0.3265 - val_acc: 0.8955\n", + "Epoch 32/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.2569 - acc: 0.9303 - val_loss: 0.3583 - val_acc: 0.8840\n", + "Epoch 33/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 0.2458 - acc: 0.9339 - val_loss: 0.3219 - val_acc: 0.8935\n", + "Epoch 34/50\n", + "8000/8000 [==============================] - 87s 11ms/step - loss: 0.2286 - acc: 0.9360 - val_loss: 0.2744 - val_acc: 0.9165\n", + "Epoch 35/50\n", + "8000/8000 [==============================] - 86s 11ms/step - loss: 0.2198 - acc: 0.9356 - val_loss: 0.2438 - val_acc: 0.9200\n", + "Epoch 36/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 0.2098 - acc: 0.9415 - val_loss: 0.2083 - val_acc: 0.9405\n", + "Epoch 37/50\n", + "8000/8000 [==============================] - 87s 11ms/step - loss: 0.2036 - acc: 0.9456 - val_loss: 0.4165 - val_acc: 0.8695\n", + "Epoch 38/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.1835 - acc: 0.9497 - val_loss: 0.2221 - val_acc: 0.9340\n", + "Epoch 39/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 0.1824 - acc: 0.9497 - val_loss: 0.2327 - val_acc: 0.9265\n", + "Epoch 40/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 0.1776 - acc: 0.9527 - val_loss: 0.1696 - val_acc: 0.9495\n", + "Epoch 41/50\n", + "8000/8000 [==============================] - 82s 10ms/step - loss: 0.1618 - acc: 0.9566 - val_loss: 0.2903 - val_acc: 0.9030\n", + "Epoch 42/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.1537 - acc: 0.9578 - val_loss: 0.1710 - val_acc: 0.9475\n", + "Epoch 43/50\n", + "8000/8000 [==============================] - 82s 10ms/step - loss: 0.1411 - acc: 0.9636 - val_loss: 0.1760 - val_acc: 0.9435\n", + "Epoch 44/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 0.1446 - acc: 0.9601 - val_loss: 0.1385 - val_acc: 0.9590\n", + "Epoch 45/50\n", + "8000/8000 [==============================] - 85s 11ms/step - loss: 0.1398 - acc: 0.9599 - val_loss: 0.2378 - val_acc: 0.9225\n", + "Epoch 46/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.1415 - acc: 0.9619 - val_loss: 0.1450 - val_acc: 0.9575\n", + "Epoch 47/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 0.1299 - acc: 0.9644 - val_loss: 0.1659 - val_acc: 0.9510\n", + "Epoch 48/50\n", + "8000/8000 [==============================] - 81s 10ms/step - loss: 0.1237 - acc: 0.9656 - val_loss: 0.1281 - val_acc: 0.9605\n", + "Epoch 49/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.1205 - acc: 0.9663 - val_loss: 0.1164 - val_acc: 0.9640\n", + "Epoch 50/50\n", + "8000/8000 [==============================] - 83s 10ms/step - loss: 0.1104 - acc: 0.9720 - val_loss: 0.2109 - val_acc: 0.9350\n" + ] + } + ], + "source": [ + "from keras.callbacks import ModelCheckpoint\n", + "\n", + "checkpoint = ModelCheckpoint(\"model_weights.h5\", monitor='val_acc', verbose=1, save_best_only=True, mode='max')\n", + "callbacks_list = [checkpoint]\n", + "# Fit the model\n", + "history = model.fit(x_train, y_train, validation_split=0.2, epochs=50, batch_size=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy is ::\n", + "0.9271428571428572\n" + ] + } + ], + "source": [ + "def num(x):\n", + " for i in range(0,29):\n", + " if(x[i]==1):\n", + " return i\n", + "\n", + "s = model.predict_classes(x_test)\n", + "# print(\"Prediction is :: \")\n", + "# print(s[1])\n", + "# print(\"Actual is ::\")\n", + "# print(num(y_test[1]))\n", + "errors = 0\n", + "for i in range(0,700):\n", + " if(s[i]!=num(y_test[i])):\n", + " errors += 1\n", + "print(\"Accuracy is ::\")\n", + "print((700-errors)/700)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model Saved\n", + "Weights saved\n" + ] + } + ], + "source": [ + "model_json = model.to_json()\n", + "with open(\"Image_model.json\", \"w\") as json_file:\n", + " json_file.write(model_json)\n", + "print('Model Saved')\n", + "model.save_weights('Image_model_weights.h5')\n", + "print('Weights saved')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['val_loss', 'val_acc', 'loss', 'acc'])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# list all data in history\n", + "print(history.history.keys())\n", + "# summarize history for accuracy\n", + "plt.plot(history.history['acc'])\n", + "plt.plot(history.history['val_acc'])\n", + "plt.title('model accuracy')\n", + "plt.ylabel('accuracy')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'test'], loc='upper left')\n", + "plt.show()\n", + "# summarize history for loss\n", + "plt.plot(history.history['loss'])\n", + "plt.plot(history.history['val_loss'])\n", + "plt.title('model loss')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'test'], loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(history))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}