[2ed9d9]: / resnet50.ipynb

Download this file

931 lines (930 with data), 136.7 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d1a2916e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Importing necessary libraries\n",
    "import os\n",
    "import random\n",
    "import shutil\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.applications import VGG16, VGG19, ResNet50, InceptionV3, Xception\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense, GlobalAveragePooling2D\n",
    "from keras.optimizers import Adam\n",
    "from keras.callbacks import ModelCheckpoint\n",
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "\n",
    "# Setting random seed for reproducibility\n",
    "np.random.seed(42)\n",
    "random.seed(42)\n",
    "\n",
    "# Define constants\n",
    "NUM_CLASSES = 2\n",
    "IMG_SIZE = (224, 224)\n",
    "BATCH_SIZE = 32\n",
    "TRAIN_DIR = 'train'\n",
    "VAL_DIR = 'val'\n",
    "TEST_DIR = 'test'\n",
    "TRAIN_SPLIT = 0.7\n",
    "VAL_SPLIT = 0.1\n",
    "TEST_SPLIT = 0.2\n",
    "test_samples = 280"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2ec5f899",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the base directory where the image data is located\n",
    "BASE_DIR = r\"C:\\Users\\mohit\\Downloads\\DIP Assignment 2\\Data\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4e4b92eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the paths for training, validation, and test data\n",
    "TRAIN_DIR = os.path.join(BASE_DIR, 'train')\n",
    "VAL_DIR = os.path.join(BASE_DIR, 'val')\n",
    "TEST_DIR = os.path.join(BASE_DIR, 'test')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bdf45afa",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load and preprocess the data\n",
    "train_datagen = ImageDataGenerator(rescale=1./255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)\n",
    "val_datagen = ImageDataGenerator(rescale=1./255)\n",
    "test_datagen = ImageDataGenerator(rescale=1./255)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cc0e78ea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 980 images belonging to 2 classes.\n",
      "Found 140 images belonging to 2 classes.\n",
      "Found 280 images belonging to 2 classes.\n"
     ]
    }
   ],
   "source": [
    "train_generator = train_datagen.flow_from_directory(TRAIN_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical')\n",
    "\n",
    "val_generator = val_datagen.flow_from_directory(VAL_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical')\n",
    "\n",
    "test_generator = test_datagen.flow_from_directory(TEST_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical',shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0411f293",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_1\"\n",
      "__________________________________________________________________________________________________\n",
      " Layer (type)                   Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      " input_2 (InputLayer)           [(None, 224, 224, 3  0           []                               \n",
      "                                )]                                                                \n",
      "                                                                                                  \n",
      " conv1_pad (ZeroPadding2D)      (None, 230, 230, 3)  0           ['input_2[0][0]']                \n",
      "                                                                                                  \n",
      " conv1_conv (Conv2D)            (None, 112, 112, 64  9472        ['conv1_pad[0][0]']              \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv1_bn (BatchNormalization)  (None, 112, 112, 64  256         ['conv1_conv[0][0]']             \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv1_relu (Activation)        (None, 112, 112, 64  0           ['conv1_bn[0][0]']               \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " pool1_pad (ZeroPadding2D)      (None, 114, 114, 64  0           ['conv1_relu[0][0]']             \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " pool1_pool (MaxPooling2D)      (None, 56, 56, 64)   0           ['pool1_pad[0][0]']              \n",
      "                                                                                                  \n",
      " conv2_block1_1_conv (Conv2D)   (None, 56, 56, 64)   4160        ['pool1_pool[0][0]']             \n",
      "                                                                                                  \n",
      " conv2_block1_1_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block1_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block1_1_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block1_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block1_2_conv (Conv2D)   (None, 56, 56, 64)   36928       ['conv2_block1_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block1_2_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block1_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block1_2_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block1_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block1_0_conv (Conv2D)   (None, 56, 56, 256)  16640       ['pool1_pool[0][0]']             \n",
      "                                                                                                  \n",
      " conv2_block1_3_conv (Conv2D)   (None, 56, 56, 256)  16640       ['conv2_block1_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block1_0_bn (BatchNormal  (None, 56, 56, 256)  1024       ['conv2_block1_0_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block1_3_bn (BatchNormal  (None, 56, 56, 256)  1024       ['conv2_block1_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block1_add (Add)         (None, 56, 56, 256)  0           ['conv2_block1_0_bn[0][0]',      \n",
      "                                                                  'conv2_block1_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv2_block1_out (Activation)  (None, 56, 56, 256)  0           ['conv2_block1_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv2_block2_1_conv (Conv2D)   (None, 56, 56, 64)   16448       ['conv2_block1_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv2_block2_1_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block2_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block2_1_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block2_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block2_2_conv (Conv2D)   (None, 56, 56, 64)   36928       ['conv2_block2_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block2_2_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block2_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block2_2_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block2_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block2_3_conv (Conv2D)   (None, 56, 56, 256)  16640       ['conv2_block2_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block2_3_bn (BatchNormal  (None, 56, 56, 256)  1024       ['conv2_block2_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block2_add (Add)         (None, 56, 56, 256)  0           ['conv2_block1_out[0][0]',       \n",
      "                                                                  'conv2_block2_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv2_block2_out (Activation)  (None, 56, 56, 256)  0           ['conv2_block2_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv2_block3_1_conv (Conv2D)   (None, 56, 56, 64)   16448       ['conv2_block2_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv2_block3_1_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block3_1_conv[0][0]']    \n",
      " ization)                                                                                         \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                  \n",
      " conv2_block3_1_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block3_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block3_2_conv (Conv2D)   (None, 56, 56, 64)   36928       ['conv2_block3_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block3_2_bn (BatchNormal  (None, 56, 56, 64)  256         ['conv2_block3_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block3_2_relu (Activatio  (None, 56, 56, 64)  0           ['conv2_block3_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv2_block3_3_conv (Conv2D)   (None, 56, 56, 256)  16640       ['conv2_block3_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv2_block3_3_bn (BatchNormal  (None, 56, 56, 256)  1024       ['conv2_block3_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv2_block3_add (Add)         (None, 56, 56, 256)  0           ['conv2_block2_out[0][0]',       \n",
      "                                                                  'conv2_block3_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv2_block3_out (Activation)  (None, 56, 56, 256)  0           ['conv2_block3_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block1_1_conv (Conv2D)   (None, 28, 28, 128)  32896       ['conv2_block3_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block1_1_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block1_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block1_1_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block1_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block1_2_conv (Conv2D)   (None, 28, 28, 128)  147584      ['conv3_block1_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block1_2_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block1_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block1_2_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block1_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block1_0_conv (Conv2D)   (None, 28, 28, 512)  131584      ['conv2_block3_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block1_3_conv (Conv2D)   (None, 28, 28, 512)  66048       ['conv3_block1_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block1_0_bn (BatchNormal  (None, 28, 28, 512)  2048       ['conv3_block1_0_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block1_3_bn (BatchNormal  (None, 28, 28, 512)  2048       ['conv3_block1_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block1_add (Add)         (None, 28, 28, 512)  0           ['conv3_block1_0_bn[0][0]',      \n",
      "                                                                  'conv3_block1_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv3_block1_out (Activation)  (None, 28, 28, 512)  0           ['conv3_block1_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block2_1_conv (Conv2D)   (None, 28, 28, 128)  65664       ['conv3_block1_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block2_1_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block2_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block2_1_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block2_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block2_2_conv (Conv2D)   (None, 28, 28, 128)  147584      ['conv3_block2_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block2_2_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block2_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block2_2_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block2_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block2_3_conv (Conv2D)   (None, 28, 28, 512)  66048       ['conv3_block2_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block2_3_bn (BatchNormal  (None, 28, 28, 512)  2048       ['conv3_block2_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block2_add (Add)         (None, 28, 28, 512)  0           ['conv3_block1_out[0][0]',       \n",
      "                                                                  'conv3_block2_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv3_block2_out (Activation)  (None, 28, 28, 512)  0           ['conv3_block2_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block3_1_conv (Conv2D)   (None, 28, 28, 128)  65664       ['conv3_block2_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block3_1_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block3_1_conv[0][0]']    \n",
      " ization)                                                                                         \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                  \n",
      " conv3_block3_1_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block3_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block3_2_conv (Conv2D)   (None, 28, 28, 128)  147584      ['conv3_block3_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block3_2_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block3_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block3_2_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block3_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block3_3_conv (Conv2D)   (None, 28, 28, 512)  66048       ['conv3_block3_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block3_3_bn (BatchNormal  (None, 28, 28, 512)  2048       ['conv3_block3_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block3_add (Add)         (None, 28, 28, 512)  0           ['conv3_block2_out[0][0]',       \n",
      "                                                                  'conv3_block3_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv3_block3_out (Activation)  (None, 28, 28, 512)  0           ['conv3_block3_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block4_1_conv (Conv2D)   (None, 28, 28, 128)  65664       ['conv3_block3_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv3_block4_1_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block4_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block4_1_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block4_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block4_2_conv (Conv2D)   (None, 28, 28, 128)  147584      ['conv3_block4_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block4_2_bn (BatchNormal  (None, 28, 28, 128)  512        ['conv3_block4_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block4_2_relu (Activatio  (None, 28, 28, 128)  0          ['conv3_block4_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv3_block4_3_conv (Conv2D)   (None, 28, 28, 512)  66048       ['conv3_block4_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv3_block4_3_bn (BatchNormal  (None, 28, 28, 512)  2048       ['conv3_block4_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv3_block4_add (Add)         (None, 28, 28, 512)  0           ['conv3_block3_out[0][0]',       \n",
      "                                                                  'conv3_block4_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv3_block4_out (Activation)  (None, 28, 28, 512)  0           ['conv3_block4_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block1_1_conv (Conv2D)   (None, 14, 14, 256)  131328      ['conv3_block4_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block1_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block1_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block1_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block1_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block1_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block1_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block1_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block1_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block1_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block1_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block1_0_conv (Conv2D)   (None, 14, 14, 1024  525312      ['conv3_block4_out[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block1_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block1_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block1_0_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block1_0_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block1_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block1_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block1_add (Add)         (None, 14, 14, 1024  0           ['conv4_block1_0_bn[0][0]',      \n",
      "                                )                                 'conv4_block1_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block1_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block1_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block2_1_conv (Conv2D)   (None, 14, 14, 256)  262400      ['conv4_block1_out[0][0]']       \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                  \n",
      " conv4_block2_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block2_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block2_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block2_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block2_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block2_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block2_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block2_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block2_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block2_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block2_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block2_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block2_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block2_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block2_add (Add)         (None, 14, 14, 1024  0           ['conv4_block1_out[0][0]',       \n",
      "                                )                                 'conv4_block2_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block2_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block2_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block3_1_conv (Conv2D)   (None, 14, 14, 256)  262400      ['conv4_block2_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block3_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block3_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block3_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block3_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block3_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block3_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block3_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block3_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block3_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block3_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block3_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block3_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block3_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block3_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block3_add (Add)         (None, 14, 14, 1024  0           ['conv4_block2_out[0][0]',       \n",
      "                                )                                 'conv4_block3_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block3_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block3_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block4_1_conv (Conv2D)   (None, 14, 14, 256)  262400      ['conv4_block3_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block4_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block4_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block4_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block4_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block4_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block4_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block4_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block4_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block4_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block4_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block4_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block4_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block4_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block4_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block4_add (Add)         (None, 14, 14, 1024  0           ['conv4_block3_out[0][0]',       \n",
      "                                )                                 'conv4_block4_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block4_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block4_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " conv4_block5_1_conv (Conv2D)   (None, 14, 14, 256)  262400      ['conv4_block4_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block5_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block5_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block5_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block5_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block5_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block5_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block5_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block5_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block5_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block5_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block5_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block5_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block5_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block5_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block5_add (Add)         (None, 14, 14, 1024  0           ['conv4_block4_out[0][0]',       \n",
      "                                )                                 'conv4_block5_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block5_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block5_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block6_1_conv (Conv2D)   (None, 14, 14, 256)  262400      ['conv4_block5_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv4_block6_1_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block6_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block6_1_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block6_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block6_2_conv (Conv2D)   (None, 14, 14, 256)  590080      ['conv4_block6_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv4_block6_2_bn (BatchNormal  (None, 14, 14, 256)  1024       ['conv4_block6_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv4_block6_2_relu (Activatio  (None, 14, 14, 256)  0          ['conv4_block6_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv4_block6_3_conv (Conv2D)   (None, 14, 14, 1024  263168      ['conv4_block6_2_relu[0][0]']    \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block6_3_bn (BatchNormal  (None, 14, 14, 1024  4096       ['conv4_block6_3_conv[0][0]']    \n",
      " ization)                       )                                                                 \n",
      "                                                                                                  \n",
      " conv4_block6_add (Add)         (None, 14, 14, 1024  0           ['conv4_block5_out[0][0]',       \n",
      "                                )                                 'conv4_block6_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv4_block6_out (Activation)  (None, 14, 14, 1024  0           ['conv4_block6_add[0][0]']       \n",
      "                                )                                                                 \n",
      "                                                                                                  \n",
      " conv5_block1_1_conv (Conv2D)   (None, 7, 7, 512)    524800      ['conv4_block6_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block1_1_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block1_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block1_1_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block1_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block1_2_conv (Conv2D)   (None, 7, 7, 512)    2359808     ['conv5_block1_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block1_2_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block1_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block1_2_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block1_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block1_0_conv (Conv2D)   (None, 7, 7, 2048)   2099200     ['conv4_block6_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block1_3_conv (Conv2D)   (None, 7, 7, 2048)   1050624     ['conv5_block1_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block1_0_bn (BatchNormal  (None, 7, 7, 2048)  8192        ['conv5_block1_0_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block1_3_bn (BatchNormal  (None, 7, 7, 2048)  8192        ['conv5_block1_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block1_add (Add)         (None, 7, 7, 2048)   0           ['conv5_block1_0_bn[0][0]',      \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                  'conv5_block1_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv5_block1_out (Activation)  (None, 7, 7, 2048)   0           ['conv5_block1_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block2_1_conv (Conv2D)   (None, 7, 7, 512)    1049088     ['conv5_block1_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block2_1_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block2_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block2_1_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block2_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block2_2_conv (Conv2D)   (None, 7, 7, 512)    2359808     ['conv5_block2_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block2_2_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block2_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block2_2_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block2_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block2_3_conv (Conv2D)   (None, 7, 7, 2048)   1050624     ['conv5_block2_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block2_3_bn (BatchNormal  (None, 7, 7, 2048)  8192        ['conv5_block2_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block2_add (Add)         (None, 7, 7, 2048)   0           ['conv5_block1_out[0][0]',       \n",
      "                                                                  'conv5_block2_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv5_block2_out (Activation)  (None, 7, 7, 2048)   0           ['conv5_block2_add[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block3_1_conv (Conv2D)   (None, 7, 7, 512)    1049088     ['conv5_block2_out[0][0]']       \n",
      "                                                                                                  \n",
      " conv5_block3_1_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block3_1_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block3_1_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block3_1_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block3_2_conv (Conv2D)   (None, 7, 7, 512)    2359808     ['conv5_block3_1_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block3_2_bn (BatchNormal  (None, 7, 7, 512)   2048        ['conv5_block3_2_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block3_2_relu (Activatio  (None, 7, 7, 512)   0           ['conv5_block3_2_bn[0][0]']      \n",
      " n)                                                                                               \n",
      "                                                                                                  \n",
      " conv5_block3_3_conv (Conv2D)   (None, 7, 7, 2048)   1050624     ['conv5_block3_2_relu[0][0]']    \n",
      "                                                                                                  \n",
      " conv5_block3_3_bn (BatchNormal  (None, 7, 7, 2048)  8192        ['conv5_block3_3_conv[0][0]']    \n",
      " ization)                                                                                         \n",
      "                                                                                                  \n",
      " conv5_block3_add (Add)         (None, 7, 7, 2048)   0           ['conv5_block2_out[0][0]',       \n",
      "                                                                  'conv5_block3_3_bn[0][0]']      \n",
      "                                                                                                  \n",
      " conv5_block3_out (Activation)  (None, 7, 7, 2048)   0           ['conv5_block3_add[0][0]']       \n",
      "                                                                                                  \n",
      " global_average_pooling2d_1 (Gl  (None, 2048)        0           ['conv5_block3_out[0][0]']       \n",
      " obalAveragePooling2D)                                                                            \n",
      "                                                                                                  \n",
      " dense_2 (Dense)                (None, 1024)         2098176     ['global_average_pooling2d_1[0][0\n",
      "                                                                 ]']                              \n",
      "                                                                                                  \n",
      " dense_3 (Dense)                (None, 2)            2050        ['dense_2[0][0]']                \n",
      "                                                                                                  \n",
      "==================================================================================================\n",
      "Total params: 25,687,938\n",
      "Trainable params: 2,100,226\n",
      "Non-trainable params: 23,587,712\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# Define function for creating transfer learning models\n",
    "def create_transfer_model(base_model, num_classes):\n",
    "    x = base_model.output\n",
    "    x = GlobalAveragePooling2D()(x)\n",
    "    x = Dense(1024, activation='relu')(x)\n",
    "    predictions = Dense(num_classes, activation='softmax')(x)\n",
    "    model = Model(inputs=base_model.input, outputs=predictions)\n",
    "    return model\n",
    "\n",
    "# Define ResNet50 model\n",
    "resnet50_base = ResNet50(include_top=False, weights='imagenet', input_shape=(IMG_SIZE[0], IMG_SIZE[1], 3))\n",
    "resnet50_base.trainable = False\n",
    "resnet50_model = create_transfer_model(resnet50_base, NUM_CLASSES)\n",
    "resnet50_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e68cf96c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compile the models\n",
    "optimizer = Adam(learning_rate=0.0001)\n",
    "resnet50_model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "58c11893",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define checkpoint callback to save the best model during training\n",
    "checkpoint = ModelCheckpoint('best_model.h5', monitor='val_loss', save_best_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "54d73119",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34780\\1868370344.py:2: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.\n",
      "  resnet50_history = resnet50_model.fit_generator(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=4, validation_data=val_generator, validation_steps=val_generator.n // val_generator.batch_size, callbacks=[checkpoint])\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/4\n",
      "30/30 [==============================] - 55s 2s/step - loss: 0.7525 - accuracy: 0.5000 - val_loss: 0.6927 - val_accuracy: 0.5078\n",
      "Epoch 2/4\n",
      "30/30 [==============================] - 38s 1s/step - loss: 0.6873 - accuracy: 0.5316 - val_loss: 0.6918 - val_accuracy: 0.5000\n",
      "Epoch 3/4\n",
      "30/30 [==============================] - 38s 1s/step - loss: 0.7027 - accuracy: 0.4905 - val_loss: 0.7059 - val_accuracy: 0.5156\n",
      "Epoch 4/4\n",
      "30/30 [==============================] - 40s 1s/step - loss: 0.6849 - accuracy: 0.5411 - val_loss: 0.6734 - val_accuracy: 0.6484\n"
     ]
    }
   ],
   "source": [
    "# Train the models\n",
    "resnet50_history = resnet50_model.fit_generator(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=4, validation_data=val_generator, validation_steps=val_generator.n // val_generator.batch_size, callbacks=[checkpoint])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d0706f36",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34780\\556035509.py:2: UserWarning: `Model.evaluate_generator` is deprecated and will be removed in a future version. Please use `Model.evaluate`, which supports generators.\n",
      "  resnet50_scores = resnet50_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ResNet50 Test Loss: 0.6703158617019653\n",
      "ResNet50 Test Accuracy: 0.66796875\n"
     ]
    }
   ],
   "source": [
    "# Evaluate the models on test data\n",
    "resnet50_scores = resnet50_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n",
    "print(\"ResNet50 Test Loss:\", resnet50_scores[0])\n",
    "print(\"ResNet50 Test Accuracy:\", resnet50_scores[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bc0c3919",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34780\\2677680890.py:8: UserWarning: `Model.predict_generator` is deprecated and will be removed in a future version. Please use `Model.predict`, which supports generators.\n",
      "  resnet50_predictions = resnet50_model.predict_generator(test_generator, steps=num_prediction_steps, verbose=1)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9/9 [==============================] - 9s 938ms/step\n"
     ]
    }
   ],
   "source": [
    "# Get the number of test samples\n",
    "num_test_samples = test_generator.n\n",
    "\n",
    "# Calculate the number of steps for prediction\n",
    "num_prediction_steps = num_test_samples // test_generator.batch_size + 1\n",
    "\n",
    "# Generate predictions for all test samples\n",
    "resnet50_predictions = resnet50_model.predict_generator(test_generator, steps=num_prediction_steps, verbose=1)\n",
    "\n",
    "# Convert predictions to class labels\n",
    "resnet50_predicted_labels = np.argmax(resnet50_predictions, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ef0577d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get true class labels\n",
    "true_labels = test_generator.classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ee8ac70e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculate classification report\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "# Get the ground truth labels\n",
    "ground_truth_labels = test_generator.classes\n",
    "\n",
    "# Get the predicted labels\n",
    "resnet50_predicted_labels = np.argmax(resnet50_predictions, axis=1)\n",
    "\n",
    "# Calculate classification report\n",
    "classification_report_resnet50 = classification_report(ground_truth_labels, resnet50_predicted_labels, zero_division=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "16c7ab92",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ResNet50 Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.58      0.99      0.73       140\n",
      "           1       0.98      0.29      0.44       140\n",
      "\n",
      "    accuracy                           0.64       280\n",
      "   macro avg       0.78      0.64      0.59       280\n",
      "weighted avg       0.78      0.64      0.59       280\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\"ResNet50 Classification Report:\")\n",
    "print(classification_report_resnet50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "3cf08127",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/4\n",
      "30/30 [==============================] - 33s 1s/step - loss: 0.6784 - accuracy: 0.5686\n",
      "Epoch 2/4\n",
      "30/30 [==============================] - 34s 1s/step - loss: 0.6716 - accuracy: 0.6108\n",
      "Epoch 3/4\n",
      "30/30 [==============================] - 37s 1s/step - loss: 0.6632 - accuracy: 0.6783\n",
      "Epoch 4/4\n",
      "30/30 [==============================] - 40s 1s/step - loss: 0.6599 - accuracy: 0.5886\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " import matplotlib.pyplot as plt\n",
    "\n",
    "# Train the VGG16 model and obtain the training history\n",
    "resnet50_history = resnet50_model.fit(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=4)\n",
    "\n",
    "# Plot the training loss curve\n",
    "plt.plot(resnet50_history.history['loss'])\n",
    "plt.title('resnet Training Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "f7e4a29c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHFCAYAAAAaD0bAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABkWUlEQVR4nO3dd1wTh/8G8CdhhB3ZIiAgKuBWcADugau2Wq2zzvbburetVltbO7C2VVtb7VD012rVOrC2Ttx74yoCIirIEJCyZ5L7/YGmpaACApfxvF+vvF5y3CWfnBEeL7l7JIIgCCAiIiLSI1KxByAiIiKqbQxAREREpHcYgIiIiEjvMAARERGR3mEAIiIiIr3DAERERER6hwGIiIiI9A4DEBEREekdBiAiIiLSOwxARFSuxMREfPjhh7h69epz13V3d4dEInnubcOGDS8004YNGyCRSHDv3r1Kb3vv3r1qmYGIdIOh2AMQkWZKTEzERx99BHd3d7Rq1eqZ64aGhqKwsFD99dq1a7Fu3Trs378fcrlcvdzT0/OFZurfvz/Onj0LJyenSm/r5OSEs2fPvvAMRKQbGICIRJCXlwczMzOxx6g2rVu3LvX1/v37AQC+vr6ws7N76naV3Q/29vawt7ev0owymQwdOnSo0rb6pri4GBKJBIaG/BVBuotvgRHVsA8//BASiQRXrlzBkCFDYG1trT4KIQgCVq9ejVatWsHU1BTW1tYYMmQIYmNjS91HeHg4XnrpJTg4OEAmk6FevXro378/Hjx4oF5HIpFg6tSp+OWXX+Dj4wMzMzO0bNkSf/75Z5mZbt++jZEjR6rvz8fHB9999536+8eOHUPbtm0BAOPHj1e/hfXhhx9WeT+MGzcOFhYWuHHjBoKCgmBpaYkePXoAAMLCwvDKK6/AxcUFJiYmaNiwId5++22kpaWVuo/y3gLr2rUrmjVrhosXL6JTp04wMzNDgwYNsHTpUqhUKvV65b0F9uTv5q+//sKIESMgl8vh6OiICRMmIDMzs9RjZ2Rk4I033oCNjQ0sLCzQv39/xMbGVmi/FBQUYM6cOWjVqhXkcjlsbGzg7++P33//vcy6KpUKq1atUr8m6tSpgw4dOmD37t2l1vv111/h7+8PCwsLWFhYoFWrVli3bp36++7u7hg3blyZ++/atSu6du2q/vrYsWOQSCT45ZdfMGfOHDg7O0MmkyEmJgapqamYPHkymjRpAgsLCzg4OKB79+44efJkmfstLCzEkiVL4OPjAxMTE9ja2qJbt244c+YMAKBHjx7w9vbGf/u3BUFAw4YN0b9//2fuQ6LqxnhPVEteffVVDB8+HBMnTkRubi4A4O2338aGDRswffp0fP7550hPT8eSJUsQEBCAa9euwdHREbm5uejVqxc8PDzw3XffwdHREcnJyTh69Ciys7NLPcaePXtw8eJFLFmyBBYWFli2bBkGDRqEqKgoNGjQAAAQERGBgIAA1K9fH1999RXq1q2LAwcOYPr06UhLS8PixYvRpk0brF+/HuPHj8eiRYvUv5xcXFxeaB8UFRXh5Zdfxttvv4358+dDoVAAAO7cuQN/f3+8+eabkMvluHfvHpYvX46OHTvixo0bMDIyeub9JicnY9SoUZgzZw4WL16M0NBQLFiwAPXq1cOYMWOeO9fgwYMxbNgwvPHGG7hx4wYWLFgAAAgJCQFQEkoGDBiAS5cu4cMPP0SbNm1w9uxZ9OnTp0LPu7CwEOnp6Zg7dy6cnZ1RVFSEQ4cO4dVXX8X69etLzThu3Dhs3LgRb7zxBpYsWQJjY2NcuXKlVOj74IMP8PHHH+PVV1/FnDlzIJfLcfPmTdy/f79C85RnwYIF8Pf3x/fffw+pVAoHBwekpqYCABYvXoy6desiJycHoaGh6Nq1Kw4fPqwOUgqFAn379sXJkycxc+ZMdO/eHQqFAufOnUNcXBwCAgIwY8YMvPLKKzh8+DB69uypftx9+/bhzp07+Oabb6o8O1GVCERUoxYvXiwAED744INSy8+ePSsAEL766qtSy+Pj4wVTU1PhnXfeEQRBEC5duiQAEHbt2vXMxwEgODo6CllZWeplycnJglQqFYKDg9XLevfuLbi4uAiZmZmltp86dapgYmIipKenC4IgCBcvXhQACOvXr6/yc05NTVUvGzt2rABACAkJeea2KpVKKC4uFu7fvy8AEH7//Xf199avXy8AEO7evate1qVLFwGAcP78+VL306RJE6F3797qr+/evVvm+TyZc9myZaW2nTx5smBiYiKoVCpBEARhz549AgBhzZo1pdYLDg4WAAiLFy9+5nP6L4VCIRQXFwtvvPGG0Lp1a/XyEydOCACEhQsXPnXb2NhYwcDAQBg1atQzH8PNzU0YO3ZsmeVdunQRunTpov766NGjAgChc+fOFZ67R48ewqBBg9TLf/75ZwGA8NNPPz11W6VSKTRo0EB45ZVXSi3v27ev4Onpqd7XRLWFb4ER1ZLBgweX+vrPP/+ERCLB66+/DoVCob7VrVsXLVu2xLFjxwAADRs2hLW1Nd599118//33iIiIeOpjdOvWDZaWluqvHR0d4eDgoD4yUFBQgMOHD2PQoEEwMzMr9bj9+vVDQUEBzp07V/1P/l/+ux8AICUlBRMnToSrqysMDQ1hZGQENzc3AMCtW7eee59169ZFu3btSi1r0aJFhY+IvPzyy2W2LSgoQEpKCgDg+PHjAIChQ4eWWm/EiBEVun8A2LZtGwIDA2FhYaF+juvWrSv1/Pbt2wcAmDJlylPvJywsDEql8pnrVEV5fy8A8P3336NNmzYwMTFRz3348OEyc5uYmGDChAlPvX+pVIqpU6fizz//RFxcHICSI3/79+/H5MmTIZFIqvX5ED0PAxBRLfnvmUsPHz6EIAhwdHSEkZFRqdu5c+fUn3+Ry+U4fvw4WrVqhffeew9NmzZFvXr1sHjxYhQXF5e6T1tb2zKPK5PJkJ+fDwB49OgRFAoFVq1aVeYx+/XrBwBlPndTnczMzGBlZVVqmUqlQlBQEHbu3Il33nkHhw8fxoULF9RB7Mnsz/K8513Z7WUyWanHfvToEQwNDWFjY1NqPUdHxwrd/86dOzF06FA4Oztj48aNOHv2LC5evIgJEyagoKBAvV5qaioMDAxQt27dp97Xk7elXvTtyP8q78y65cuXY9KkSWjfvj127NiBc+fO4eLFi+jTp0+pfZuamop69epBKn32r5QJEybA1NQU33//PQDgu+++g6mp6TODE1FN4WeAiGrJf/+Ha2dnB4lEgpMnT6p/4f7bv5c1b94cW7ZsgSAIuH79OjZs2IAlS5bA1NQU8+fPr/AM1tbWMDAwwOjRo596BMHDw6PC91dZ5f0v/+bNm7h27Ro2bNiAsWPHqpfHxMTU2ByVZWtrC4VCgfT09FIhKDk5uULbb9y4ER4eHti6dWupffDvSwcAJWe5KZVKJCcnP/VU/ydnwT148ACurq5PfUwTE5My9w+UBNzyzswr7+9m48aN6Nq1K9asWVNq+X8/e2Zvb49Tp05BpVI9MwTJ5XKMHTsWa9euxdy5c7F+/XqMHDkSderUeeo2RDWFR4CIRPLSSy9BEAQkJCTAz8+vzK158+ZltpFIJGjZsiVWrFiBOnXq4MqVK5V6TDMzM3Tr1g3h4eFo0aJFuY/75GjIf4+C1JQnv3j/GwJ/+OGHGn3cyujSpQsAYOvWraWWb9mypULbSyQSGBsblwoZycnJZc4C69u3LwCUCRz/FhQUBAMDg2euA5ScBXb9+vVSy6KjoxEVFVWhmZ/M/d+/l+vXr+Ps2bNl5i4oKKjQRSaffNh+yJAhyMjIwNSpUys8D1F14hEgIpEEBgbirbfewvjx43Hp0iV07twZ5ubmSEpKwqlTp9C8eXNMmjQJf/75J1avXo2BAweiQYMGEAQBO3fuREZGBnr16lXpx/3666/RsWNHdOrUCZMmTYK7uzuys7MRExODP/74A0eOHAFQctFCU1NTbNq0CT4+PrCwsEC9evVQr169at0P3t7e8PT0xPz58yEIAmxsbPDHH38gLCysWh/nRfTp0weBgYGYM2cOsrKy4Ovri7Nnz+Lnn38GgOe+9fPSSy9h586dmDx5MoYMGYL4+Hh8/PHHcHJywu3bt9XrderUCaNHj8Ynn3yChw8f4qWXXoJMJkN4eDjMzMwwbdo0uLu747333sPHH3+M/Px89en7ERERSEtLw0cffQQAGD16NF5//XVMnjwZgwcPxv3797Fs2bJKXUfppZdewscff4zFixejS5cuiIqKwpIlS+Dh4aE+gw8o+SzU+vXrMXHiRERFRaFbt25QqVQ4f/48fHx8MHz4cPW6jRs3Rp8+fbBv3z507NgRLVu2rPA8RNVK1I9gE+mB8s6I+reQkBChffv2grm5uWBqaip4enoKY8aMES5duiQIgiBERkYKI0aMEDw9PQVTU1NBLpcL7dq1EzZs2FDqfgAIU6ZMKXP/5Z0NdPfuXWHChAmCs7OzYGRkJNjb2wsBAQHCJ598Umq9zZs3C97e3oKRkVGlznZ62llg5ubm5a4fEREh9OrVS7C0tBSsra2F1157TYiLiyvzmE87C6xp06Zl7nPs2LGCm5tbqeeMp5wF9t+/m/IeJz09XRg/frxQp04dwczMTOjVq5dw7tw5AYDw9ddfP3efLF26VHB3dxdkMpng4+Mj/PTTT+rH/zelUimsWLFCaNasmWBsbCzI5XLB399f+OOPP0qt9/PPPwtt27YVTExMBAsLC6F169alnptKpRKWLVsmNGjQQDAxMRH8/PyEI0eOPPUssG3btpWZubCwUJg7d67g7OwsmJiYCG3atBF27dpVZt8KgiDk5+cLH3zwgdCoUSPB2NhYsLW1Fbp37y6cOXOmzP1u2LBBACBs2bLlufuNqKZIBOE/V6UiIqIK+fXXXzFq1CicPn0aAQEBYo+jNQYPHoxz587h3r17z73GE1FN4VtgREQVsHnzZiQkJKB58+aQSqU4d+4cvvjiC3Tu3JnhpwIKCwtx5coVXLhwAaGhoVi+fDnDD4mKR4CIiCrgzz//xIcffoiYmBjk5ubCyckJAwcOxCeffFLm1H4q6969e/Dw8ICVlRVGjhyJb7/9FgYGBmKPRXqMAYiIiIj0Dk+DJyIiIr3DAERERER6hwGIiIiI9A7PAiuHSqVCYmIiLC0tWdBHRESkJQRBQHZ2doW66RiAypGYmPjMjh0iIiLSXPHx8c8tDGYAKoelpSWAkh3I01uJiIi0Q1ZWFlxdXdW/x5+FAagcT972srKyYgAiIiLSMhX5+Ao/BE1ERER6hwGIiIiI9A4DEBEREekdBiAiIiLSO6IHoNWrV8PDwwMmJibw9fXFyZMnn7l+YWEhFi5cCDc3N8hkMnh6eiIkJKTUOitXroSXlxdMTU3h6uqKWbNmoaCgoCafBhEREWkRUc8C27p1K2bOnInVq1cjMDAQP/zwA/r27YuIiAjUr1+/3G2GDh2Khw8fYt26dWjYsCFSUlKgUCjU39+0aRPmz5+PkJAQBAQEIDo6GuPGjQMArFixojaeFhEREWk4Udvg27dvjzZt2mDNmjXqZT4+Phg4cCCCg4PLrL9//34MHz4csbGxsLGxKfc+p06dilu3buHw4cPqZXPmzMGFCxeee3TpiaysLMjlcmRmZvI0eCIiIi1Rmd/for0FVlRUhMuXLyMoKKjU8qCgIJw5c6bcbXbv3g0/Pz8sW7YMzs7OaNy4MebOnYv8/Hz1Oh07dsTly5dx4cIFAEBsbCz27t2L/v3719yTISIiIq0i2ltgaWlpUCqVcHR0LLXc0dERycnJ5W4TGxuLU6dOwcTEBKGhoUhLS8PkyZORnp6u/hzQ8OHDkZqaio4dO0IQBCgUCkyaNAnz589/6iyFhYUoLCxUf52VlVUNz5CIiIg0legfgv7v1RoFQXjqFRxVKhUkEgk2bdqEdu3aoV+/fli+fDk2bNigPgp07NgxfPrpp1i9ejWuXLmCnTt34s8//8THH3/81BmCg4Mhl8vVN/aAERER6TbRApCdnR0MDAzKHO1JSUkpc1ToCScnJzg7O0Mul6uX+fj4QBAEPHjwAADw/vvvY/To0XjzzTfRvHlzDBo0CJ999hmCg4OhUqnKvd8FCxYgMzNTfYuPj6+mZ0lERESaSLQAZGxsDF9fX4SFhZVaHhYWhoCAgHK3CQwMRGJiInJyctTLoqOjIZVK1a2veXl5kEpLPy0DAwMIgoCnfd5bJpOpe7/Y/0VERKT7RH0LbPbs2Vi7di1CQkJw69YtzJo1C3FxcZg4cSKAkiMzY8aMUa8/cuRI2NraYvz48YiIiMCJEycwb948TJgwAaampgCAAQMGYM2aNdiyZQvu3r2LsLAwvP/++3j55ZdhYGAgyvMkItJWOYWK569EpIVEvQ7QsGHD8OjRIyxZsgRJSUlo1qwZ9u7dCzc3NwBAUlIS4uLi1OtbWFggLCwM06ZNg5+fH2xtbTF06FB88skn6nUWLVoEiUSCRYsWISEhAfb29hgwYAA+/fTTWn9+RETabNn+SKw+dgdfD2+FV1o5iz0OUbUS9TpAmorXASIifXc0MgXjN1wEADhayXB0bleYGYv6f2ai59KK6wAREZFmSskqwNxt1wAAUgnwMKsQIafuijwVUfViACIiIjWVSsDs367hUW4RfJyssHRwCwDA98djkZZT+JytibQHAxAREan9cCIWp2LSYGpkgFUjWmNIGxc0d5Yjp1CBVYdviz0eUbVhACIiIgBAeNzf+OpgFADgw5eboKGDBaRSCRb08wYAbDofh7tpuWKOSFRtGICIiAhZBcWYviUcCpWA/i2cMNTvnyviB3jaoZuXPRQqAV8ciBRxSqLqwwBERKTnBEHAotCbiE/Ph3MdU3w2qHmZSqL5fX0glQB7byTjStzfIk1KVH0YgIiI9NyOKwnYfS0RBlIJvhnRCnJTozLreNW1xBDfkivuB++99dQr6xNpCwYgIiI9Fpuagw9+vwkAmNWzEXzdbJ667qxejWFiJMXFe3/jYMTD2hqRqEYwABER6alChRLTNocjr0gJ/wa2mNS14TPXd5Kb4o2OHgCAz/dFolhZfsE0kTZgACIi0lNf7I/CX4lZsDYzwophrWAglTx3m4ldPGFjbozYtFxsvRhfC1MS1QwGICIiPXQ0KgVrH1/d+YshLVFXblKh7SxNjDCjRyMAwMpD0SxLJa3FAEREpGdSsgsw97eSqotxAe7o2cSxUtuPaFcf7rZmSMspwk8nYmtiRKIaxwBERKRHVCoBcx5XXXjXtcT8vt6Vvg9jQyne6VOy3U8nY5GSVVDdYxLVOAYgIiI98tPJWJy8nQYTIym+HdkaJkYGVbqfvs3qopVrHeQVKbGSFRmkhRiAiIj0xNX4DHxx4HHVxYCmaOhgWeX7kkgkeK+fDwBg68V4xKRkV8uMRLWFAYiISA9kFxRj+ubHVRfNnTCsrevzN3qOdh426NXEEUqVgM/3R1XDlES1hwGIiEjHCYKARbtuIi49r6Tq4tWyVRdV9W4fbxhIJQiLeIgLd9Or5T6JagMDEBGRjtt5JQG/X3121UVVNXSwUB9N+pQVGaRFGICIiHRYbGoO3n9cdTGzx7OrLqpqZs9GMDM2wLX4DOy9kVzt909UExiAiIh0VJFChelbSqouOjSwweRuz666qCoHSxO81bkBAGDZgUgUKViRQZqPAYiISEd9cSASNxOyUMfMCCuHta5Q1UVV/a9TA9hZyHD/UR5+PX+/xh6HqLowABER6aBjUSn46WTlqy6qylxmiFm9SioyvjkSg6yC4hp9PKIXxQBERKRjUrILMHdbSdXFWH839Kpk1UVVDfNzRQN7c6TnFuGH43dq5TGJqooBiIhIhzypukjLKam6WPD4YoW1wdBAivmPKzLWnryLpMz8WntsospiACIi0iFrT/1TdbFqRNWrLqqqVxNHtHW3RqFChRVh0bX62ESVwQBERKQjrsVnYNnjKzIvHtAUjRyrXnVRVRKJRH3UadvlB4hMzqr1GYgqggGIiEgHZBcUY/qWkqqLfs3rYng1VF1UVZv61ujf3AmCACzdFynaHETPwgBERKQDPvj9L9x/VFJ1ETyoRbVVXVTVvN5eMJRKcCwqFadj0kSdhag8DEBERFpu55UHCA1PgFQCfD28FeRm1Vd1UVXuduZ4vYMbACB43y2oVKzIIM3CAEREpMXupuXi/V2Pqy56Noafe/VXXVTVtO4NYSEzxM2ELPxxPVHscYhKYQAiItJSRQoVpm8OR26REu09bDClhqouqsrWQoZJXT0BAMv2R6FQoRR5IqJ/MAAREWmpLw9G4UZCZknVxfBWNVp1UVUTAj3gaCVDQkY+fjnLigzSHAxARERa6Hh0Kn48EQsAWDa4BZzkpiJPVD5TYwPM6eUFAFh1JAaZeazIIM3AAEREpGVSswsx57erAIAx/m4IalpX3IGeY7CvCxo7WiAzvxirj8WIPQ4RAAYgIiKtolIJmLPtn6qL92qx6qKqDKQSLOhbMuf6M/fw4O88kSciYgAiItIq607dxYnoVNGqLqqqq5c9AjxtUaRQ4auDrMgg8TEAERFpiesPMrDsQMmVlT94SZyqi6qSSP45ChQanoCbCZkiT0T6jgGIiEgL5BQqMH1zOIqVAvo2q4sR7cSruqiq5i5yvNKqHoCSiyMKAi+OSOJhACIi0gIf7LqJe4/yUE9ugqWvil91UVVzg7xgbCDF6ZhHOHGbFRkkHgYgIiINt/PKA+x8UnUxorVGVF1UlauNGcb4P67I2HsLSlZkkEgYgIiINNi9f1VdzOjRGG01qOqiqqZ2bwgrE0NEJmcjNDxB7HFITzEAERFpqCKFCtO3lFRdtPOwwdTumlV1UVV1zIzVtR1fHYxCQTErMqj2MQAREWmorw5G4fqDkqqLrzW06qKqxga4w7mOKZIyC7D+9D2xxyE9xABERKSBTkSn4ofHVRefa3DVRVWZGBlgTlBjAMDqozFIzy0SeSLSNwxAREQaJjW7ELN/uwYAGN3BDb01vOqiqga2ckYTJytkFyqw6shtscchPcMARESkQVQqAXO3XUNaTiG8HC2xsL/mV11UlVQqUVd5bDx3H/cf5Yo8EekTBiAiIg0ScvoujkenQmYoxaqR2lN1UVUdG9mhc2N7FCsFfHEgSuxxSI8wABERaYgbDzLx+f7HVRcDmqCxFlVdvIj5fbwhkQB/Xk/C1fgMscchPcEARESkAXIKFZi2+QqKlQL6NK2Lke3qiz1SrWlSzwqvtnYBUHJxRFZkUG1gACIi0gAf/P6vqovBzbW26qKq5gQ1hrGhFOfvpuNIZIrY45AeYAAiIhJZaPgD7LxSUnWxcnhr1DEzFnukWlevjikmBHoAAJbui4RCqRJ5ItJ1ogeg1atXw8PDAyYmJvD19cXJkyefuX5hYSEWLlwINzc3yGQyeHp6IiQkpNQ6GRkZmDJlCpycnGBiYgIfHx/s3bu3Jp8GEVGV3H+Ui0WhJVUX03s0QjsP7a+6qKpJXT1hbWaE2yk52H75gdjjkI4zFPPBt27dipkzZ2L16tUIDAzEDz/8gL59+yIiIgL165f//vfQoUPx8OFDrFu3Dg0bNkRKSgoUCoX6+0VFRejVqxccHBywfft2uLi4ID4+HpaW+vFhQiLSHkUKFaZvflx14W6Dqd10o+qiquSmRpjWvRGW/BmB5WHReLlVPZgZi/prinSYRBDx02bt27dHmzZtsGbNGvUyHx8fDBw4EMHBwWXW379/P4YPH47Y2FjY2JT/v6Tvv/8eX3zxBSIjI2FkVLXG5KysLMjlcmRmZsLKyqpK90FE9DzB+27hh+OxkJsaYd+MTqhXR7eu9lwVRQoVei4/jrj0PMzu1RjTezQSeyTSIpX5/S3aW2BFRUW4fPkygoKCSi0PCgrCmTNnyt1m9+7d8PPzw7Jly+Ds7IzGjRtj7ty5yM/PL7WOv78/pkyZAkdHRzRr1gyfffYZlMqnl+0VFhYiKyur1I2IqCadiE7FD8f/qbpg+ClhbCjFvN5eAIAfjt9BanahyBORrhItAKWlpUGpVMLR0bHUckdHRyQnJ5e7TWxsLE6dOoWbN28iNDQUK1euxPbt2zFlypRS62zfvh1KpRJ79+7FokWL8NVXX+HTTz996izBwcGQy+Xqm6ura/U8SSKicqTl/FN18XqH+ujTTDerLqqqf3MntHSRI7dIiW8OsyKDaoboH4L+76megiA89fRPlUoFiUSCTZs2oV27dujXrx+WL1+ODRs2qI8CqVQqODg44Mcff4Svry+GDx+OhQsXlnqb7b8WLFiAzMxM9S0+Pr76niAR0b+oVALm/FZSddHY0QKL+jcReySNI5VKML9vSUXGrxficCc1R+SJSBeJFoDs7OxgYGBQ5mhPSkpKmaNCTzg5OcHZ2RlyuVy9zMfHB4Ig4MGDB+p1GjduDAMDg1LrJCcno6io/LZhmUwGKyurUjcioppQqupiRBudr7qoKn9PW/TwdoBSJeCL/azIoOonWgAyNjaGr68vwsLCSi0PCwtDQEBAudsEBgYiMTEROTn//G8gOjoaUqkULi4u6nViYmKgUqlKrePk5ARjY/27tgYRaY6bCf9UXbz/UhN41eXZqc/ybl9vSCXA/r+Scfl+utjjkI4R9S2w2bNnY+3atQgJCcGtW7cwa9YsxMXFYeLEiQBK3poaM2aMev2RI0fC1tYW48ePR0REBE6cOIF58+ZhwoQJMDUt+QDhpEmT8OjRI8yYMQPR0dHYs2cPPvvss1KfEyIiqm25hQpM2xyOYqWA3k0dMaq9/lRdVFVjR0sM9Sv5TOZneyNZkUHVStQLLAwbNgyPHj3CkiVLkJSUhGbNmmHv3r1wc3MDACQlJSEuLk69voWFBcLCwjBt2jT4+fnB1tYWQ4cOxSeffKJex9XVFQcPHsSsWbPQokULODs7Y8aMGXj33Xdr/fkRET3xwe9/4W5aLpzkJvh8cAu9q7qoqlm9GuP3q4m4fP9vHPjrIT8wTtVG1OsAaSpeB4iIqtOu8ATM3HoVUgmw+X8d0L6BrdgjaZXlB6PwzZEYeNiZ4+CszjAyEP38HdJQWnEdICIifXD/US4W7SqpupjWvRHDTxW81cUTtubGuJuWiy0X4p6/AVEFMAAREdWQJ1UXOYUKtHW3xrTu+l11UVUWMkPM7FlyReiVh24jp1DxnC2Ino8BiIiohiwPi8a1B5mQmxph5fDWMORbN1U2vF19eNiZ41FuEX48fkfscUgH8F8jEVENOHk7Fd8//kX9+eDmcGbVxQsxMpDi3T4lFRk/nbyLh1kFIk9E2o4BiIiomv276mJU+/ro08xJ5Il0Q++mddGmfh3kFyux8lC02OOQlmMAIiKqRiqVgLnbriE1u6Tq4v2XWHVRXSQSCd7rV1KRsfViPG4/zBZ5ItJmDEBERNVo/Zl7OBbFqoua4udug95NHaESoL6qNlFVMAAREVWTmwmZWLrvFgBgEasuasw7fbxhIJXg0K0UnIt9JPY4pKUYgIiIqkFuoQLTH1ddBDVxxOusuqgxnvYWGNmuZP8G770FlYrX86XKYwAiIqoGi3f/hdjHVRfLhrDqoqZN79EI5sYGuPYgE3tuJIk9DmkhBiAiohf0+9UEbL/8AFIJsGJYK9QxMxZ7JJ1nbynD2108AQDLDkSiUKEUeSLSNgxAREQvIO5RHhaGllRdTO3eCB1YdVFr3uzkAXtLGeLT87HpHCsyqHIYgIiIqqhYqcK0LSVVF35u1pjOqotaZWZsiNm9GgMAVh25jcz8YpEnIm3CAEREVEXLw6JxLT4DViaGWDm8FasuRPCarwsaOljg77xi9ZW3iSqC/1qJiKrg1O20f1VdtICLtZnIE+knQwMp5vfxBgCEnLqLxIx8kScibcEARERUSY9yCjHrt6sQBGBk+/ro25xVF2Lq4eOAdh42KFSosDyMFRlUMQxARESVIAj/VF00crDA+/1ZdSG2f1dk7LjyALeSskSeiLQBAxARUSWsP30PR6NSYWwoxaqRrWFqzKoLTdDKtQ5eauEEQQCC97Eig56PAYiIqIJKqi5Kfrm+398H3nWtRJ6I/m1eby8YGUhwIjoVJ2+nij0OaTgGICKiCnhSdVGkVKFXE0e83sFN7JHoP9xszdV/L8F7I1mRQc/EAEREVAEf/VFSdVHXygTLBrPqQlNN694IljJDRCRl4fdrCWKPQxqMAYiI6Dl2X0vEb5ceQCIBVg5vBWtzVl1oKhtzY0zqVlKR8eWBaBQUsyKDyscARET0DHGP8rBw5w0AwLRuDVl1oQUmBHrASW6ChIx8/Hz2ntjjkIZiACIieopipQrTt4Qju1ABXzdrTO/RSOyRqAJMjAzUFRnfHolBRl6RyBORJmIAIiJ6ihVh0bganwFLE0N8zaoLrfJqGxd417VEVoEC3x2NEXsc0kD810xEVI7TMWlYw6oLrWUglWDB44sj/t+Z+4hPzxN5ItI0DEBERP/xKKcQs7aWVF2MaFcf/Vh1oZU6N7JDx4Z2KFKq8OXBKLHHIQ3DAERE9C+CIGDe9utIyS5EQwcLfPASqy60lUQiwfy+JUWpv19NxI0HmSJPRJqEAYiI6F82nLmHI5EpJVUXI1h1oe2aOcsxqLUzAOCzvbcgCLw4IpVgACIieuyvxEwE7y2puljU3wc+Tqy60AVzghrD2ECKs7GPcCyaFRlUggGIiAhAXpEC0x5XXfT0ccRoVl3oDBdrM4wLdAcALN0bCSUrMggMQEREAICPdkcgNrWk6uKLIay60DVTujaE3NQIUQ+zsePKA7HHIQ3AAEREeu+Pa4nYeikeEgmwYhirLnSR3MwIU7s1BAAsPxiN/CJWZOg7BiAi0mvx6Xl473HVxdRuDeHvyaoLXTXa3w3OdUyRnFWAkNN3xR6HRMYARER6699VF23q18EMVl3oNBMjA7zTxwsAsObYHTzKKRR5IhITAxAR6a2Vh6IRHvek6qI1qy70wIAW9dDM2Qo5hQqsOsKKDH3Gf+1EpJfOxKRh9bGSqoulr7aAqw2rLvSBVCrBe31LKjI2nruPe2m5Ik9EYmEAIiK9k55bhJmPqy6Gt3VF/xasutAnAQ3t0NXLHgqVgC8OsCJDXzEAEZFeEQQB87ZdU1ddLB7QVOyRSATz+3pDIgH23EhCeNzfYo9DImAAIiK98n9n7uHw46qLb4az6kJfede1wpA2LgCA4L2RrMjQQwxARKQ3IhKz8NnjqouF/XzQpB6rLvTZ7KDGkBlKceFeOg7dShF7HKplDEBEpBdKqi6uPK66cMAYf1Zd6DsnuSne6OgBAFi67xYUSpXIE1FtYgAiIr2w5I8I3EnNhaOVDMuGtGTVBQEAJnb1hI25Me6k5uK3S6zI0CcMQESk8/68nogtF/+purBh1QU9ZmVihOndSyoyVhyKRm6hQuSJqLYwABGRTotPz8OCx1UXU7o2RICnncgTkaYZ2d4NbrZmSM0uxE8nY8Ueh2oJAxAR6Sx11UXB46qLnqy6oLKMDaV4p7c3AODHE7FIyS4QeSKqDQxARKSzvj50u6TqQlZSdWHEqgt6in7N66Klax3kFSnx9aHbYo9DtYA/DYhIJ525k4bvjpV0PX32anNWXdAzSSQSvNe35CjQlovxiEnJEXkiqmkMQESkc9JzizDrcdXFMD9XDGhZT+yRSAu0b2CLnj6OUKoELNsfKfY4VMMYgIhIpwiCgHe2X8PDrEJ42ptj8ctNxB6JtMj8vl6QSoCDEQ9x8V662ONQDRI9AK1evRoeHh4wMTGBr68vTp48+cz1CwsLsXDhQri5uUEmk8HT0xMhISHlrrtlyxZIJBIMHDiwBiYnIk3089n7OHQrBcYGUqwa0QZmxoZij0RapKGDJYa1rQ8A+GzvLVZk6DBRA9DWrVsxc+ZMLFy4EOHh4ejUqRP69u2LuLi4p24zdOhQHD58GOvWrUNUVBQ2b94Mb2/vMuvdv38fc+fORadOnWryKRCRBolIzMKne28BAN7r582qC6qSWT0bwczYAOFxGdh/M1nscaiGSAQR42379u3Rpk0brFmzRr3Mx8cHAwcORHBwcJn19+/fj+HDhyM2NhY2NjZPvV+lUokuXbpg/PjxOHnyJDIyMrBr164Kz5WVlQW5XI7MzExYWfEHKJE2yCtSYMCqU7iTmose3g5YO9aPV3umKlsRFo2vD9+Gu60ZwmZ34RmEWqIyv79F+xstKirC5cuXERQUVGp5UFAQzpw5U+42u3fvhp+fH5YtWwZnZ2c0btwYc+fORX5+fqn1lixZAnt7e7zxxhsVmqWwsBBZWVmlbkSkXT7+s6TqwsFShi9eY9UFvZj/dW4AOwsZ7j3Kw6/nn/6uBGkv0QJQWloalEolHB0dSy13dHREcnL5hxxjY2Nx6tQp3Lx5E6GhoVi5ciW2b9+OKVOmqNc5ffo01q1bh59++qnCswQHB0Mul6tvrq6uVXtSRCSKPdeTsPlCSdXFSlZdUDWwkBli5uMLZ359+DayC4pFnoiqm+jH9P77vzRBEJ76PzeVSgWJRIJNmzahXbt26NevH5YvX44NGzYgPz8f2dnZeP311/HTTz/Bzq7il7tfsGABMjMz1bf4+PgXek5EVHvi0/Mwf+d1AMDkrp4IaMiqC6oew9q6ooG9OdJzi/DDcVZk6BrRTo+ws7ODgYFBmaM9KSkpZY4KPeHk5ARnZ2fI5XL1Mh8fHwiCgAcPHiA3Nxf37t3DgAED1N9XqVQAAENDQ0RFRcHT07PM/cpkMshksup4WkRUixRKFWY8rrpoXb8OZvZsLPZIpEOMDKR4t4833v7lMtaeisXrHdxQV24i9lhUTUQ7AmRsbAxfX1+EhYWVWh4WFoaAgIBytwkMDERiYiJycv65Qmd0dDSkUilcXFzg7e2NGzdu4OrVq+rbyy+/jG7duuHq1at8a4tIx3x9+DauPK66+IZVF1QDgpo4ws/NGgXFKqwIixZ7HKpGov60mD17NtauXYuQkBDcunULs2bNQlxcHCZOnAig5K2pMWPGqNcfOXIkbG1tMX78eERERODEiROYN28eJkyYAFNTU5iYmKBZs2albnXq1IGlpSWaNWsGY2N+LoBIV5y98wjfHmXVBdUsiUSCBf18AADbLscjKjlb5ImouogagIYNG4aVK1diyZIlaNWqFU6cOIG9e/fCzc0NAJCUlFTqmkAWFhYICwtDRkYG/Pz8MGrUKAwYMADffPONWE+BiESQnluEmVvDIQjAUD8XVl1QjfJ1s0bfZnWhEoDPWZGhM0S9DpCm4nWAiDSXIAj438+XcejWQzSwN8ef0zryas9U4+6m5aLX8uNQqAT8+r/2CPDkh+01kVZcB4iIqCp+OXcfh249fFx10Zrhh2qFh505RrUvqchYui8SKhWPHWg7BiAi0hq3krLwyZ6SqosF/bzRtJ78OVsQVZ9pPRrBQmaI6w8y8cf1RLHHoRfEAEREWiG/SIlpm8NRpFChu7cDxgW4iz0S6Rk7CxkmdmkAAPjiQBQKFUqRJ6IXwQBERFphyZ8RiEnJKam6GNKCVRckijc6NoCjlQwP/s7HL2fviz0OvQAGICLSeHtvJGHzhThIJMCKYa1ga8ELl5I4TI0NMLtXyQU3Vx2JQWYeKzK0FQMQEWm0B3/nYf6OkqqLSV08EciqCxLZ4DYuaOxogcz8Yqw+HiP2OFRFDEBEpLFKqi6uIqtAgVaudTCrF6suSHyGBlLM7+sNAFh/+h4SMvJFnoiqggGIiDTWN4dv4/L9v2EpM8SqEay6IM3RzcsBHRrYoEihwlcHo8Qeh6qAP02ISCOdvfMIqx5XXXwyqBmrLkijSCQSvPe4IiM0PAF/JWaKPBFVFgMQEWmcv3OLMGvrVQgC8JqvC15p5Sz2SERltHCpg5db1oMglFwckbQLAxARaRRBEPDOjutIzipAA3tzfPhyU7FHInqqeb29YGQgwcnbaTgRnSr2OFQJDEBEpFE2nruPsIiSqotvhreGuYxVF6S5XG3MMMbfHQAQvC8SSlZkaA0GICLSGJHJWfj4cdXF/L7eaObMqgvSfFO7NYSliSFuJWVhV3iC2ONQBTEAEZFGyC9SYtqv/1RdjA90F3skogqxNjfGlG4NAQBfHYxCQTErMrQBAxARaYSP90TgdkoO7Fl1QVpoXIA76slNkJhZgA1n7ok9DlUAAxARiW7fjST8er6k6mIlqy5IC5kYGWBOkBcA4LujMfg7t0jkieh5GICISFQJGfl493HVxURWXZAWG9jaGT5OVsguUODbo6zI0HQMQEQkGoVShRmbw5FVoEBL1zrqkkkibWQgleC9fiUVGT+fvYf49DyRJ6JnYQAiItF8cyQGl+7/DQuZIVYNZ9UFab9OjezRqZEdipUCvjjAigxNxp82RCSKc7GP8O2R2wCATwc1Q31bVl2Qbpjf1xsSCbD7WiKuP8gQexx6CgYgIqp1T6ouVAIwhFUXpGOa1pNjUOuS1/Sne25BEHhxRE3EAEREtUoQBLy74zqSMgvgYWeOj1h1QTpoTpAXjA2lOH83HUejUsQeh8rBAEREtWrj+TgcjHgIIwMJVo1g1QXpJuc6puqLeQbvjYRCqRJ3ICqDAYiIak1kchY+/jMCADC/rw+rLkinTe7aEHXMjHA7JQc7rjwQexz6DwYgIqoV+UVKTN9cUnXRzcseE1h1QTpObmqEqY8rMpaHRSOvSCHyRPRvDEBEVCs+2ROB6IePqy5ea8mqC9ILo/3d4GpjiodZhQg5dVfscehfGICIqMbtv5mETY+rLlYMbQU7Vl2QnpAZGmBe75KLI35/PBZpOYUiT0RPMAARUY1KyMjHO9tLqi7e7uyJjo1YdUH65aXmTmjhIkdOoQKrDt8Wexx6jAGIiGqMQqnCzC3/VF3MCWLVBekfqVSC+X1LjgJtOh+H2NQckScigAGIiGrQqiMxuHivpOrim+GtWHVBeivA0w7dvR2gULEiQ1PwpxER1YjzsY+w6l9VF2625iJPRCSud/t4QyoB9t1MxuX7f4s9jt5jACKiapeRV4SZj6suBrdh1QURAHjVtcRrvq4AgOC9rMgQGwMQEVWrMlUXr7DqguiJWb0aw8RIikv3/8bBiIdij6PXGICIqFptOh+HA3+VVF18M7w1LFh1QaRWV26CNzs2AAB8vi8SxazIEE2lA9D69euxbdu2Msu3bduG//u//6uWoYhIO0UlZ6urLt7t443mLqy6IPqvt7s0gK25MWLTcrH1YrzY4+itSgegpUuXws6u7HU8HBwc8Nlnn1XLUESkfQqKlZi2+QoKFSp09bLHhEAPsUci0kiWJkaY0bMRAGDloWjkFLIiQwyVDkD379+Hh0fZH2xubm6Ii4urlqGISPs8qbqws5Dhy9daQipl1QXR04xoVx8eduZIyynCTydixR5HL1U6ADk4OOD69etlll+7dg22trbVMhQRaZf9N5Ox8VzJf4BWDGvJqgui5zAykOKd3l4AgB9PxCIlq0DkifRPpQPQ8OHDMX36dBw9ehRKpRJKpRJHjhzBjBkzMHz48JqYkYg0WGJGPt7d8bjqoksDdGpkL/JERNqhT7O6aF2/DvKLlVhxiBUZta3SAeiTTz5B+/bt0aNHD5iamsLU1BRBQUHo3r07PwNEpGeUKgEzt1xFZn4xWrrIMaeXl9gjEWkNiUSC9/r5AAC2XoxDTEq2yBPpF4lQxSsx3b59G1evXoWpqSmaN28ONze36p5NNFlZWZDL5cjMzISVlZXY4xBprJWHorHy0G1YyAyxZ3pHXu2ZqAre+vkSDkY8RE8fR6wd6yf2OFqtMr+/q3yBjkaNGqFRo0ZV3ZyItNyFu+n45nGz9ScDWXVBVFXv9PHG4cgUHLr1EOdjH6F9A36etjZU+i2wIUOGYOnSpWWWf/HFF3jttdeqZSgi0mwZeUWYuSUcKgF4tY0zBrZm1QVRVTV0sMDwtiUVGZ/ti2RFRi2pdAA6fvw4+vfvX2Z5nz59cOLEiWoZiog0lyAImL/jBhIzC+Bua4YlrzQTeyQirTezZ2OYGRvgWnwG9t5IFnscvVDpAJSTkwNjY+Myy42MjJCVlVUtQxGR5vr1Qhz2/5UMIwMJVo1ow6oLompgbynD2509AQDLDkSiSMGKjJpW6QDUrFkzbN26tczyLVu2oEmTJtUyFBFppuiH2VjyR0nVxTu9WXVBVJ3e7OQBe0sZ7j/Kw6/n74s9js6r9H/d3n//fQwePBh37txB9+7dAQCHDx/Gr7/+iu3bt1f7gESkGQqKlZj2azgKFSp0aWyPNzqy6oKoOpnLDDGrZ2O8F3oDXx++jVd9XWBlYiT2WDqr0keAXn75ZezatQsxMTGYPHky5syZg4SEBBw5cgTu7u41MCIRaYJP99xC1MNsVl0Q1aChfi7wtDfH33nF+P7YHbHH0WmVDkAA0L9/f5w+fRq5ubmIiYnBq6++ipkzZ8LX17e65yMiDXDgr2T8cq7kkPzyoS1hb8mqC6KaYGggxfy+JRdHXHfqLpIy80WeSHdVKQABwJEjR/D666+jXr16+Pbbb9GvXz9cunSpOmcjIg2QmJGPd7Y/rrro3ACdG7Pqgqgm9fRxQDt3GxQqVFh+MFrscXRWpQLQgwcP8Mknn6BBgwYYMWIErK2tUVxcjB07duCTTz5B69atKz3A6tWr4eHhARMTE/j6+uLkyZPPXL+wsBALFy6Em5sbZDIZPD09ERISov7+Tz/9hE6dOsHa2hrW1tbo2bMnLly4UOm5iOhx1cXWkqqLFi5yzAli1QVRTZNIJFjQzxsAsP3KA0Qm8wzrmlDhANSvXz80adIEERERWLVqFRITE7Fq1aoXevCtW7di5syZWLhwIcLDw9GpUyf07dsXcXFxT91m6NChOHz4MNatW4eoqChs3rwZ3t7e6u8fO3YMI0aMwNGjR3H27FnUr18fQUFBSEhIeKFZifTRt0dicOFuOsyNDfDN8NYwNqzyQWMiqoTW9a3Rv7kTBAFYui9S7HF0UoW7wAwNDTF9+nRMmjSpVAWGkZERrl27VqVT4Nu3b482bdpgzZo16mU+Pj4YOHAggoODy6y/f/9+DB8+HLGxsbCxsanQYyiVSlhbW+Pbb7/FmDFjKrQNu8CIgIv30jHsh7NQCcCKYS0xqLWL2CMR6ZX7j3LRc/lxFCsFbHqzPQIb2ok9ksarzO/vCv937uTJk8jOzoafnx/at2+Pb7/9FqmpqVUesqioCJcvX0ZQUFCp5UFBQThz5ky52+zevRt+fn5YtmwZnJ2d0bhxY8ydOxf5+U//kFheXh6Ki4ufGZgKCwuRlZVV6kakzzLzijFj8+Oqi9bODD9EInCzNceo9iVF48H7bkGlYkVGdapwAPL398dPP/2EpKQkvP3229iyZQucnZ2hUqkQFhaG7OzsSj1wWloalEolHB0dSy13dHREcnL5lwGPjY3FqVOncPPmTYSGhmLlypXYvn07pkyZ8tTHmT9/PpydndGzZ8+nrhMcHAy5XK6+ubq6Vuq5EOkSQRAwf+f1f6ouBrLqgkgs07o3hKXMEDcTsvDH9USxx9EplX5D38zMDBMmTMCpU6dw48YNzJkzB0uXLoWDgwNefvnlSg8gkZS+loggCGWWPaFSqSCRSLBp0ya0a9cO/fr1w/Lly7Fhw4ZyjwItW7YMmzdvxs6dO2FiYvLUGRYsWIDMzEz1LT4+vtLPg0hXbL4Qj303k2EoleCbEa1ZdUEkIlsLGSZ2fVyRsT8KBcVKkSfSHS/0iUYvLy8sW7YMDx48wObNmyu1rZ2dHQwMDMoc7UlJSSlzVOgJJycnODs7Qy7/5/L7Pj4+EAQBDx48KLXul19+ic8++wwHDx5EixYtnjmLTCaDlZVVqRuRPop+mI2P/vgLAPBOHy+0cKkj7kBEhAmBHqhrZYKEjHz8cpYVGdWlWk7pMDAwwMCBA7F79+4Kb2NsbAxfX1+EhYWVWh4WFoaAgIBytwkMDERiYiJycnLUy6KjoyGVSuHi8s9nFL744gt8/PHH2L9/P/z8/Cr5bIj0U0GxEtM3l1RddG5sjzc7NhB7JCICYGpsgNlBjQEAq47cRkZekcgT6QZRz2mdPXs21q5di5CQENy6dQuzZs1CXFwcJk6cCKDkral/n7k1cuRI2NraYvz48YiIiMCJEycwb948TJgwAaampgBK3vZatGgRQkJC4O7ujuTkZCQnJ5cKTURU1md7byEyORt2Fsb4ilUXRBplcBsXeDlaIqtAgdWsyKgWogagYcOGYeXKlViyZAlatWqFEydOYO/evXBzK/nUe1JSUqlrAllYWCAsLAwZGRnw8/PDqFGjMGDAAHzzzTfqdVavXo2ioiIMGTIETk5O6tuXX35Z68+PSFsc/CsZPz8+tP7V0FasuiDSMAZSCeY/vjjihtP3EJ+eJ/JE2q/C1wHSJ7wOEOmTpMx89P36JDLyivFW5wZ4r5+P2CMRUTkEQcDr687jdMwjDGrtjBXDWok9ksapkesAEZHuUaoEzNxyFRl5xWjuLMdcVl0QaSyJRIIFj4tSQ8MTcDMhU+SJtBsDEJEeW300BuefVF2MYNUFkaZr5izHwFb1AJRcHJFv4lQdf9oR6alL99Kx8vBtAMDHA5vBw85c5ImIqCLmBHnB2ECK0zGPcOJ2mtjjaC0GICI9lJlXjBlbrkKpEjCotTNebcOqCyJt4WpjhrEBjysy9t6CkhUZVcIARKRnnlRdJGTkw83WDEteaSr2SERUSVO6NYSViSEik7Ox88qD529AZTAAEemZLRf/VXUxvDUsTYzEHomIKqmOmTGmdm8IAPjqYDQrMqqAAYhIj9z+V9XFvN5eaOlaR9yBiKjKxvi7w7mOKZKzChBy+q7Y42gdBiAiPVFQrMS0zeEoKFahUyM7/K8Tqy6ItJmJkQHm9i6pyFhz9A7Sc1mRURkMQER6IvjfVRdDWXVBpAteaemMpvWskF2owKojt8UeR6swABHpgbCIh/i/x1UXX77WEg6WJiJPRETVQSqVqK/evvHcfdx/lCvyRNqDAYhIxyVnFmDe9msAgP918kBXLweRJyKi6hTY0A5dGtujWCngiwNRYo+jNRiAiHSYUiVg5tZwddXFvN7eYo9ERDVgfl9vSCTAn9eTcDU+Q+xxtAIDEJEOW3MsBudi02HGqgsinebjZIXBjy9o+tleVmRUBH8aEumoy/fTseLQ46qLV1h1QaTrZvdqDJmhFBfupuPwrRSxx9F4DEBEOigzvxjTN5dUXQxsVQ+vtnEWeyQiqmH16phiQkcPAMDS/ZFQKFUiT6TZGICIdIwgCHhv5w0kZOSjvo0ZPh7YDBIJT3kn0geTunrC2swIMSk52HaZFRnPwgBEpGO2XozHnhtJJVUXI1h1QaRPrEyMMK17IwDA8rBo5BUpRJ5IczEAEemQmJRsfPi46mJuby+0YtUFkd55vYMb6tuYITW7EGtPsiLjaRiAiHREQbESU3/9p+riLVZdEOklY0Mp3unjBQD44fgdpGYXijyRZmIAItIRS/dFIjI5G7bmrLog0nf9mzuhpYscuUVKfHOYFRnlYQAi0gGHIh5iw5l7AIAvh7LqgkjfSSQSLHhckfHrhTjcSc0ReSLNwwBEpOUORTzE9C3hAIA3O3qgG6suiAhAhwa26OnjAKVKwLL9kWKPo3EYgIi02PrTd/HWL5eQV6REp0Z2mPf4fX8iIgB4t483pBLgwF8PceleutjjaBQGICItpFQJ+HD3X/jojwioBGBEO1eEjGsLmaGB2KMRkQZp5GiJYW1dAbAi478YgIi0TG6hAm/9fEn9mZ8Ffb3x2aDmMDLgP2ciKmtWz8YwNTLAlbgMHPgrWexxNAZ/YhJpkYdZBRj6w1kcjkyBzFCK1aPa4O0unrzSMxE9lYOVCf7XueSyGJ/vj0IxKzIAMAARaY2IxCwM/O40/krMgq25MTa/1QH9mjuJPRYRaYG3OjeAnYUx7qblYsuFOLHH0QgMQERa4GhUCl77/gySMgvgaW+OXVMC0aa+tdhjEZGWsJAZYkbPxgCAlYduI6eQFRkMQEQa7pdz9/Hm/11CbpESAZ622DkpEK42ZmKPRURaZnhbVzSwM8ej3CL8ePyO2OOIjgGISEMpVQI++TMC7++6CaVKwBBfF2wY3w5yM5abElHlGRlI8U4fbwDATyfv4mFWgcgTiYsBiEgD5RUpMGnjZaw9VVJkOK+3F74Y0gLGhvwnS0RV17upI3zdrJFfrMSKsGixxxEVf5oSaZiU7AIM//EcDkY8hLGhFN+MaI0p3RryTC8iemESiQTv9Ss5CvTbpXhEP8wWeSLxMAARaZCo5GwM+u4Mrj/IhLWZEX59sz1ebllP7LGISIf4utmgT9O6UAnA5/v0tyKDAYhIQ5y8nYoha84gISMfDezMETo5EH7uNmKPRUQ66J0+XjCUSnA4MgVn7zwSexxRMAARaYDNF+Iwbv1FZBcq0M7DBjsmBcDdzlzssYhIRzWwt8DI9vUBAMH7bkGl0r+KDAYgIhGpVAKW7ovEgp03oFQJGNTaGb+80Q7W5sZij0ZEOm56j0YwNzbA9QeZ2HMjSexxah0DEJFICoqVmLY5HN8/vh7HzJ6NsHxoSxaaElGtsLOQYWIXTwDAsgORKFQoRZ6odjEAEYkgLacQI346hz03kmBkIMGKYS0xs2djnulFRLXqjU4ecLCUIT49H5vO6VdFBgMQUS2LScnGoNWnER6XAbmpEX55oz0GtXYReywi0kNmxoaY3aukImPVkdvIzC8WeaLawwBEVIvO3EnDq6vPID49H262Ztg5OQAdGtiKPRYR6bEhvi5o5GCBv/OKseaY/lRkMAAR1ZJtl+IxZt0FZBUo4OdmjdDJgfC0txB7LCLSc4YGUszvW3JxxJDTd5GQkS/yRLWDAYiohgmCgK8ORmHe9utQqAQMaFkPG99sDxue6UVEGqK7twPae9igSKHC8oP6UZHBAERUgwqKlZix5SpWHYkBAEzt1hBfD2sFEyOe6UVEmqOkIsMHALAz/AEiErNEnqjmMQAR1ZD03CK8vvY8dl9LhKFUgmVDWmBuby9IpTzTi4g0T0vXOhjQsh4EAVi6X/crMhiAiGpAbGoOXl19Gpfu/w1LE0P8PKEdhvq5ij0WEdEzzQvygpGBBCeiU3HydqrY49QoBiCianY+9hFeXXMG9x7lwcXaFKGTAxDQ0E7ssYiInqu+rRlGd3AHAATvjdTpigwGIKJqFBr+AK+vO4+MvGK0cq2D0MmBaOhgKfZYREQVNq17Q1iaGCIiKQu/X0sQe5wawwBEVA0EQcDKQ9GYtfUaipUC+jWviy1vdYC9pUzs0YiIKsXa3BiTuzYEAHx5IBoFxbpZkcEARPSCChVKzPntGlYeug0AmNjFE9+OaMMzvYhIa40PdIeT3AQJGfn4vzP3xB6nRjAAEb2AjLwijFl3ATvDE2AglSD41eaY39ebZ3oRkVYzMTLAnCAvAMC3R2Pwd26RyBNVP9ED0OrVq+Hh4QETExP4+vri5MmTz1y/sLAQCxcuhJubG2QyGTw9PRESElJqnR07dqBJkyaQyWRo0qQJQkNDa/IpkJ66/ygXr64+g/N302EhM8T6cW0xol19scciIqoWg1o7w7uuJbILFPjuaIzY41Q7UQPQ1q1bMXPmTCxcuBDh4eHo1KkT+vbti7i4pzfSDh06FIcPH8a6desQFRWFzZs3w9vbW/39s2fPYtiwYRg9ejSuXbuG0aNHY+jQoTh//nxtPCXSE5fvp2PQ6jOITcuFcx1T7JgUgM6N7cUei4io2hhIJVjw+OKIP5+9j/j0PJEnql4SQRBEO8etffv2aNOmDdasWaNe5uPjg4EDByI4OLjM+vv378fw4cMRGxsLGxubcu9z2LBhyMrKwr59+9TL+vTpA2tra2zevLlCc2VlZUEulyMzMxNWVlaVfFak6/64log5266hSKFCCxc51o7xg4OVidhjERHViNHrzuPk7TS80qoevh7eWuxxnqkyv79FOwJUVFSEy5cvIygoqNTyoKAgnDlzptxtdu/eDT8/PyxbtgzOzs5o3Lgx5s6di/z8f4rbzp49W+Y+e/fu/dT7JKooQRDw3dEYTNscjiKFCr2aOGLLWx0YfohIp73bxxsSCfD71UTceJAp9jjVxlCsB05LS4NSqYSjo2Op5Y6OjkhOTi53m9jYWJw6dQomJiYIDQ1FWloaJk+ejPT0dPXngJKTkyt1n0DJ54oKCwvVX2dl6X4HClVOsVKFhaE38NulBwCANzt6YEE/Hxjww85EpOOaOcsxqJUzdoYn4LO9t/Dr/9pDItH+n32ifwj6vztREISn7liVSgWJRIJNmzahXbt26NevH5YvX44NGzaUOgpUmfsEgODgYMjlcvXN1ZWVBfSPzPxijFt/Ab9degCpBPj4laZY9FIThh8i0huzgxrD2FCKs7GPcCxaNyoyRAtAdnZ2MDAwKHNkJiUlpcwRnCecnJzg7OwMuVyuXubj4wNBEPDgQcn/zOvWrVup+wSABQsWIDMzU32Lj4+v6tMiHROfnofBa87gdMwjmBsbYN3Ythjt7y72WEREtcrF2gzjA9wBAEv3RkKpAxUZogUgY2Nj+Pr6IiwsrNTysLAwBAQElLtNYGAgEhMTkZOTo14WHR0NqVQKFxcXAIC/v3+Z+zx48OBT7xMAZDIZrKysSt2IwuP+xqDVpxGTkoO6Vib4baI/unk7iD0WEZEoJndtCLmpEaIeZmPH5Qdij/PCRH0LbPbs2Vi7di1CQkJw69YtzJo1C3FxcZg4cSKAkiMzY8aMUa8/cuRI2NraYvz48YiIiMCJEycwb948TJgwAaampgCAGTNm4ODBg/j8888RGRmJzz//HIcOHcLMmTPFeIqkpfbdSMLwH88hLacITZyssGtKIJrWkz9/QyIiHSU3M8K07iUVGV+FRSG/SLsrMkQNQMOGDcPKlSuxZMkStGrVCidOnMDevXvh5uYGAEhKSip1TSALCwuEhYUhIyMDfn5+GDVqFAYMGIBvvvlGvU5AQAC2bNmC9evXo0WLFtiwYQO2bt2K9u3b1/rzI+0jCAJ+OH4Hk3+9gkKFCt29HbBtoj/qynmmFxHRaH83uFib4mFWIUJO3xV7nBci6nWANBWvA6SfipUqfPD7X9h8oSR0j/V3wwcDmvLDzkRE//L71QTM2HIVFjJDHJ/XFbYWmlP6rBXXASLSJFkFxZiw4SI2X4iDRAIsHtAEH73SjOGHiOg/BrSoh+bOcuQUKrDqiPZWZDAAkd5LyMjHa2vO4uTtNJgaGeDH0X4YH+gh9lhERBpJKpVgQb+SCqqN5+7jXlquyBNVDQMQ6bUbDzIx8LvTiHqYDQdLGX572x+9mjz9kglERAQEeNqhm5c9FCoBXxyIEnucKmEAIr118K9kDP3hLFKzC+Fd1xK7pgSiuQvP9CIiqoj5fX0glQB7biQhPO5vscepNAYg0juCIGDdqbt4e+Nl5Bcr0bmxPbZN9Ee9OqZij0ZEpDW86lpiiG/JNfiC90ZC286pYgAivaJQqrB491/4+M8ICAIwsn19hIz1g6WJkdijERFpnVm9GsPESIoL99IRFvFQ7HEqhQGI9EZOoQL/+/kSfj57HxIJsLCfDz4d2AyGBvxnQERUFU5yU7zRseSkkaX7I6FQqkSeqOL4k5/0QlJmPl77/iyORqXCxEiKNaPa4H+dG+hEozERkZje7uIJG3NjxKbmYusl7enSZAAinXczoeRMr1tJWbCzMMaWt/zRp5mT2GMREekEKxMjzOjRCACwIuw2cgsVIk9UMQxApNOORD7E0B/O4mFWIRo5WCB0ciBaudYReywiIp0yol19uNuaIS2nED+djBV7nAphACKd9fPZe3jz/y4hr0iJjg3tsH1SAFxtzMQei4hI5xgbSvFOn5KLI/54IhYp2QUiT/R8DECkc5QqAUv+iMAHv/8FlQAM83PF+vFtITflmV5ERDWlb7O6aOVaB3lFSnx96LbY4zwXAxDplLwiBd7+5bK6pfidPl5YOrg5jHimFxFRjZJIJHivnw8AYMvFeMSk5Ig80bPxtwLpjJSsAgz74RwO3XoIY0Mpvh3ZGpO7NuSZXkREtaSdhw16NXGEUiVg2f5Iscd5JgYg0gmRyVkY+N1p3EjIhI25MTb/rwNealFP7LGIiPTOu328YSCV4GDEQ1y4my72OE/FAERa73h0KoasOYvEzAI0sDfHrsmB8HWzFnssIiK91NDBAsPaugIAPtt7S2MrMhiASKttOn8fEzZcRE6hAh0a2CB0UiDq2/JMLyIiMc3s2Qhmxga4Gp+BfTeTxR6nXAxApJVUKgHBe29hYehNKFUCBrdxwc8T2kNuxjO9iIjE5mBpgrc6NwAALNsfiSKF5lVkMACR1skvUmLKr1fww4mSi23N6dUYX77WAsaGfDkTEWmK/3VqADsLGe49ysPmC3Fij1MGf2OQVknNLsTwn85h381kGBtI8fXwVpjWoxHP9CIi0jDmMkPM6lVSkfH14dvILigWeaLSGIBIa9x+mI2B353GtfgM1DEzwsY32+OVVs5ij0VERE8xzM8VDezNkZ5bhB+Oa1ZFBgMQaYXTMWl4dc0ZJGTkw93WDKGTA9HOw0bssYiI6BkMDaSY/7giY+2pWCRnak5FBgMQabzfLsZjbMgFZBco0NbdGqGTA+FhZy72WEREVAG9mjiirbs1CopVWBEWLfY4agxApLFUj68k+s6O61CoBLzSqh42vtke1ubGYo9GREQVJJFIsOBxRca2y/GISs4WeaISDECkkQqKlZi+JRyrj90BAEzv0Qgrh7WCzNBA5MmIiKiy2tS3Rr/mdaESgKX7bok9DgAGINJAj3IKMWrtefx5PQlGBhJ89VpLzO7VmGd6ERFpsXm9vWEoleBoVCrOxKSJPQ4DEGmWO6k5GLT6DC7f/xtWJob4eUJ7DPZ1EXssIiJ6QR525ni9gxsAIHhfJFQqcSsyGIBIY5y98wivrj6DuPQ81Lcxw87JgfD3tBV7LCIiqibTujeEhcwQNxIy8cf1RFFnYQAijbDj8gOMCTmPzPxitKlfB6GTA9DQwULssYiIqBrZWsgwqasnAOCLA1EoVChFm8VQtEcmAiAIAlYcuo1vDt8GAPRv4YSvXmsJEyN+2JmISBdNCPTAmTtpGBfgAWMD8Y7DMACRaAoVSry7/Tp2XS05DDq5qyfmBnlBKuWHnYmIdJWpsQE2vdlB7DEYgEgcf+cW4e1fLuPCvXQYSiX4dFAzDGtbX+yxiIhITzAAUa27l5aL8Rsu4m5aLixlhljzui86NrITeywiItIjDEBUqy7eS8dbP1/C33nFcK5jivXj26Kxo6XYYxERkZ5hAKJa8/vVBMzbdh1FShVautbB2jF+sLeUiT0WERHpIQYgqnGCIODbIzH46nEJXp+mdbFiWCuYGvNMLyIiEgcDENWoIoUK74XewPbLDwAAb3VugPl9vHmmFxERiYoBiGpMZl4xJm68jLOxj2AgleCjl5uqL4NOREQkJgYgqhFxj/IwfsMF3EnNhYXMEN+ObI2uXg5ij0VERASAAYhqwJW4v/G//7uER7lFcJKbIGRcW/g4WYk9FhERkRoDEFWrPdeTMPu3qyhUqNDM2QrrxraFo5WJ2GMRERGVwgBE1UIQBHx/PBaf748EAPT0ccQ3I1rBzJgvMSIi0jz87UQvrFipwvu7bmLLxXgAwPhAdyzq3wQGPNOLiIg0FAMQvZCsgmJM3ngFp2LSIJUAH7zUBOMCPcQei4iI6JkYgKjKHvydhwkbLiL6YQ7MjA2wakRr9PBxFHssIiKi52IAoiq5Fp+BN/7vEtJyCuFoJcO6sW3RzFku9lhEREQVwgBElbb/ZjJmbg1HQbEKPk5WCBnnBye5qdhjERERVRgDEFWYIAhYe/IuPtt3C4IAdPOyx6qRbWAh48uIiIi0C39zUYUolCp8+Mdf2HguDgAwuoMbFg9oAkMDqciTERERVR4DED1XdkExpv4ajuPRqZBIgEX9m2BCoDskEp7mTkRE2okBiJ4pMSMfEzZcRGRyNkyMpPh6eGv0blpX7LGIiIheiOjvX6xevRoeHh4wMTGBr68vTp48+dR1jx07BolEUuYWGRlZar2VK1fCy8sLpqamcHV1xaxZs1BQUFDTT0Xn3EzIxMDvTiMyORv2ljL89rY/ww8REekEUY8Abd26FTNnzsTq1asRGBiIH374AX379kVERATq16//1O2ioqJgZfVPuaa9vb36z5s2bcL8+fMREhKCgIAAREdHY9y4cQCAFStW1Nhz0TWHIh5i+pZw5BUp4eVoiXXj/OBibSb2WERERNVC1AC0fPlyvPHGG3jzzTcBlBy5OXDgANasWYPg4OCnbufg4IA6deqU+72zZ88iMDAQI0eOBAC4u7tjxIgRuHDhQrXPr6vWn76Lj/+MgEoAOjWyw3ej2sDKxEjssYiIiKqNaG+BFRUV4fLlywgKCiq1PCgoCGfOnHnmtq1bt4aTkxN69OiBo0ePlvpex44dcfnyZXXgiY2Nxd69e9G/f/+n3l9hYSGysrJK3fSRUiXgw91/4aM/SsLPiHauCBnXluGHiIh0jmhHgNLS0qBUKuHoWLo6wdHREcnJyeVu4+TkhB9//BG+vr4oLCzEL7/8gh49euDYsWPo3LkzAGD48OFITU1Fx44dIQgCFAoFJk2ahPnz5z91luDgYHz00UfV9+S0UG6hAjO2hOPQrRQAwIK+3nircwOe6UVERDpJ9LPA/vsLVhCEp/7S9fLygpeXl/prf39/xMfH48svv1QHoGPHjuHTTz/F6tWr0b59e8TExGDGjBlwcnLC+++/X+79LliwALNnz1Z/nZWVBVdX1xd9alrjYVYBJmy4iL8SsyAzlGLFsFbo19xJ7LGIiIhqjGgByM7ODgYGBmWO9qSkpJQ5KvQsHTp0wMaNG9Vfv//++xg9erT6c0XNmzdHbm4u3nrrLSxcuBBSadl3/WQyGWQyWRWfiXaLSMzCG/93EUmZBbCzMMZPY/zQur612GMRERHVKNE+A2RsbAxfX1+EhYWVWh4WFoaAgIAK3094eDicnP45WpGXl1cm5BgYGEAQBAiC8GJD65ijUSl47fszSMosQEMHC4RODmT4ISIivSDqW2CzZ8/G6NGj4efnB39/f/z444+Ii4vDxIkTAZS8NZWQkICff/4ZQMlZYu7u7mjatCmKioqwceNG7NixAzt27FDf54ABA7B8+XK0bt1a/RbY+++/j5dffhkGBgaiPE9N9Mu5+/hw919QqgQEeNpizShfyM34YWciItIPogagYcOG4dGjR1iyZAmSkpLQrFkz7N27F25ubgCApKQkxMXFqdcvKirC3LlzkZCQAFNTUzRt2hR79uxBv3791OssWrQIEokEixYtQkJCAuzt7TFgwAB8+umntf78NJFSJSB47y2sPXUXAPCarws+HdQcxoaiXxOTiIio1kgEvi9URlZWFuRyOTIzM0tdcFHb5RUpMHPLVRyMeAgAmNfbC5O7evJMLyIi0gmV+f0t+llgVDtSsgvw5v9dwvUHmTA2lOLL11ri5Zb1xB6LiIhIFAxAeiAqORsTNlxEQkY+rM2M8NMYP/i524g9FhERkWgYgHTcydupmLzxCrILFWhgZ46QcW3hbmcu9lhERESiYgDSYZsvxGHRrptQqgS087DBj6N9UcfMWOyxiIiIRMcApINUKgHLDkTh++N3AACvtnZG8ODmkBnyMgBEREQAA5DOKShWYs5v17DnRhIAYGbPRpjRoxHP9CIiIvoXBiAdkpZTiP/9fAnhcRkwMpBg2ZAWGNTaReyxiIiINA4DkI6IScnG+A0XEZ+ejzpmRvjhdV+0b2Ar9lhEREQaiQFIB5y5k4aJv1xGVoECbrZmWD+uLRrYW4g9FhERkcZiANJy2y7FY8HOG1CoBPi5WePHMX6wMeeZXkRERM/CAKSlBEHA8rBorDoSAwAY0LIevhjSAiZGPNOLiIjoeRiAtFBBsRLvbL+O3dcSAQDTujfErJ6NIZXyTC8iIqKKYADSMum5RXjr50u4dP9vGEol+OzV5hjq5yr2WERERFqFAUiLxKbmYMKGi7j3KA+WJob44XVfBDS0E3ssIiIircMApCXOxz7C2xsvIyOvGC7Wptgwvi0aOliKPRYREZFWYgDSArvCE/DO9usoUqrQun4d/DTGD3YWMrHHIiIi0loMQBpMEAR8czgGKw5FAwD6Na+L5UNb8UwvIiKiF8QApKEKFUos2HEDO8MTAAATu3jind5ePNOLiIioGjAAaaCMvCK8/ctlnL+bDgOpBJ8MbIYR7eqLPRYREZHOYADSMPcf5WL8+ouITcuFpcwQq19vg06N7MUei4iISKcwAGmQy/fT8b+fLyM9twjOdUwRMq4tvOryTC8iIqLqxgCkIf64log5266hSKFCCxc51o7xg4OVidhjERER6SQGIJEJgoDVx+7giwNRAICgJo5YObwVzIz5V0NERFRT+FtWRMVKFRaG3sBvlx4AAN7s6IEF/XxgwDO9iIiIahQDkEgy84sxedNlnI55BKkE+Ojlphjt7y72WERERHqBAUgE8el5GL/hImJScmBubIBvR7ZBN28HscciIiLSGwxAtSw87m/87+dLSMspQl0rE4SMa4sm9azEHouIiEivMADVoqORKZi48TIKFSo0rWeFdWPboq6cZ3oRERHVNgagWtTA3hzmMkMENqyDVSNaw1zG3U9ERCQG/gauRW625tgxKQD1bcx4phcREZGIGIBqmYedudgjEBER6T2p2AMQERER1TYGICIiItI7DEBERESkdxiAiIiISO8wABEREZHeYQAiIiIivcMARERERHqHAYiIiIj0DgMQERER6R0GICIiItI7DEBERESkdxiAiIiISO8wABEREZHeYRt8OQRBAABkZWWJPAkRERFV1JPf209+jz8LA1A5srOzAQCurq4iT0JERESVlZ2dDblc/sx1JEJFYpKeUalUSExMhKWlJSQSSbXed1ZWFlxdXREfHw8rK6tqvW9dw31VcdxXFcd9VXHcV5XD/VVxNbWvBEFAdnY26tWrB6n02Z/y4RGgckilUri4uNToY1hZWfEfSAVxX1Uc91XFcV9VHPdV5XB/VVxN7KvnHfl5gh+CJiIiIr3DAERERER6hwGolslkMixevBgy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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the training loss curve\n",
    "plt.plot(resnet50_history.history['accuracy'])\n",
    "plt.title('resnet Training accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Acc')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "31b501a4",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}