diff --git a/Final Task/A4_200014.ipynb b/Final Task/A4_200014.ipynb new file mode 100644 index 0000000..2d1e698 --- /dev/null +++ b/Final Task/A4_200014.ipynb @@ -0,0 +1,1271 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "A4_200014.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## Final Task:\n", + "This is your final evaluation for the project. As decided, we will be predicting images of people into three classes: `without_mask`, `mask_weared_incorrect` and `with_mask`. " + ], + "metadata": { + "id": "rtI19Rt-H7Uc" + } + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf" + ], + "metadata": { + "id": "c2CiXcHQTbX8" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Loading the dataset\n", + "Make a copy of the dataset given to you in your Google Drive (keep it outside, don't put it in any folder to avoid inconvenience). Ensure it is named as `Mask_Dataset` or change the path (the variable `data_dir`) accordingly." + ], + "metadata": { + "id": "QKDPyiZTIm1c" + } + }, + { + "cell_type": "code", + "source": [ + "# Mount Google Drive\n", + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hNEMe7XsIjrK", + "outputId": "25ea253f-323b-46e1-fba5-9c21d021bda5" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pathlib\n", + "\n", + "# path='/content/drive/MyDrive/Mask_Dataset/'\n", + "path='/content/drive/MyDrive/ABHAY SISODIA/Mask_Dataset/'\n", + "data_dir = pathlib.Path(path)" + ], + "metadata": { + "id": "8CXzo4MOJOl8" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "data_dir" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YtR6XqWbDaFx", + "outputId": "b422c75e-cc0b-4955-a974-fc588e570be2" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "PosixPath('/content/drive/MyDrive/ABHAY SISODIA/Mask_Dataset')" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Know the Dataset\n", + "Most of the code is written for you as you aren't used to these libraries. You are to go through the documentation for your benefit." + ], + "metadata": { + "id": "YHPHkGyDKscK" + } + }, + { + "cell_type": "code", + "source": [ + "# Print image count\n", + "image_count = len(list(data_dir.glob('*/*.png')))\n", + "print(image_count)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PzbSy-vXKjD-", + "outputId": "1cbf2350-a312-402e-b560-0f8167d01c59" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "8982\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "id": "tTfqUxhXa6zK", + "outputId": "1c66155b-21ef-4ccd-e07a-f220f0f7be0a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Print Output Labels\n", + "import os\n", + "output_classes = os.listdir(data_dir)\n", + "print(output_classes)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rFHWFYj5NCVm", + "outputId": "2274e718-ba0e-43ac-e2bb-93f83528d2ad" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['without_mask', 'mask_weared_incorrect', 'with_mask']\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Plot count of each ouput label\n", + "import matplotlib.pyplot as plt\n", + "\n", + "count=[]\n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " im_count=os.listdir(dir)\n", + " count.append(len(im_count))\n", + "\n", + "print(count)\n", + "\n", + "plt.bar(output_classes,count)\n", + "plt.title(\"Statistics\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "fESyMw90KaxN", + "outputId": "ee5e3669-33cd-404b-aba2-d626610b55c8" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2994, 2994, 2994]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "import cv2\n", + "path_new=path+output_classes[2]+'/15.png'\n", + "img = cv2.imread (path_new,1) \n" + ], + "metadata": { + "id": "3D9eZ3e_c9LI" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "path_new" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 36 + }, + "id": "Z1LxaTIVt_LW", + "outputId": "97e55285-3169-424e-c6b9-7477b68a3912" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'/content/drive/MyDrive/ABHAY SISODIA/Mask_Dataset/with_mask/15.png'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Check some sample images (Use of cv2)\n", + "import cv2\n", + "from google.colab.patches import cv2_imshow\n", + "cv2_imshow(img)\n", + "# Your code" + ], + "metadata": { + "id": "HDSJ2Zk5a14s", + "outputId": "e2384c31-c150-4bd3-d281-ae80d51575d9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 145 + } + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "x=img.shape\n", + "x\n", + "# Check shape of the images in your dataset. This will be helpful while specifying input_shape in your Transfer Learning Model" + ], + "metadata": { + "id": "jWBEMC1FUfXS", + "outputId": "7be6f170-4ef7-4f32-a980-02dcf97775cf", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(128, 128, 3)" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import random\n", + "for label in output_classes:\n", + " print(label)\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " im_count=os.listdir(dir)\n", + " rand_no=random.randint(0,2994)\n", + " print(rand_no)\n", + " image = this_path+'/'+im_count[rand_no] #Checking the shape of 3 random images from the 3 different classes and we find all the images have the same shape (128,128,3)\n", + " testing=cv2.imread(image)\n", + " print(testing.shape)\n", + " \n", + " \n" + ], + "metadata": { + "id": "52BhBWRab5yc", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "0d50acdc-41d8-4d3b-f3ac-c67718b0736f" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "without_mask\n", + "2616\n", + "(128, 128, 3)\n", + "mask_weared_incorrect\n", + "915\n", + "(128, 128, 3)\n", + "with_mask\n", + "919\n", + "(128, 128, 3)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "flag=False\n", + " # for comparison we contain a touple\n", + "\n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " im_count=os.listdir(dir)\n", + " for i in range(len(im_count)):\n", + " image = this_path+'/'+im_count[i] \n", + " testing=cv2.imread(image)\n", + " if testing.shape!=img.shape:\n", + " flag=True\n", + "\n", + "if(flag):\n", + " print(\"Different sized images are present\")" + ], + "metadata": { + "id": "G-Atau4Rfc-x" + }, + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "\n", + "\n", + "# Anything else you want to plot/experiment" + ], + "metadata": { + "id": "F0XHxMo2RVQd" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Model Definition\n", + "Choose a model for Transfer Learning (You may also experment with multiple models and keep all of them in this notebook)" + ], + "metadata": { + "id": "zSoUXS1cRbnu" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.layers import Input, Lambda, Dense, Flatten\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.preprocessing import image\n", + "from tensorflow.keras.applications.vgg16 import VGG16\n", + "from tensorflow.keras.applications.vgg19 import VGG19\n", + "from tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img\n", + "from tensorflow.keras.models import Sequential" + ], + "metadata": { + "id": "QKZmIgXMTHfy" + }, + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Choose and define base model\n", + "IMAGE_SIZE = [128, 128]\n", + "vgg16 = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)" + ], + "metadata": { + "id": "9xWLUibHRNGj", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d6af16df-df01-42fd-8946-607df8a80f69" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n", + "58892288/58889256 [==============================] - 0s 0us/step\n", + "58900480/58889256 [==============================] - 0s 0us/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "vgg16.summary()\n", + "# Print base model summary and have a look at the layers" + ], + "metadata": { + "id": "J3TwB_GLd7BU", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "b215deb4-f9ef-4d6b-f1f2-c795770238ee" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"vgg16\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_1 (InputLayer) [(None, 128, 128, 3)] 0 \n", + " \n", + " block1_conv1 (Conv2D) (None, 128, 128, 64) 1792 \n", + " \n", + " block1_conv2 (Conv2D) (None, 128, 128, 64) 36928 \n", + " \n", + " block1_pool (MaxPooling2D) (None, 64, 64, 64) 0 \n", + " \n", + " block2_conv1 (Conv2D) (None, 64, 64, 128) 73856 \n", + " \n", + " block2_conv2 (Conv2D) (None, 64, 64, 128) 147584 \n", + " \n", + " block2_pool (MaxPooling2D) (None, 32, 32, 128) 0 \n", + " \n", + " block3_conv1 (Conv2D) (None, 32, 32, 256) 295168 \n", + " \n", + " block3_conv2 (Conv2D) (None, 32, 32, 256) 590080 \n", + " \n", + " block3_conv3 (Conv2D) (None, 32, 32, 256) 590080 \n", + " \n", + " block3_pool (MaxPooling2D) (None, 16, 16, 256) 0 \n", + " \n", + " block4_conv1 (Conv2D) (None, 16, 16, 512) 1180160 \n", + " \n", + " block4_conv2 (Conv2D) (None, 16, 16, 512) 2359808 \n", + " \n", + " block4_conv3 (Conv2D) (None, 16, 16, 512) 2359808 \n", + " \n", + " block4_pool (MaxPooling2D) (None, 8, 8, 512) 0 \n", + " \n", + " block5_conv1 (Conv2D) (None, 8, 8, 512) 2359808 \n", + " \n", + " block5_conv2 (Conv2D) (None, 8, 8, 512) 2359808 \n", + " \n", + " block5_conv3 (Conv2D) (None, 8, 8, 512) 2359808 \n", + " \n", + " block5_pool (MaxPooling2D) (None, 4, 4, 512) 0 \n", + " \n", + "=================================================================\n", + "Total params: 14,714,688\n", + "Trainable params: 14,714,688\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "# As we're using Transfer Learning, you do not need to train all the layers. Freeze all of the layers or train some layers (experiment)\n", + "\n", + "for layer in vgg16.layers:\n", + " layer.trainable = False\n" + ], + "metadata": { + "id": "F_Heq3C1eKd-" + }, + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "output_classes" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "piaL6BfmqGfX", + "outputId": "a014672f-32a6-457e-e8c4-4ff413b58490" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['without_mask', 'mask_weared_incorrect', 'with_mask']" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Append Fully connected/custom Conv2D/Dropout/MaxPooling layers to the base model\n", + "\n", + "\n", + "inputs = tf.keras.Input(shape=IMAGE_SIZE + [3])\n", + "x = inputs\n", + "x = vgg16(x)\n", + "x = tf.keras.layers.Flatten()(x)\n", + "x = tf.keras.layers.Dense(256)(x)\n", + "x = tf.keras.layers.Dense(256)(x)\n", + "outputs = tf.keras.layers.Dense(3, activation=\"softmax\")(x)\n", + "model = tf.keras.Model(inputs, outputs)\n" + ], + "metadata": { + "id": "MKx1EtUJea6D" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Add the final output layer\n", + "prediction = Dense(len(output_classes), activation='softmax')(x)\n" + ], + "metadata": { + "id": "lo0mIe8HqUHk" + }, + "execution_count": 29, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Print your model's summary\n", + "model.summary()" + ], + "metadata": { + "id": "6aVQocJwgN5r", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "79d0e4f7-d8b8-416e-8a78-4a8903abacc4" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"model\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_7 (InputLayer) [(None, 128, 128, 3)] 0 \n", + " \n", + " vgg16 (Functional) (None, 4, 4, 512) 14714688 \n", + " \n", + " flatten (Flatten) (None, 8192) 0 \n", + " \n", + " dense (Dense) (None, 256) 2097408 \n", + " \n", + " dense_1 (Dense) (None, 256) 65792 \n", + " \n", + " dense_2 (Dense) (None, 3) 771 \n", + " \n", + "=================================================================\n", + "Total params: 16,878,659\n", + "Trainable params: 2,163,971\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Compile you model (set the parameters like loss/optimizers/metrics)\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer='adam',\n", + " metrics=['accuracy']\n", + ")" + ], + "metadata": { + "id": "qdC71fUBgXAg" + }, + "execution_count": 31, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Data Augmentation and Pre-processing\n", + "Augment the data. You may also try dyanamic augmentation using [`tf.keras.preprocessing.image.ImageDataGenerator `](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator). \n", + "You may use [`tf.keras.applications.vgg16.preprocess_input`](https://www.tensorflow.org/api_docs/python/tf/keras/applications/vgg16/preprocess_input)(or some other base model's utility) for pre-processing (can also be passed as a parameter to `ImageDataGenerator`)" + ], + "metadata": { + "id": "RdUSMLggifex" + } + }, + { + "cell_type": "code", + "source": [ + "from keras_preprocessing.image import ImageDataGenerator\n", + "\n", + "label_datagen = ImageDataGenerator( rescale = 1./255, validation_split=0.2)\n", + "\n", + "# Your code " + ], + "metadata": { + "id": "DBscSsvkgn39" + }, + "execution_count": 32, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from keras.backend import categorical_crossentropy\n", + "# Your code\n", + "train_label_generator = label_datagen.flow_from_directory(\n", + " directory=path,\n", + " target_size=(128,128),\n", + " subset=\"training\",\n", + " class_mode='categorical',\n", + " batch_size=32)\n", + "validation_label_generator = label_datagen.flow_from_directory(\n", + " directory=path,\n", + " target_size=(128,128),\n", + " subset=\"validation\",\n", + " class_mode='categorical',\n", + " batch_size=32)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dR4JzFe-IKGp", + "outputId": "81a2ccdb-daf1-463c-8ad8-b878b06155e3" + }, + "execution_count": 33, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Found 7188 images belonging to 3 classes.\n", + "Found 1794 images belonging to 3 classes.\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Anything else you wish to try" + ], + "metadata": { + "id": "rhyHEFXDkZr4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Training and Validation Dataset \n", + "Split the dataset into training and validation (We'll be looking for your validation accuracy, assume we are using complete dataset for now). \n", + "\n", + "Hint: `flow_from_directory` used with `ImageDataGenerator` will simplify things for you." + ], + "metadata": { + "id": "IcKPxCpOkcuG" + } + }, + { + "cell_type": "code", + "source": [ + "# Your code\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "sB7hb3ybkJRq" + }, + "execution_count": 34, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Training \n", + "Train your model for some epochs and plot the graph. Try and save your best model. Experiment with the parameters of `model.fit`" + ], + "metadata": { + "id": "ZZPsjpT1mp3z" + } + }, + { + "cell_type": "code", + "source": [ + "from keras.callbacks import ModelCheckpoint\n", + "\n", + "hist = model.fit(train_label_generator, validation_data=validation_label_generator, epochs=50, batch_size=50)\n", + "\n", + "# ModelCheckpoint is helpful to save the model giving best results (brownie points)" + ], + "metadata": { + "id": "Gs2X14MBmu7W", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "465c98da-17a6-4017-87d5-125d461a7992" + }, + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 0.0168 - accuracy: 0.9951 - val_loss: 0.1409 - val_accuracy: 0.9693\n", + "Epoch 2/50\n", + "225/225 [==============================] - 23s 100ms/step - loss: 0.0030 - accuracy: 0.9989 - val_loss: 0.1305 - val_accuracy: 0.9727\n", + "Epoch 3/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 0.0019 - accuracy: 0.9993 - val_loss: 0.1150 - val_accuracy: 0.9822\n", + "Epoch 4/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 0.0015 - accuracy: 0.9996 - val_loss: 0.1538 - val_accuracy: 0.9788\n", + "Epoch 5/50\n", + "225/225 [==============================] - 25s 112ms/step - loss: 6.2750e-04 - accuracy: 0.9999 - val_loss: 0.1324 - val_accuracy: 0.9822\n", + "Epoch 6/50\n", + "225/225 [==============================] - 24s 106ms/step - loss: 5.7412e-04 - accuracy: 0.9999 - val_loss: 0.2892 - val_accuracy: 0.9638\n", + "Epoch 7/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 0.1654 - accuracy: 0.9734 - val_loss: 0.1862 - val_accuracy: 0.9783\n", + "Epoch 8/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 0.0120 - accuracy: 0.9964 - val_loss: 0.1658 - val_accuracy: 0.9777\n", + "Epoch 9/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 0.0023 - accuracy: 0.9994 - val_loss: 0.1932 - val_accuracy: 0.9755\n", + "Epoch 10/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 0.0013 - accuracy: 0.9997 - val_loss: 0.1685 - val_accuracy: 0.9799\n", + "Epoch 11/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 0.0021 - accuracy: 0.9992 - val_loss: 0.1510 - val_accuracy: 0.9816\n", + "Epoch 12/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 4.1410e-04 - accuracy: 1.0000 - val_loss: 0.1585 - val_accuracy: 0.9805\n", + "Epoch 13/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 7.7258e-04 - accuracy: 0.9999 - val_loss: 0.1744 - val_accuracy: 0.9788\n", + "Epoch 14/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 0.0061 - accuracy: 0.9985 - val_loss: 0.1402 - val_accuracy: 0.9810\n", + "Epoch 15/50\n", + "225/225 [==============================] - 23s 104ms/step - loss: 0.0118 - accuracy: 0.9968 - val_loss: 0.1318 - val_accuracy: 0.9805\n", + "Epoch 16/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 0.0794 - accuracy: 0.9834 - val_loss: 0.1231 - val_accuracy: 0.9760\n", + "Epoch 17/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 0.0245 - accuracy: 0.9944 - val_loss: 0.1348 - val_accuracy: 0.9766\n", + "Epoch 18/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 0.0045 - accuracy: 0.9985 - val_loss: 0.1885 - val_accuracy: 0.9744\n", + "Epoch 19/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 5.4151e-04 - accuracy: 1.0000 - val_loss: 0.1103 - val_accuracy: 0.9816\n", + "Epoch 20/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 2.7351e-04 - accuracy: 1.0000 - val_loss: 0.1178 - val_accuracy: 0.9816\n", + "Epoch 21/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 1.7116e-04 - accuracy: 1.0000 - val_loss: 0.1311 - val_accuracy: 0.9794\n", + "Epoch 22/50\n", + "225/225 [==============================] - 23s 100ms/step - loss: 8.4379e-04 - accuracy: 0.9997 - val_loss: 0.1103 - val_accuracy: 0.9838\n", + "Epoch 23/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 6.9733e-05 - accuracy: 1.0000 - val_loss: 0.1107 - val_accuracy: 0.9822\n", + "Epoch 24/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 4.9248e-05 - accuracy: 1.0000 - val_loss: 0.1210 - val_accuracy: 0.9816\n", + "Epoch 25/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 4.8405e-05 - accuracy: 1.0000 - val_loss: 0.1150 - val_accuracy: 0.9822\n", + "Epoch 26/50\n", + "225/225 [==============================] - 24s 107ms/step - loss: 4.9266e-05 - accuracy: 1.0000 - val_loss: 0.1254 - val_accuracy: 0.9816\n", + "Epoch 27/50\n", + "225/225 [==============================] - 24s 106ms/step - loss: 3.6202e-05 - accuracy: 1.0000 - val_loss: 0.1350 - val_accuracy: 0.9805\n", + "Epoch 28/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 3.3287e-05 - accuracy: 1.0000 - val_loss: 0.1198 - val_accuracy: 0.9822\n", + "Epoch 29/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 2.7000e-05 - accuracy: 1.0000 - val_loss: 0.1259 - val_accuracy: 0.9827\n", + "Epoch 30/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 2.9736e-05 - accuracy: 1.0000 - val_loss: 0.1317 - val_accuracy: 0.9822\n", + "Epoch 31/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 1.8315e-05 - accuracy: 1.0000 - val_loss: 0.1324 - val_accuracy: 0.9816\n", + "Epoch 32/50\n", + "225/225 [==============================] - 24s 106ms/step - loss: 2.5222e-05 - accuracy: 1.0000 - val_loss: 0.1487 - val_accuracy: 0.9794\n", + "Epoch 33/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 3.0340e-05 - accuracy: 1.0000 - val_loss: 0.1420 - val_accuracy: 0.9822\n", + "Epoch 34/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 1.0325e-05 - accuracy: 1.0000 - val_loss: 0.1453 - val_accuracy: 0.9810\n", + "Epoch 35/50\n", + "225/225 [==============================] - 24s 106ms/step - loss: 1.2105e-05 - accuracy: 1.0000 - val_loss: 0.1478 - val_accuracy: 0.9805\n", + "Epoch 36/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 0.3126 - accuracy: 0.9738 - val_loss: 0.2008 - val_accuracy: 0.9738\n", + "Epoch 37/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 0.0142 - accuracy: 0.9958 - val_loss: 0.1976 - val_accuracy: 0.9816\n", + "Epoch 38/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 0.0067 - accuracy: 0.9974 - val_loss: 0.1769 - val_accuracy: 0.9827\n", + "Epoch 39/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 9.2064e-04 - accuracy: 0.9997 - val_loss: 0.2281 - val_accuracy: 0.9771\n", + "Epoch 40/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 1.6477e-04 - accuracy: 1.0000 - val_loss: 0.1589 - val_accuracy: 0.9827\n", + "Epoch 41/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 4.5712e-05 - accuracy: 1.0000 - val_loss: 0.1556 - val_accuracy: 0.9849\n", + "Epoch 42/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 2.7562e-05 - accuracy: 1.0000 - val_loss: 0.1583 - val_accuracy: 0.9844\n", + "Epoch 43/50\n", + "225/225 [==============================] - 23s 102ms/step - loss: 2.7383e-05 - accuracy: 1.0000 - val_loss: 0.1588 - val_accuracy: 0.9838\n", + "Epoch 44/50\n", + "225/225 [==============================] - 22s 99ms/step - loss: 2.5726e-05 - accuracy: 1.0000 - val_loss: 0.1596 - val_accuracy: 0.9838\n", + "Epoch 45/50\n", + "225/225 [==============================] - 24s 105ms/step - loss: 2.1448e-05 - accuracy: 1.0000 - val_loss: 0.1614 - val_accuracy: 0.9838\n", + "Epoch 46/50\n", + "225/225 [==============================] - 23s 101ms/step - loss: 1.9031e-05 - accuracy: 1.0000 - val_loss: 0.1629 - val_accuracy: 0.9827\n", + "Epoch 47/50\n", + "225/225 [==============================] - 22s 100ms/step - loss: 1.8846e-05 - accuracy: 1.0000 - val_loss: 0.1600 - val_accuracy: 0.9849\n", + "Epoch 48/50\n", + "225/225 [==============================] - 22s 98ms/step - loss: 1.6371e-05 - accuracy: 1.0000 - val_loss: 0.1637 - val_accuracy: 0.9838\n", + "Epoch 49/50\n", + "225/225 [==============================] - 23s 104ms/step - loss: 1.6302e-05 - accuracy: 1.0000 - val_loss: 0.1608 - val_accuracy: 0.9844\n", + "Epoch 50/50\n", + "225/225 [==============================] - 23s 103ms/step - loss: 1.2676e-05 - accuracy: 1.0000 - val_loss: 0.1661 - val_accuracy: 0.9838\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Evaluate the performance" + ], + "metadata": { + "id": "FTvRa1FXri4R" + } + }, + { + "cell_type": "code", + "source": [ + "# Plot training & validation loss/accuracy values\n", + "\n", + "import pandas as pd\n", + "res_2=pd.DataFrame(hist.history)\n", + "res_2['epoch']=hist.epoch\n", + "res_2.head()" + ], + "metadata": { + "id": "cTH6flzcrck0", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "outputId": "2a8cda0d-f685-44ae-9e43-f5d4ec6a6b3e" + }, + "execution_count": 40, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " loss accuracy val_loss val_accuracy epoch\n", + "0 0.016776 0.995131 0.140860 0.969342 0\n", + "1 0.002999 0.998887 0.130457 0.972687 1\n", + "2 0.001879 0.999304 0.115042 0.982163 2\n", + "3 0.001461 0.999583 0.153825 0.978818 3\n", + "4 0.000627 0.999861 0.132381 0.982163 4" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
lossaccuracyval_lossval_accuracyepoch
00.0167760.9951310.1408600.9693420
10.0029990.9988870.1304570.9726871
20.0018790.9993040.1150420.9821632
30.0014610.9995830.1538250.9788183
40.0006270.9998610.1323810.9821634
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {}, + "execution_count": 40 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(res_2[\"epoch\"],res_2[\"loss\"],'red')\n", + "plt.plot(res_2[\"epoch\"],res_2[\"val_loss\"],'green')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + }, + "id": "aFR6NKj679Sb", + "outputId": "adabcdb8-e6bd-4ad8-aad3-466e52bcac46" + }, + "execution_count": 41, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 41 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO2deXgUVfa/35MEkkCAJBDCTlgimwmLuIP7Ai7oqAgqjtsIOm4z6qioI1+ZccQZtxnl5wwqOooLoKiMggiKuwgIhFVI2LckbFkI2XN/f1RX6CSdpDvpJt3FeZ+nnu66davqFHQ+ffrcc88VYwyKoiiKcwlragMURVGUwKJCryiK4nBU6BVFURyOCr2iKIrDUaFXFEVxOBFNbUB12rVrZ5KSkpraDEVRlJDil19+2W+MSfB0LOiEPikpieXLlze1GYqiKCGFiGyv7ZiGbhRFURyOCr2iKIrDUaFXFEVxOCr0iqIoDkeFXlEUxeGo0CuKojgcFXpFURSHo0KvKIr3rFkDP/zQ1FYoPhJ0E6YURQliJk2CzZshLa2pLVF8QD16RVG8p6AADh9uaisUH1GhVxTFe4qKrE0JKVToFUXxHhX6kESFXlEU7ykqgsLCprZC8RGvhF5ERojIRhHJEJFHPBy/Q0TWiMgqEfleRPq7HZvoOm+jiFzsT+MVRTnG2B69MU1tieID9Qq9iIQDU4GRQH/gOnchd/GuMSbFGDMI+DvwvOvc/sBYYAAwAvh/ruspihKK2CJfUtLUlig+4I1HfwqQYYzZYowpAd4HrnDvYIzJc9ttCdhf91cA7xtjio0xW4EM1/UURQlF7Pi8xulDCm+EvjOw021/l6utCiJyl4hsxvLo7/Xx3PEislxElu/bt89b2xVFOdbYAq9x+pDCb4OxxpipxphewMPA4z6eO80YM9QYMzQhweNKWIqiBAPq0Yck3gj9bqCr234XV1ttvA9c2cBzFUUJVioqjsbmVehDCm+EfhmQLCI9RKQ51uDqXPcOIpLstnspkO56PxcYKyKRItIDSAaWNt5sRVGOOcXFR99r6CakqLfWjTGmTETuBhYA4cB0Y8w6EZkMLDfGzAXuFpELgFLgEHCT69x1IjILWA+UAXcZY8oD9CyKogQSdy9ePfqQwquiZsaYecC8am1PuL2/r45znwKeaqiBiqIECe7irh59SKEzY/2AMYbHv3qcNVlrmtoURQkc6tGHLFqm2A/kFefx1HdPUWEqSElMaWpzFCUwqNCHLOrR+4GcohwAMg9nNrElihJANHQTsqjQ+wEVeuW4wF3c1aMPKVTo/YAt9HsP721iSxQlgKhHH7Ko0PsB9eiV4wKN0YcsKvR+wBb67IJsyit0moDiUNSjD1lU6P2ALfQVpoJ9R7Qom+JQ1KMPWVTo/YAt9AB78zVOrzgUFfqQRYXeD7gLvcbpFceioZuQRYXeD+QU5xAm1j+lCr3iWGyhb91aPfoQQ4XeD+QU5dAzriegKZaKg7HFPS5OPfoQQ4XeD+QU5dAxpiNtItuoR684F/XoQxYVej+QU5RDXHQcHWI6qEevOJeiIoiKguho9ehDDBV6P5BTlENsVCwdYjqoR684F3ehV48+pFCh9wM5RTnERsbSsVVHTa9UnIst9FFRKvQhhpYpbiQVpoLcolxio2IJkzD16BXn4u7R71WHJpRQoW8k+cX5GAyxUbG0bN6SgtICDpccJqZ5TFObpij+RT36kEVDN43Enixlx+hBZ8cqDkUHY0MWFfpG4i70HWM6AjppSnEo6tGHLBq6aSTuQt+uRTtAJ00pDsVd6NWjDynUo28knkI36tErjkTTK0MWFfpG4i70bVu0JSIsQmP0ijMpKrJEPioKysqsTQkJvBJ6ERkhIhtFJENEHvFw/H4RWS8iq0XkSxHp7nasXERWuba5/jQ+GHAX+jAJI7FlIpkF6tErDsTdo7f3lZCg3hi9iIQDU4ELgV3AMhGZa4xZ79ZtJTDUGHNERO4E/g6McR0rNMYM8rPdQYMt9K0jWwPQsVVHDd0ozsQ9Rm/vx2gacSjgjUd/CpBhjNlijCkB3geucO9gjFlsjDni2l0CdPGvmcFLTlEOrSNbEx4WDmDVu9HQjeJEqgu9DsiGDN4IfWdgp9v+LldbbdwGzHfbjxKR5SKyRESu9HSCiIx39Vm+b19oLcWXU2zVubHpGKMeveJQNHQTsvg1vVJExgFDgbPdmrsbY3aLSE/gKxFZY4zZ7H6eMWYaMA1g6NChxp82BRq7oJlNh5gOZBdkU1ZRRkSYZq8qDqKwUD36EMUbj3430NVtv4urrQoicgHwGDDKGFNstxtjdrtetwBfA4MbYW/QUV3oO8Z0xGDYVxBav0wUpU7sLBv16EMSb4R+GZAsIj1EpDkwFqiSPSMig4H/YIl8tlt7nIhEut63A84E3AdxQ55DhYdqePSgufSKwyh2+W7VB2OVkKBeoTfGlAF3AwuADcAsY8w6EZksIqNc3f4BxACzq6VR9gOWi0gasBiYUi1bJ+TxFLoBnR2rOAxb1N09eg3dhAxeBZGNMfOAedXannB7f0Et5/0IpDTGwGDHrkVv07GV1rtRHIi70KtHH3LozNhGUGEqyCvO8+zRa4ql4iQ8Cb169CGDCn0jyCvOq6xFbxMVEUVsVKx69Iqz8BS6UY8+ZFChbwTu5Q/c0UXCFcehHn1Io0LfCGoTep00pTgO9ehDGhX6RlCXR69CrzgKHYwNaVToG0F9oRtjQmqSr6LUjrvQN28OIhq6CSFU6BtBXaGbI6VHOFxyuCnMUhT/4y70IrqcYIihQt8I6vLoQSdNKQ7CXejt10Z49EdKj9Dl+S68v/Z9Pxin1IcKfSOoXoveRidNKY6jutA3cjnB1Vmr2Z2/m+93fO8H45T6UKFvBNVr0dvopCnFcfjZo1+5dyUAGQczGmuZ4gUq9I0gpyiHuKi4Gu0dY9SjVxyGnz36lZmW0KcfTG+sZYoXqNA3guoFzWziouNoFtZMhV5xDrao2zn0jRyMtYV+W842SspLGmudUg8q9I2gNqEPkzASYxJ1MFZxDkVFEBYGEa46iNHRDQ7dlJaXsiZrDYktE6kwFWzP2e5HQxVPqNA3gtqEHnR2rOIw7GUERaz9Rnj0G/ZvoLi8mKv7XQ1o+OZYoELfCOoSeq13ozgKW+htGjEYaw/EXjvgWkAHZI8FKvSNQD165bihutA3YjB2ZeZKWjRrwbBuw2jVvJUK/TFAhb6BeKpF706HmA7sK9hHWUXZMbZMUQKAPz36zJWkJqYSHhZO7/jeGro5BqjQNxBPtejd6djKWiQ8uyDb43FFCSn85NFXmApWZa5icIfBAPSO760e/TFAhb6B1Fb+wEYXCVccRWFhTY++AUK/5dAW8orzGNJxCADJ8clsy9lGaXmpvyxVPKBC30DqE3p70pTOjlUcgZ9CN/ZArLtHX1ZRxo7cHX4xU/GMCn0DUY9eOa7wFLopLgYfS3GvzFxJRFgEJ7Y/EbCEHjTFMtCo0DeQ+oQ+MSYR0AqWikPw5NHb7T6wMnMl/RP6ExkRCUBy22RAUywDjVdCLyIjRGSjiGSIyCMejt8vIutFZLWIfCki3d2O3SQi6a7tJn8a35TUJ/RREVHERcWpR684A08evd3uAyv3rqwM2wAktkykZbOWKvQBpl6hF5FwYCowEugPXCci/at1WwkMNcakAh8Af3edGw9MAk4FTgEmiUjNKmAhSH1CD7qkoOIgavPofYjT783fS1ZBVhWhFxFNsTwGeOPRnwJkGGO2GGNKgPeBK9w7GGMWG2OOuHaXAF1c7y8GFhpjDhpjDgELgRH+Mb1pySnKQZAatejd6diqo4ZuFGfgEvrXV7zOVTOv4s2y5RyMxiePfsXeFQCVGTc2yW2T1aMPMN4IfWdgp9v+LldbbdwGzPflXBEZLyLLRWT5vn37vDCp6bFr0YdJ7f+E6tErjsEl9K8sf4WPf/2YW/a/RuKDcPEXN/LqL6+yr6D+v1u7YuXADgOrtPeO683WQ1t1cmEA8etgrIiMA4YC//DlPGPMNGPMUGPM0ISEBH+aFDDqKn9g0zGmI3vzdZFwxQEUFVEW1Zy12Wv542l/ZOkJz/LAT7A5fwfjPx1Ph+c6cPWsq+vMh1+ZuZLe8b1r/AruHd+b0opSTbEMIN4I/W6gq9t+F1dbFUTkAuAxYJQxptiXc0MRb4S+Q0wHCssKyS/JP0ZWKUqAKCpiY3QBxeXFDO44mJPbpTJlEaSf/h4rJ6zkrpPvYs6GOcxcN7PWS1QfiLXRzJvA443QLwOSRaSHiDQHxgJz3TuIyGDgP1gi7z7nfwFwkYjEuQZhL3K1hTyHig55JfSgk6aUEKesDMrLWdX8IAADEwdWDsZKURGDOgzixREvcmL7E3n6+6epMBU1LpFTlMPWnK0ehd7OpVehDxz1Cr0xpgy4G0ugNwCzjDHrRGSyiIxydfsHEAPMFpFVIjLXde5B4C9YXxbLgMmutpDH29AN+DZpan76fLq/2J2sw1mNsk9R/IZrwDUtfD/Nw5vTt13fGumVYRLGxGETWb9vPXM3zq1xiVWZqwAY3LGm0HeM6UiLZi1IP6CZN4HCqxi9MWaeMeYEY0wvY8xTrrYnjDG2oF9gjEk0xgxybaPczp1ujOnt2t4IzGMce7wN3YBvQv/yspfZkbuDN1e92RjzFMV/uMR8FZkMSBhAs/BmHtMrrx1wLT3jevK37/5WY1zKzrjx5NHbKZYZh9SjDxQ6M7aBeOXRt3LVu/EyxTK7IJsFGVZk69UVr3r8Cawoxxzbo6/YczRjxsOEqYiwCB464yGW7VnGV1u/qnKJlZkr6dSqU+WM8epoFcvAokLfAMoryuusRW8TFxVH8/DmXnv0M9fOpNyU8+iwR9l8aDOLty72h7lBxbtr3uXE/3ci5RXlTW2K4i1FRWTGQHZFPoMSB1lttZRAuGnQTXSM6cjfvv9blfbaBmJtesf1ZsuhLfq5CBAq9A0grzgPqHtWLFg/SX1ZUnDGmhkM6jCIP5/9Z+Ki4pi2YlqjbQ025qXPY92+dezJ39PUpijeUlTEKisKedSjr2VmbFREFA+c/gBfbf2KJbuWWF1KC/l1/691Cn1y22RKykvYmbez1j5Kw1GhbwDelD+wSWmfwoKMBRSW1j1VfNOBTSzdvZRxKeOIiojipoE38dGGj7yaiBJKpGWlAbAtZ1vTGqJ4T1ERaa6Iy8DE2kM3NhOGTiAuKo6nv38agDXZayg35R4HYm008yawqNA3AF+E/sEzHiSrIIvpK6fX2e+d1e8gCNelXAfA7SfdTmlFKf9N+2/jDQ4SisuK+XX/rwBszdnaxNYoXuPy6LtFticu2lWqqo5aNzHNY7jv1PuYu3Eua7PX1qhB7wkV+sCiQt8AfBH6s7ufzZldz+TvP/6dkvISj32MMcxYM4Pze55Pp1adAOif0J8zu57JtF+mOWZm7fp96yunuatHH0IUFZHWAQa1OuFoW1gYNG9ea62be069h5bNWjLl+yms2LuC2KhYkmKTar1Fp1adiI6I1hTLAKFC3wB8EXoR4bHhj7EjdwczVs/w2GfJriVsObSFcSnjqrSPP2k86QfT+Wb7N403OgiwwzbhEq5CH0IUHsllY1sYGNun6oE6VpmKj47njqF38N7a9/h88+cM7jAYEan1HmESRq/4XppiGSBU6BuAL0IPMKL3CIZ0HMKU76d4zCqYsXoG0RHR/Kbfb6q0j+4/mtioWKb94oxB2bTMNKIjohnaaagKfQixNjedijAY1O7EqgfqWSD8/tPvJyIsgh25O+oM29hoimXgUKFvALbQx0V5V1rf9urTD6Yze/3sKsdKykuYuW4mV/S9okaxp+hm0dyYeiMfbviQ/Uf2+8f4JmR19mpSElPoFd9LhT6ESMu3xHdg+5SqB+pZILxTq07cMugWwPOM2Ookxyez+eBmnT8SAFToG4Bdi75VZCuvz7my75X0T+jPU989VeWDvCBjAQcKD9QI29jcPuR2SspLeCvtrUbbbVNhKjhSeqT+jn7EGENaZhoDEweS1CaJnXk7tSxtiLDqyBZiiqFHu+SqB7xYIPyx4Y9xVb+ruLjXxfXep3d8b4rLi9mVt6sx5ioeUKFvADlFObSJalNnLfrq2LVA1mav5X8b/1fZPmPNDNq1aMdFvS7yeF5KYgqndzndr4Oy986/lxNeOuGYCu2e/D0cKDxAamIqSbFJlFWUsTvPEYVMHU9a8XYGZkFYdIuqB+oJ3QB0bdOVD6/9kISW9Zcf18ybwKFC3wByiusvf+CJsSeOpWdcT5767imMMeQV5zF341zGDBhj1Q+phfEnjWfjgY18v+P7xpgNwI87f2Tqsqnszt9dOaHlWGAPxA5MHFiZfaHhm+CnwlSQVrabgZlUXUoQvPLofSE53vrFoJk3/keFvgF4U+fGExFhETxy5iMs27OMRVsWMWfDHIrKihiX6jlsY3PtgGtpE9mm0TNlS8tLuePTO+jUqhMRYRHMT59f/0l+Ii3TEvrUxFR6xPUAVOhDgW0528inmEGehN4Lj94XOrfuTFRElHr0AUCFvgE0VOgBfjvwt3Ru1Zm/fvdXZqyeQa+4Xpza+dQ6z2nRrAXjUscxe91sDhY2vMrzv37+F2uy1/DyyJc5o+sZzMuY1+Br+UpaVhpJsUm0iWpD19ZdEUSFPgSwv6AH7guDiIiqB/3s0YdJGL3iNMUyEKjQN4DGCH1kRCR/OuNPfLv9W77c+iXjUsfVmV9sM+GkCRSXF/PCTy806L47cncw6etJXHbCZVzZ90pG9h7JqsxVx6zmTFpWWuX0+ciISDq16sS23G3H5N5Kw1mVuYowI5yYF1XzYD1ZNw2hd3zv4zp0U9dSjI1Bhb4B+CT0K1fCpk1Vmm4/6XYSWliDUzek3ODVZVISUxh74lie++m5BmUl3Pf5fVSYCl4a+RIiwiXJlwDwecbnPl/LVwpLC9l0YNPROilAUmySevQhQFpWGieUt6FFRHTNg34O3YAl9JsPHX8plr/u/5WrZl7F9XOuD8j1VegbQE5RDrGRXgr9LbfAww9XaWrRrAUvjniR+069r3K9TG94+nxrmbbHvnrMF3P538b/8fGvHzPp7EmVA6Ep7VPo3Koz8zMCH6dfm72WClNxtPIhltBvPaT1boKdVZmrGFQcVzM+D34P3YA1IFtUVhTy1U0Plxzm002fsvng5jr77crbxe/m/o4B/28AC7csJKV9SkBKnkTU30Vxx9ta9JXs3w8xMTWar0+5nutTfPv2TopN4g+n/YFnfniGe0+5l5M6nVTvOQUlBdwz/x4GJAzg/tPvr2wXEUb2Hsms9bMoLS+tM+unsazOWg1Qw6N/f+37lFWUERGmH8NgJKcoh+2527njyECIOlyzQ4A8erAyb7q07uLXa3tLeUU523K28ev+X49uB36lrKKMEb1GMKrPKAZ1GFQj5GqM4addPzF95XRmrpvJ4RLr36xvu75cmnwplyZfyrBuw2gW3oyDhQeZ8v0UXlr6EhWmgntOuYfHhj/mVRpqQ9C/MB/xthZ9Jbm5kJPjt/tPHDaR6Sun88AXD7D4psX1xvf/8u1f2J67nW9v/raGmI9MHslrK1/jp10/cVb3s/xmY3XSstKIaR5TmW0D0CO2B+WmnF15u+osdqU0HZUDsYdbQpSHORcB8Ojdc+nP7XGuX6/tiazDWazOWk1aVlrl68b9GykuL67sk9AiwVonF3jymyf5v2/+jy6tu3BZ8mVc3udy+if0Z9a6WUxfOZ2NBzbSsllLxgwYw7UDrmXjgY18uulTXlr6Es/99BytI1tzdvez+Xb7t+QV53HjwBt58pwnA/43oELvIz7VuSkrg8OH4dAhv92/TVQbnjznSX4/7/d8svETrux7Za1912av5bmfnuPWQbcyvPvwGscv6HkBEWERzEufF3ChT2mfUmWCmXsuvQp9cGLPfRiUEwVRxTU72B69MeBFQoE3dG3TlcjwSDbs3+DzuRWmgoKSAg6XHK7c8orz2H9kP9kF2ew7so99BfvIPpJN1uEsNuzfQHZBduX5nVt1ZmCHgVzc62L6tutL33Z96dO2D21btK3sk12Qzbz0eczdOJe3V7/Nv3/5d+WxYd2G8fCZDzN6wGhimlu/4i/ufTH3nnovh0sOs2jLIj7b9BmLti7irO5n8dR5T5GSWK2sRIBQofcRn4Q+L891kv88erAGc19a+hIPLXyIS5IvoXl48xp9ft3/K6Nnj6ZNZBueufAZj9dpHdmaYd2GMT9jPlMumOJXG23s0gfXnXhdlXadNBX8pGWmkdAigQ75pvYYfUUFlJZaJYv9QJiE0S+hHy8seYGvt33N6P6jGT1gdKWnb1NhKlidtZoFGQtYsHkBy/csJ78kv97rx0XFkdAygYQWCVyafCkDEweSmphKamJqFUGvjfYt23PzoJu5edDNFJUV8fW2r1mbvZbLT7icPu361HpeTPMYrux7ZZ2OWSBRofcRn4Q+N9d6PXIESkr89scQERbBsxc9y6XvXsory17hvtPuq3L8/bXv87u5vyO6WTQfXPsB7Vq0q/Val/S+hIcWPcSuvF0BiYnuyN1BbnFulYFYsDw3QXRANohZlbXKikUXFRxdUcod93Vj/fTZBph3/TzeXfMus9fP5tGvHuXRrx5lUIdBjO4/mq6tu/LFli9YuHkhWQVZgDUJ77cDf0vb6La0imxFTPMYYprH0Kq59b5di3a0b9medi3a+XUsKioiihG9RzCi9wi/XTNQqNB7wBhDcXkxURE1vZgGCT1YXn379v4ykZG9R3Jhzwt58psnuXHgjcRHx1NcVswDXzzA1GVTObPrmcy8ZiadW3eu+zrJI3lo0UN8nvE5vxvyO7/ZZ+Ne+sCd5uHN6dy6s+bSByml5aWsy17HPafcA0VfQZyHSq3uywm2bl3zeAPp2KojD5zxAA+c8QA7cnfw4foPmb1+dmW2mV0b6qKeF3FRr4vo2Kqj3+7tVLxKrxSRESKyUUQyROQRD8fPEpEVIlImItdUO1YuIqtc21x/GR5Ipq+cTsfnOpJ5OLPGsUYJvR8REZ696FlyinL467d/ZVvONoa/MZypy6bywOnWQG19Ig8wIGEAXVp3YV56YGbJpmWmIYjHWKTm0gcvGw9YA5KDOgyyhLy20A34fUDWnW5tuvHH0//Ij7f9yM4/7mTVhFVkPZjFO1e9w02DblKR95J6hV5EwoGpwEigP3CdiPSv1m0HcDPwrodLFBpjBrm2UY2095jwycZPyCnK4aWfX6pxzCehdxd3Pw7I2qQmpnLr4Ft5eenLDPnPEDYe2Mica+fw7EXPev0TVUS4pPclLNqyqNalDhtDWlYaveJ7VQ5OudMjtocKfZBSmXHTYaAl9J5CN3UsEB4IurTuwsAOA32qGqtYePMvdgqQYYzZYowpAd4HrnDvYIzZZoxZDYT8dLbyinK+3f4tAK8sf6UyF9bGp1r0AfTobf5y7l9o0awF3WO7s2L8ihqrVHnDyOSR5Jfk88OOH/xu3+qs1TXCNjZJsUnsytsVsGnfSsNZlbmKyPBI+rTt06QeveIfvBH6zsBOt/1drjZviRKR5SKyREQ8DjmLyHhXn+X79u3z4dL+Z1XmKnKLc7n3lHs5VHSI11e8XuW4T7Xoj4HQd2zVkc33bmbp75bSK75Xg65xfo/zaRbWzO+zZAtKCsg4mFGn0FeYCl1owk+8uepNhk0fxvI9yxt1ndLyUpbtWcaA9gOsX4a1Cf0x9uiVhnMsfgN1N8YMBa4HXhSRGmpkjJlmjBlqjBmakBCYmWHesnjbYgAeHvYww7sN5/klz1fxOH2qRe8u9AEI3di0bdG2UdkErSJbMbz7cL/H6ddkr8FgSE1M9XjcTrHcmqOZN41lb/5e7p1/Lz/s/IHTXjuNSYsnef1LqayijKW7l/LM988w8p2RxP89nm+2f8PJnU62OqhHH/J4I/S7ga5u+11cbV5hjNntet0CfA3Uv3hkE7J422JOaHsCnVp14k9n/IkduTuqrPN6qPCQ90KfkwPh4UffBzGX9L6EdfvWsSN3h9+uWSXO6wHNpfcff1r4J4rLi1l2+zKuT7meyd9O5tTXTmVt9lqP/Q8WHuSNlW9w+XuXE/9MPKe+diqPfPkIO3J38NvU3zLrmlk8d9Fz1mSo+oRePfqgxxuhXwYki0gPEWkOjAW8yp4RkTgRiXS9bwecCaxvqLGBpqyijO+2f8e5SdbU60tPuJS+7fryjx//UVloyKfKlbm5kJBg5RgH0KP3ByOTRwL4dTGStKw02kS2oXub7h6Pd23dlTAJU6FvJN9s+4Z31rzDw2c+zNBOQ3nrN2/x4bUfsitvFydNO4l//PAPyivKOXDkAK+veJ0RM0aQ+Gwit869lbXZaxmXOo6Z18wk84FM1v1+HVMvncroAaNp2bylNbu7okJDNyFOvXn0xpgyEbkbWACEA9ONMetEZDKw3BgzV0ROBj4C4oDLReRJY8wAoB/wHxGpwPpSmWKMCZjQ5xfn+7Rgd3V+2fML+SX5lUIfJmH86Yw/cdvc21i0ZREX9rqQnKIc72PhubnQpo3lFQW5R9+vXT+6tenG/Iz5TBg6wS/XTMtKIzUxtdZ6PM3Cm9GldRcV+kZQWl7K3fPvpnub7jwy7Gjm81X9rmJYt2FM+HQCDy16iFeWv8KO3B2Um3J6xvXkgdMfYHT/0QzpOKTuekm2iGvoJqTxasKUMWYeMK9a2xNu75dhhXSqn/cjcEyKOWw5tIXhbwznL+f+hVsH39qga3y97WsAzkk6p7LthpQbePyrx/nHj/+oFHqfPPo2baz3QS70dprl26vfprC0kOhmHtLpfMCeon7zwJvr7Ke59I3j5aUvszZ7LR+P+ZgWzaou3t2+ZXvmXDuHd9a8w6srXmXMgDGMHjCawR0Ge7XYDVC30KtHHzI4JiG1c6vOpLRP4fb/3c6sdbMadI3F2xbTP6E/iTGJlW2REZHce+q9LNyykFWZq3yrRZ+TA7Gx1hbkoRuw1qYtKC3g4hkXc+DIgUZda+uhrRwuOVxrfN5Ghb7h7M3fy6SvJzGy90hG9fE8RUVEGJc6jm9u/k3xpaYAAB7nSURBVIanL3i6fg++OurROwLHCH1kRCRzxszhjK5ncMOcG3zOICktL+X7Hd9Xhm3cuWPoHcQ0j2HK91PIL8n33aOPiwt6jx7g3B7n8t7V77F091JOf/30Ri3p5qkGvSeS2li59IGYrOV07AHYf438l2/i7Qvq0TsCxwg9WCs3fXrdp6QmpnL1rKv5Zts3Xp+7bM8yCkoLqoRtbGKjYhk/ZHzlLwWfhT5EPHqAsSeO5aubvuJQ0SFOe/20ysljvpKWlUaYhHFi+xPr7JcUm4TBsDN3Z539QoXisuIqpW8DhfsAbPXKjn7F9tY16yakcZTQg1WvfcG4BfSM68ll713G0t1LvTpv8VYrf96T0AP84bQ/EB5mpUo61aO3OaPrGSy5bQkJLRK44K0LmLF6hk/nF5UVMXfjXPq07VNvrN9JKZYHjhzgtNdPo8/Lfdid53UGss/UNgAbEOry6CMiICxMQzchgCOrV7Zr0Y6FNy5k2PRhjJgxgm9v+bZez3LxtsWktE+ptaRv1zZdGXviWGasnuGd0JeUWH8AsbFWemVOjl8XaAg0veJ78dNtP3HVrKu48aMbyTiYwaSzJ9UbIjDGMP5/41mZuZIPRn9Q733sVadCXej3FezjgrcvYOP+jYgId827i4/GfNSokEpOUQ7bc7ZzqOgQhwoPVb6uyFxR6wCs36lL6EUCspyg4n8cKfQAnVp1YtFvFzH8jeFc+PaFfHfLd7X+xC0uK+bHnT9y+5Db67zmo8MeZdnuZd6tCmPPim3TxhL6sjIoKPC4fmywEhcdx4JxC5jw6QSe/OZJtuZs5dXLX/W40InNMz88w9ur32byOZO5uv/V9d6jS+suhEu4z0JvjOHPi/9MSvsUxpw4xqdz/U12QTbnv3U+GQcz+PT6T1m5dyUPLXqIDzd8yDX9r6n/AtUoLivm2R+f5anvnqKwrKa3HCZh3DTwploHYP1KXUJvt6tHH/Q4VugBesb1ZNGNlthfO/talt6+1ONC1Et3L6WwrLDeNSr7JfTj17t/9e7m7kJv/5Hk5ISU0INVN376qOn0iO3BpK8nsTd/Lx9c+wGtI2vWH/9ow0dM/HIiY08cy+NnPe7V9SPCIqxceh/r0r+y/BWe+u4p4qLiuPSESz1WxzwWZB7O5Py3zmfroa18dv1nnNfjPM5JOoeZ62Zy97y7Oa/HecRHx3t9vfnp87n383vJOJjB1f2u5roTryMuOo64qLjK11aRrY5dBcf6hF49+pDAcTH66vRL6Md/LvsPKzNX8uKSFz32WbxtMYJwdvez/XdjW+jt9EoIqTi9OyLCE2c/wfRR0/lq61ec/ebZ7MnfU6XPyr0rGffROE7pfArTR033KWSRFJvk00pTaZlp3L/gflITUzlUdIhpv0zz+lx/sjd/L+f+91y252xn/g3zOa/HeYD15fXaqNfYf2Q/D37xoFfX2pazjSvfv5JL3r2EcAnni3Ff8MG1H3B1/6s5r8d5DO44mKTYJO8L6vkL9egdgeOFHqxZglf0uYInFj/BlkNbahxfvG0xgzoMIi7awyo6DcUWdTvrBkIm86Y2bhl8C59d/xnpB9I5/fXTWb/PmuSceTiTUe+PIj46no/HfOzzZCtfcukLSgoY88EY4qPjWXjjQs5JOofnfnqO4jIPi1cHkN15uznnv+ewK28X82+Yz9lJVZ2EQR0G8dCZD/HGqjdYtGVRrdcpKiti8jeT6Te1H4u2LGLK+VNYfedqLux1YaAfwTu8EXr16IOe40LoRYSpl0wlIiyCCZ9OqKxbA9Yf2k87f6o126bBuIdu7GXYQtSjd+fi3hfz7S3fUlxWzJnTz2Th5oVc+f6VHCw8yNyxcxu04k9SbBJ78vd4Jdb3zL+HTQc2MeOqGbRv2Z6JwyayJ3+Pz5lBjSHrcBbnvXUee/P38vkNnzO8+3CP/f581p9Jjk9m/P/GU1BSUOP4oi2LSH0llUlfT2JUn1H8evevPDzs4TrHQI45GrpxBMeF0AN0bt2ZKRdMYdGWRby9+u3K9p92/kRxebHHiVKNwl3oHeLR2wzpOIQlv1tCYstELppxET/v/pm3f/M2gzs2rDBpj9geVi59Xt259O+sfoc3Vr3BY8MfqwyTXNjzQgZ3GMwzPzxDeUV5g+7vCwcLD3Lh2xeyK28Xn4/7nDO7nVlr3+hm0bw26jW25mxl0teTKtuzDmdxw5wbuPDtCzEYvhj3BTOvmRmQxdkbjYZuHMFxI/RgzXA9o+sZ3L/gfvYVWAucfL3ta8IkjLO6n+Xfm7nH6B3k0dskxSbxw60/cHW/q3lp5Etc1e+qRl0L6k6xzDiYwR2f3cGZXc9k0jlHRVNEmDhsIukH05mzYU6D7l9hKvh+x/f1zs7NL85n5Dsj2XhgI5+M/YQzup5R77XP6n4WE06awAtLXuDnXT/z7+X/ps/Lffhg/Qc8cdYTrLlzTfCEaTyhHr0jOK6EPkzCePXyV8krzuOPC/4IWPH5IR2H0CaqjX9vZot669YhU9jMV9q2aMsH137A3afc3ajrVC5AUsuAbHFZMWM+GEOzsGa8e/W7NTKnrup3FcnxyUz5YUqVsJw3GGO4b/59DH9jOAP/PbBy4lx1CksLGfX+KH7Z8wuzR8/mgp4XeH2PZy54hg4xHRj+xnDu/OxOTup0EqvvWM2T5z5JVEQtAhosqEfvCI4roQfon9CficMm8s6ad/how0cs2bXE/2EbsDz6mBhr4ZGICOu9Q0I3/qZz68515tI/sugRVuxdweujXqdbm241joeHhfPQmQ+xYu8KFm5Z6PV9jTFM/HIiLy97metTrqe4rJjz3jqPG+bcwN78vZX9SspLuGb2NXyz7Rve+s1bPuevt4lqw/RR0+nTrg9v/+ZtFt24iD7t+vh0jSajqAiaNTu6gE511KMPCY47oQd4dPij9G3Xlxvm3EBpRWnghL6N26+EECuDcCyJCIuga5uuNXLpi8qKmPC/Cbz484vcdfJddS58fmPqjXRq1Ymnv3/a6/v+9du/8swPz3Dn0DuZ8ZsZrPv9Ov581p/5YP0H9J3al3/9/C+Ky4oZN2cc89Ln8e/L/s31Kdc36Bkv7n0xa+5cw7jUcYErQBYIaltdykY9+pDguBT6yIhIXr38VQrLCgmXcIZ1G+b/m+TmHh2EBeu9Cn2tVE+x3HxwM6e/fjrTVkzjkTMf4cURnudA2ERGRPLA6Q/w9bavWbJrSb33e/6n53ni6ye4aeBNvHzJy4gI0c2imXzuZNbeuZbTupzGfZ/fR5cXujB7/Wyeu+g5xp80vrGPGXp4I/Tq0Qc9x6XQAwzrNoxHhz3KjQNvbNSqVLWSk1PVow+hCpZNQY/YHpVCP2fDHIZMG8L2nO3877r/8fQFT3uc0Vyd24fcTlxUXL1e/b+X/5sHvrBWWHpt1Gs1JiAlt03m8xs+Z/bo2cRHx/PXc//K/aff3+BnC2nqE3oN3YQEji6BUB9Pnf9U4C6emwvt2x/dj4uD7dsDd78Qx86lv3f+vby09CVO7nQys0bPqhyo9YZWka2455R7mPztZNZlr2NA+wE1+ryV9hZ3fnYnl51wGTOumlHrF4iIcE3/axpUq8ZRaOjGERzXQh9QcnMhOfnofmwsrFrVdPYEObagv7T0Je455R6evejZBk0cuufUe3j2p2cZ99E4+rbry5HSIxSWFlJYVkhhaSErM1dyfo/zmT16dnBNTApWvPHoS0uhvLz2AVulyTluQzcBp3qMXgdj6+Ss7mdxUseTmHXNLP418l8NFuF2Ldrx+PDH2X9kP7/s+YVtOdvIL8mnWVgzEmMSuXPonXwy9pPgT2sMFrzx6O1+StCiHn0gMMZzjD4vTz2fWkiKTWL5+OV+udbE4ROZOHyiX6513OONR2/3a9ny2Nik+Ix69IGgqMj6OVtd6OHojFlFCQW89eg1Th/UqNAHAvc6NzYOLIOgHAdo6MYReCX0IjJCRDaKSIaI1FikUkTOEpEVIlImItdUO3aTiKS7tpv8ZXhQ417nxsZhhc2U4wRfQjdK0FKv0ItIODAVGAn0B64Tkf7Vuu0AbgberXZuPDAJOBU4BZgkIn4s+h6kuNeitwnxxUeU4xQN3TgCbzz6U4AMY8wWY0wJ8D5whXsHY8w2Y8xqoKLauRcDC40xB40xh4CFwAg/2B3caOhGcQqFherROwBvhL4z4F4ofJerzRu8OldExovIchFZvm/fPi8vHcR4EnoN3SihiHr0jiAoBmONMdOMMUONMUMTEhKa2pzG4ylGrx69EopojN4ReCP0u4GubvtdXG3e0JhzQxdPMfqYGAgLU6FXQgdj1KN3CN4I/TIgWUR6iEhzYCww18vrLwAuEpE41yDsRa42Z5ObCyKWuNuIaGEzJbQoca24pemVIU+9Qm+MKQPuxhLoDcAsY8w6EZksIqMARORkEdkFjAb+IyLrXOceBP6C9WWxDJjsanM2ubnWylJh1f55tQyCEkrUt7oUaOgmRPCqBIIxZh4wr1rbE27vl2GFZTydOx2Y3ggbQ4/qdW5s1KNXQglvhF5DNyFBUAzGOo7qdW5s1KNXQgn16B2DCn0gqL6MoI2uMqWEEt4IfWSk9aoefVCjQh8INHSjOAFvhF7EEnv16IMaFfpAUJtHr6EbJZSwxdsOz9RGdLR69EGOCn0gqC1GHxtr/fGo96OEAt549PZx/UwHNSr0/sYYa4GR2oQe1KtXQgNvhV4XCA96VOj9TUGBtYqUpxi9E8sgnHcePP98U1uhBAJfPHoN3QQ1KvT+xlNBMxunFTY7cgQWL4bPPmtqS5RAoB69Y1Ch9zee6tzYOM2jz8iwXlevtkJWirNQj94xqND7G288eqcIfXq69bp/P2RlNa0tiv/RwVjHoELvbzyVKLZxWujGFnqwvHrFWfgSulGPPqhRofc3x5tHb1foVKF3HurROwYVen9TV4w+KsranOTRDxoEnTur0DsRW7ztMge1oYOxQY8Kvb+py6MHZ9W72bQJkpMhNVWF3okUFUHz5jXLbVdHB2ODHhV6f5ObCxER0KKF5+NOKYOQl2cNwJ5wAqSkwIYNUFra1FYp/qS+1aVs1KMPelTo/Y1d50bE83GnFDazUyttj76kxPLwFefgrdCrRx/0qND7m9rq3Ng4xaO3M25soQcN3ziNwkLvhb6oSOdSBDEq9P6mtsqVNk6J0dvee+/e0KcPNGumQu80fAndABQXB9YepcGo0Pub2mrR2zgldJOeDl26WGMRzZtD374q9E7Dl9CN3V8JSlTo/U19Hr0dugn1n7np6VbYxiY1FdasaTp7FP/jq0evQh+0qND7m/pi9LGxUFEB+fnHzqZA4Enod+50xq8VxcJXj14HZIMWFXp/402MHkI7Tn/wIBw4UFPoQb16J6EevWPwSuhFZISIbBSRDBF5xMPxSBGZ6Tr+s4gkudqTRKRQRFa5tn/71/wgw/bU64rRO6GCpZ1xc8IJR9s088Z5qEfvGCLq6yAi4cBU4EJgF7BMROYaY9a7dbsNOGSM6S0iY4FngDGuY5uNMYP8bHdwkp9vxd698ehDOcThnlpp07EjxMer0DsJHYx1DN549KcAGcaYLcaYEuB94Ipqfa4A/ut6/wFwvkhtM4YcTF11bmyc4tGHhUHPnkfbRLQUgtPwNXSjHn3Q4o3QdwZ2uu3vcrV57GOMKQNygbauYz1EZKWIfCMiwz3dQETGi8hyEVm+b98+nx4gqKivzg04w6PftAm6datZ7Co1FdautUJYSuhTVHRUxOtCPfqgJ9CDsXuBbsaYwcD9wLsi0rp6J2PMNGPMUGPM0ISEhACbFEDqqkVv44TB2PT0qvF5m9RUa83crVuPvU2K/9HBWMfgjdDvBrq67XdxtXnsIyIRQBvggDGm2BhzAMAY8wuwGfCgEA7BG4/ePhaqQm9MzdRKm5QU61XDN85AB2MdgzdCvwxIFpEeItIcGAvMrdZnLnCT6/01wFfGGCMiCa7BXESkJ5AMbPGP6UGINzH68HBo3Tp0Qzf79lmVKz0J/YABVqxehT70McYqaaCDsY6g3qwbY0yZiNwNLADCgenGmHUiMhlYboyZC7wOvC0iGcBBrC8DgLOAySJSClQAdxhjDgbiQYICb0I3ENqFzTxl3Ni0bGnVvlGhD33sujU6GOsI6hV6AGPMPGBetbYn3N4XAaM9nPch8GEjbQwdvAndQGgXNrOLmXkSetDMG6fg7TKC7n3Uow9adGasP8nNtTJR6lt6LZQLm6WnWwurJCV5Pp6aatWqLyg4pmYpfqYhQq8efdCiQu9P6it/YBPqoZsePayyxJ5ISbHiu+vWHVu7FP/ii9BHRFibevRBiwq9P8nJqT8+D6Hv0dcWtgEtheAUfBF60OUEgxwVen/irUcfqjH6ulIrbXr0sAZlVehDG1+FXpcTDGpU6P2JL6Gbw4ehrCzwNvmTPXvgyBHPk6VswsKs8I0KfWjTEKFXjz5oUaH3J7549BB6Xn1dqZXupKRY5YpDfXGV45mGhG7Uow9aVOj9ibcx+lAtbOat0KemWjXr9+wJvE1KYFCP3lGo0PsTp3v0mzZZ68N27Vp3Px2QDX3Uo3cUKvT+oqzMyh33RehDLfMmPd2a+RoeXnc/rXkT+qhH7yhU6P1FXp716u1gLISeR19fxo1NXBx06aJCH8rY3rmmVzoCFXp/YYu2t3n0EFoefUUFbN7sndADDBkCX399tGaKElpoeqWjUKH3F97WuYHQjNHv3GmJtrdCf9dd1mDsm28G1CwlQGjoxlGo0PsLX4S+ZUtryngoCb1dzKyuHHp3LrwQTj0V/vY3KCkJnF1KYNDBWEehQu8vfBF6kdArg+BtaqWNCEyaBDt2wFtvBc4uJTDYQl9fgT4b9eiDGucIfVkZTJkCmZlNc39fYvQQeoXN0tOhRQvo1Mn7c0aMgKFDLa++tDRwtin+p6jIEnkR7/qrRx/UOEfot22DJ5+Em29umsWpffHoITQ9+t69vf/DB6vvE09Ya8i+807gbFP8j7fLCNqoRx/UOEfoe/eG55+HBQvgpZeO/f1toW9dY+1zz4RaYbNNm7wP27hz2WUweDA89VTo1fY5nikqOrpylDdER0N5OWzcGDiblAbjHKEHuOMOuPxyeOihY5/DnZtrhTZqq9NenVAK3ZSVWV65twOx7thefUYGvPee/21TAoOvHv2VV0LbtnDyyfDBB4GzS2kQzhJ6EXj9dYiPh+uvP7YxQ2/r3Nj07m15ydOnB84mf7BiBZxzjiX2Q4Y07BqjRlllEf76V8vrU4IfX4X+xBOtz0r//jB6NPzxjzouE0Q4S+gBEhKs3O116yzP/ljhbZ0bm8cfh4sugttug2nTAmdXQ8nOhttvtwZT09Phtdfg6qsbdq2wMPjzn60vtlmz/GunEhh8FXqAbt3g22/h3nvhxRctB2HXroCYp/iG84Qe4OKL4Q9/gJdfhnnz6u/vD3wV+uho+PhjuOQSmDABXnklcLb5QkkJPPecFY9/8024/35LoG+7zbeB2OpcdRUMGAB/+UvTDJYrvtEQoQer6N0//wkzZ1rh08GDYeFC/9un+IQzhR7g6aetcMEtt0BWVuDv56vQg/WHNGeONWD5+983zSCyjTHwySdWQbIHH4Thw2HtWnj2Wd+fyxO2V79hA3z4YeOvpwSWhgq9zbXXwvLlkJhoOV4TJsD+/f6zT/EJ5wp9VBS8+65VbOyWWwK/CIavMXqbyEhL+K64wvrJ+8IL/retPpYsgbPOsgbUwsKsX0Gffgp9+vj3PtdcA337wmOPwVdf6cIkwUxjhR6sz8/PP8N991ljZyecAFOnavZVE+CV0IvICBHZKCIZIvKIh+ORIjLTdfxnEUlyOzbR1b5RRC72n+leMGCA5ZHOnw+XXmp5qv/8J3z0keVtZGX5L4zQEI/epnlzmD3bioHffz9Mnmyt0LR/f91iWFFhLfCRnn40vdMXNm2yxPf0062smP/8x7rvyJENe476CA+Hf/0LDhyA88+3RP/5561nUIILfwg9WOU+XngB0tKsMM7dd8NJJ8E33zT+2orXiKnHqxKRcGATcCGwC1gGXGeMWe/W5/dAqjHmDhEZC/zGGDNGRPoD7wGnAJ2ARcAJxphaUy+GDh1qli9f3sjHcsMYSzw/+8wqzOVpUkeLFtYH0n5t2RJatbIGdtu3r7q1bWvVqQkLs2LW9jZsmOWR//3vDbe1tBTGjas6YNm8OXToYM1ITUiA/HzYt8/6Eti/v2oWS9euVvZDSsrR13btrOyjI0eqvs6bZwl7dLQ1aH3//dZzHwuKiqwUvFdegR9/tH7VjBkDt95qPWdkZM0trBafxBhr/d2DB60JaPZrebn17AkJ1mvbtta/peIdffpYWVb+TIk1xgpV3n+/VRpjzBgrI6ttW+v/yN5atGjceNBxioj8YowZ6vGYF0J/OvB/xpiLXfsTAYwxT7v1WeDq85OIRACZQALwiHtf93613c/vQu+OMZY3uWOHJfo7d1qiWVBgCWBBwdEtL886lp3tvbf87LPwwAONs7GiApYutWzbu9eqALlnj/U+O/voF5D71rat1WfNGiuuvmFD/YXEIiJg/Hgrxz0xsXE2N4bVq60vnLfftr7E6iI83BL88PCj7wsLvQ8FtG5thdfsLw1bTKq/NhT382u7VmPu4c259YXDvH3m9HS44YbAVB89cgSeecbaPJWxjoqyxN7+f3bfbAfL0zP468vBn18yvl4rNRXef7+Bt6pd6CO8OL8zsNNtfxdwam19jDFlIpILtHW1L6l2bmcPBo4HxgN069bNC5MaiMhRr8GXnPDiYst7zs4+6kUbY4myMdYWFgbnntt4G8PC4LTTrK2hlJZaoZg1a45O5IqOPvoaHW0tDOJL3ZpAkZpqxW2nTIEvv7S88+Limlt5+dGtouLo+xYtrMln8fFHX+Pjrf/rAweO/vLZv9/64rYnqdmCWP21obifX9u16mqvTxCqn1vXObW1e3rm2q6TkmKVEwkELVpY5UoefNByUOz/H/f/r8LCqv/nZWVH/+9rexZ/4M9xo4Zcq1cv/93fDW+EPuAYY6YB08Dy6JvYnJpERkLnztYWCjRrBv36WVuo0KqVNRisHD+0amWFiPw96K/UwJvB2N2A+2rQXVxtHvu4QjdtgANenqsoiqIEEG+EfhmQLCI9RKQ5MBaYW63PXOAm1/trgK+MFfyfC4x1ZeX0AJKBpf4xXVEURfGGekM3rpj73cACIByYboxZJyKTgeXGmLnA68DbIpIBHMT6MsDVbxawHigD7qor40ZRFEXxP/Vm3RxrApp1oyiK4lDqyrpx7sxYRVEUBVChVxRFcTwq9IqiKA5HhV5RFMXhBN1grIjsA7Y34hLtgOOxHqo+9/GFPvfxhTfP3d0Yk+DpQNAJfWMRkeW1jTw7GX3u4wt97uOLxj63hm4URVEcjgq9oiiKw3Gi0AfhStvHBH3u4wt97uOLRj2342L0iqIoSlWc6NEriqIobqjQK4qiOBzHCH19C5g7CRGZLiLZIrLWrS1eRBaKSLrrNa4pbfQ3ItJVRBaLyHoRWSci97nanf7cUSKyVETSXM/9pKu9h4j87Pq8z3SVEHccIhIuIitF5FPX/vHy3NtEZI2IrBKR5a62Bn/WHSH0rgXMpwIjgf7Ada6FyZ3Km8CIam2PAF8aY5KBL137TqIMeMAY0x84DbjL9X/s9OcuBs4zxgwEBgEjROQ04BngBWNMb+AQcFsT2hhI7gM2uO0fL88NcK4xZpBb/nyDP+uOEHrgFCDDGLPFGFMCvA9c0cQ2BQxjzLdYdf/duQL4r+v9fwFHrctnjNlrjFnhep+P9cffGec/tzHGHHbtNnNtBjgP+MDV7rjnBhCRLsClwGuufeE4eO46aPBn3SlC72kB8xBZ4NVvJBpj9rreZwKJTWlMIBGRJGAw8DPHwXO7whergGxgIbAZyDHGlLm6OPXz/iLwEOBaEZy2HB/PDdaX+Rci8ouIjHe1NfizHhSLgyv+xRhjRMSRebMiEgN8CPzBGJNnOXkWTn1u16psg0QkFvgI6NvEJgUcEbkMyDbG/CIi5zS1PU3AMGPMbhFpDywUkV/dD/r6WXeKR6+LkEOWiHQEcL1mN7E9fkdEmmGJ/DvGmDmuZsc/t40xJgdYDJwOxIqI7ag58fN+JjBKRLZhhWLPA/6J858bAGPMbtdrNtaX+yk04rPuFKH3ZgFzp+O+QPtNwCdNaIvfccVnXwc2GGOedzvk9OdOcHnyiEg0cCHW+MRi4BpXN8c9tzFmojGmizEmCevv+StjzA04/LkBRKSliLSy3wMXAWtpxGfdMTNjReQSrJievYD5U01sUsAQkfeAc7BKl2YBk4CPgVlAN6wyz9caY6oP2IYsIjIM+A5Yw9GY7aNYcXonP3cq1sBbOJZjNssYM1lEemJ5uvHASmCcMaa46SwNHK7QzYPGmMuOh+d2PeNHrt0I4F1jzFMi0pYGftYdI/SKoiiKZ5wSulEURVFqQYVeURTF4ajQK4qiOBwVekVRFIejQq8oiuJwVOgVRVEcjgq9oiiKw/n/7iJkDiEiDFgAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "plt.plot(res_2[\"epoch\"],res_2[\"accuracy\"],'red')\n", + "plt.plot(res_2[\"epoch\"],res_2[\"val_accuracy\"],'green')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + }, + "id": "0obCswfKOoES", + "outputId": "29af463d-ace9-45d2-ea80-8accfaa9ed7e" + }, + "execution_count": 43, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 43 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "from sklearn.metrics import classification_report, confusion_matrix\n", + "import numpy as np\n", + "\n", + "validation_classes = []\n", + "validation_images = []\n", + "for i in range( -(-validation_label_generator.samples // validation_label_generator.batch_size)):\n", + " batch = validation_label_generator.next()\n", + " expected = np.argmax(batch[1], axis=1) \n", + " validation_classes.extend(expected)\n", + " validation_images.extend(batch[0])\n", + "validation_classes = np.array(validation_classes)\n", + "validation_images = np.array(validation_images)\n", + "Y_pred = model.predict(validation_images)\n", + "y_pred = np.argmax(Y_pred, axis=1)\n", + "\n", + "\n", + "print(classification_report(validation_classes, y_pred, \n", + "\t\ttarget_names = ['mask_weared_incorrect', 'with_mask', 'without_mask']))\n", + "# print classification report" + ], + "metadata": { + "id": "fJ-ZtU84r66Z", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "4802efa7-06b1-44e1-f54a-4fe6d2c64b75" + }, + "execution_count": 42, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + "mask_weared_incorrect 0.99 1.00 0.99 598\n", + " with_mask 0.98 0.97 0.98 598\n", + " without_mask 0.98 0.98 0.98 598\n", + "\n", + " accuracy 0.98 1794\n", + " macro avg 0.98 0.98 0.98 1794\n", + " weighted avg 0.98 0.98 0.98 1794\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Use the classification report to print precision, recall, f1-score for the three classes(optional, brownie points)" + ], + "metadata": { + "id": "VytDxkswrvXw" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file