[415141]: / lung-diesease-prediction-using-transfer-learning.ipynb

Download this file

1548 lines (1547 with data), 142.9 kB

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "09fd3030",
   "metadata": {
    "papermill": {
     "duration": 0.028076,
     "end_time": "2021-08-16T05:06:05.145059",
     "exception": false,
     "start_time": "2021-08-16T05:06:05.116983",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### ***Loading the Necessary Libraries***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4b3425c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:05.283511Z",
     "iopub.status.busy": "2021-08-16T05:06:05.282681Z",
     "iopub.status.idle": "2021-08-16T05:06:10.491936Z",
     "shell.execute_reply": "2021-08-16T05:06:10.492406Z",
     "shell.execute_reply.started": "2021-08-16T04:09:38.337295Z"
    },
    "papermill": {
     "duration": 5.32112,
     "end_time": "2021-08-16T05:06:10.492715",
     "exception": false,
     "start_time": "2021-08-16T05:06:05.171595",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from keras.layers import Input, Dense, Flatten\n",
    "from keras.models import Model, Sequential\n",
    "from keras.applications.resnet50 import ResNet50, preprocess_input\n",
    "from keras.preprocessing import image\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "import numpy as np\n",
    "from glob import glob\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "546e4190",
   "metadata": {
    "papermill": {
     "duration": 0.026496,
     "end_time": "2021-08-16T05:06:10.545796",
     "exception": false,
     "start_time": "2021-08-16T05:06:10.519300",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "#### ***Geting the Datasets Path***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4e88794c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:10.603466Z",
     "iopub.status.busy": "2021-08-16T05:06:10.602555Z",
     "iopub.status.idle": "2021-08-16T05:06:10.606013Z",
     "shell.execute_reply": "2021-08-16T05:06:10.605459Z",
     "shell.execute_reply.started": "2021-08-16T04:09:38.345320Z"
    },
    "papermill": {
     "duration": 0.034888,
     "end_time": "2021-08-16T05:06:10.606135",
     "exception": false,
     "start_time": "2021-08-16T05:06:10.571247",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "train_path='../input/chest-xray-pneumonia/chest_xray/train'\n",
    "val_path='../input/chest-xray-pneumonia/chest_xray/val'\n",
    "test_path='../input/chest-xray-pneumonia/chest_xray/test'\n",
    "\n",
    "image_shape=[224, 224]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b04761c",
   "metadata": {
    "papermill": {
     "duration": 0.025203,
     "end_time": "2021-08-16T05:06:10.656383",
     "exception": false,
     "start_time": "2021-08-16T05:06:10.631180",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "#### ***ResNet model***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bc5b36cc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:10.716140Z",
     "iopub.status.busy": "2021-08-16T05:06:10.715376Z",
     "iopub.status.idle": "2021-08-16T05:06:16.062417Z",
     "shell.execute_reply": "2021-08-16T05:06:16.061571Z",
     "shell.execute_reply.started": "2021-08-16T04:09:38.358999Z"
    },
    "papermill": {
     "duration": 5.380965,
     "end_time": "2021-08-16T05:06:16.062584",
     "exception": false,
     "start_time": "2021-08-16T05:06:10.681619",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
      "94773248/94765736 [==============================] - 1s 0us/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.engine.functional.Functional at 0x7f6da5dafd50>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "resnet=ResNet50(input_shape=image_shape + [3], weights='imagenet', include_top=False) #Without top layers\n",
    "resnet"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d34fb950",
   "metadata": {
    "papermill": {
     "duration": 0.034955,
     "end_time": "2021-08-16T05:06:16.131767",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.096812",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "##### **No train for the RestNet layers as they are pretrained**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8a367913",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:16.211391Z",
     "iopub.status.busy": "2021-08-16T05:06:16.210417Z",
     "iopub.status.idle": "2021-08-16T05:06:16.215176Z",
     "shell.execute_reply": "2021-08-16T05:06:16.214625Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.666034Z"
    },
    "papermill": {
     "duration": 0.049822,
     "end_time": "2021-08-16T05:06:16.215333",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.165511",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "for layers in resnet.layers:\n",
    "    layers.trainable=False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be827032",
   "metadata": {
    "papermill": {
     "duration": 0.034619,
     "end_time": "2021-08-16T05:06:16.283430",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.248811",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "##### **Finding the output classes**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "208ea9c8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:16.354936Z",
     "iopub.status.busy": "2021-08-16T05:06:16.354269Z",
     "iopub.status.idle": "2021-08-16T05:06:16.378411Z",
     "shell.execute_reply": "2021-08-16T05:06:16.377746Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.677612Z"
    },
    "papermill": {
     "duration": 0.061179,
     "end_time": "2021-08-16T05:06:16.378608",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.317429",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['../input/chest-xray-pneumonia/chest_xray/train/PNEUMONIA',\n",
       " '../input/chest-xray-pneumonia/chest_xray/train/NORMAL']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classes=glob('../input/chest-xray-pneumonia/chest_xray/train/*')\n",
    "classes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab7424d3",
   "metadata": {
    "papermill": {
     "duration": 0.066458,
     "end_time": "2021-08-16T05:06:16.491582",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.425124",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "##### **Making the top layers**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "85d8235e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:16.606301Z",
     "iopub.status.busy": "2021-08-16T05:06:16.605186Z",
     "iopub.status.idle": "2021-08-16T05:06:16.765023Z",
     "shell.execute_reply": "2021-08-16T05:06:16.766808Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.692790Z"
    },
    "papermill": {
     "duration": 0.207924,
     "end_time": "2021-08-16T05:06:16.767448",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.559524",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_1 (InputLayer)            [(None, 224, 224, 3) 0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv1_pad (ZeroPadding2D)       (None, 230, 230, 3)  0           input_1[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv1_conv (Conv2D)             (None, 112, 112, 64) 9472        conv1_pad[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "conv1_bn (BatchNormalization)   (None, 112, 112, 64) 256         conv1_conv[0][0]                 \n",
      "__________________________________________________________________________________________________\n",
      "conv1_relu (Activation)         (None, 112, 112, 64) 0           conv1_bn[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "pool1_pad (ZeroPadding2D)       (None, 114, 114, 64) 0           conv1_relu[0][0]                 \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 (BatchNormali (None, 56, 56, 64)   256         conv2_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_1_relu (Activation (None, 56, 56, 64)   0           conv2_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_conv (Conv2D)    (None, 56, 56, 64)   36928       conv2_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_bn (BatchNormali (None, 56, 56, 64)   256         conv2_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_relu (Activation (None, 56, 56, 64)   0           conv2_block1_2_bn[0][0]          \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 (BatchNormali (None, 56, 56, 256)  1024        conv2_block1_0_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_3_bn (BatchNormali (None, 56, 56, 256)  1024        conv2_block1_3_conv[0][0]        \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 (BatchNormali (None, 56, 56, 64)   256         conv2_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_1_relu (Activation (None, 56, 56, 64)   0           conv2_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_conv (Conv2D)    (None, 56, 56, 64)   36928       conv2_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_bn (BatchNormali (None, 56, 56, 64)   256         conv2_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_relu (Activation (None, 56, 56, 64)   0           conv2_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_3_conv (Conv2D)    (None, 56, 56, 256)  16640       conv2_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_3_bn (BatchNormali (None, 56, 56, 256)  1024        conv2_block2_3_conv[0][0]        \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 (BatchNormali (None, 56, 56, 64)   256         conv2_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_1_relu (Activation (None, 56, 56, 64)   0           conv2_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_conv (Conv2D)    (None, 56, 56, 64)   36928       conv2_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_bn (BatchNormali (None, 56, 56, 64)   256         conv2_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_relu (Activation (None, 56, 56, 64)   0           conv2_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_3_conv (Conv2D)    (None, 56, 56, 256)  16640       conv2_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_3_bn (BatchNormali (None, 56, 56, 256)  1024        conv2_block3_3_conv[0][0]        \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 (BatchNormali (None, 28, 28, 128)  512         conv3_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_1_relu (Activation (None, 28, 28, 128)  0           conv3_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_conv (Conv2D)    (None, 28, 28, 128)  147584      conv3_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_bn (BatchNormali (None, 28, 28, 128)  512         conv3_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_relu (Activation (None, 28, 28, 128)  0           conv3_block1_2_bn[0][0]          \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 (BatchNormali (None, 28, 28, 512)  2048        conv3_block1_0_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_3_bn (BatchNormali (None, 28, 28, 512)  2048        conv3_block1_3_conv[0][0]        \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 (BatchNormali (None, 28, 28, 128)  512         conv3_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_1_relu (Activation (None, 28, 28, 128)  0           conv3_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_conv (Conv2D)    (None, 28, 28, 128)  147584      conv3_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_bn (BatchNormali (None, 28, 28, 128)  512         conv3_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_relu (Activation (None, 28, 28, 128)  0           conv3_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_3_conv (Conv2D)    (None, 28, 28, 512)  66048       conv3_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_3_bn (BatchNormali (None, 28, 28, 512)  2048        conv3_block2_3_conv[0][0]        \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 (BatchNormali (None, 28, 28, 128)  512         conv3_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_1_relu (Activation (None, 28, 28, 128)  0           conv3_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_conv (Conv2D)    (None, 28, 28, 128)  147584      conv3_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_bn (BatchNormali (None, 28, 28, 128)  512         conv3_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_relu (Activation (None, 28, 28, 128)  0           conv3_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_3_conv (Conv2D)    (None, 28, 28, 512)  66048       conv3_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_3_bn (BatchNormali (None, 28, 28, 512)  2048        conv3_block3_3_conv[0][0]        \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 (BatchNormali (None, 28, 28, 128)  512         conv3_block4_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_1_relu (Activation (None, 28, 28, 128)  0           conv3_block4_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_conv (Conv2D)    (None, 28, 28, 128)  147584      conv3_block4_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_bn (BatchNormali (None, 28, 28, 128)  512         conv3_block4_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_relu (Activation (None, 28, 28, 128)  0           conv3_block4_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_3_conv (Conv2D)    (None, 28, 28, 512)  66048       conv3_block4_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_3_bn (BatchNormali (None, 28, 28, 512)  2048        conv3_block4_3_conv[0][0]        \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 (BatchNormali (None, 14, 14, 256)  1024        conv4_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_1_relu (Activation (None, 14, 14, 256)  0           conv4_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_relu (Activation (None, 14, 14, 256)  0           conv4_block1_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_0_conv (Conv2D)    (None, 14, 14, 1024) 525312      conv3_block4_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block1_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block1_0_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block1_3_conv[0][0]        \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",
      "conv4_block2_1_conv (Conv2D)    (None, 14, 14, 256)  262400      conv4_block1_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_1_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_1_relu (Activation (None, 14, 14, 256)  0           conv4_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_relu (Activation (None, 14, 14, 256)  0           conv4_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block2_3_conv[0][0]        \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",
      "conv4_block3_1_conv (Conv2D)    (None, 14, 14, 256)  262400      conv4_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_1_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_1_relu (Activation (None, 14, 14, 256)  0           conv4_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_relu (Activation (None, 14, 14, 256)  0           conv4_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block3_3_conv[0][0]        \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",
      "conv4_block4_1_conv (Conv2D)    (None, 14, 14, 256)  262400      conv4_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_1_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block4_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_1_relu (Activation (None, 14, 14, 256)  0           conv4_block4_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block4_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block4_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_relu (Activation (None, 14, 14, 256)  0           conv4_block4_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block4_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block4_3_conv[0][0]        \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",
      "conv4_block5_1_conv (Conv2D)    (None, 14, 14, 256)  262400      conv4_block4_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_1_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block5_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_1_relu (Activation (None, 14, 14, 256)  0           conv4_block5_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block5_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block5_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_relu (Activation (None, 14, 14, 256)  0           conv4_block5_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block5_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block5_3_conv[0][0]        \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",
      "conv4_block6_1_conv (Conv2D)    (None, 14, 14, 256)  262400      conv4_block5_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_1_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block6_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_1_relu (Activation (None, 14, 14, 256)  0           conv4_block6_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_conv (Conv2D)    (None, 14, 14, 256)  590080      conv4_block6_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_bn (BatchNormali (None, 14, 14, 256)  1024        conv4_block6_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_relu (Activation (None, 14, 14, 256)  0           conv4_block6_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_3_conv (Conv2D)    (None, 14, 14, 1024) 263168      conv4_block6_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096        conv4_block6_3_conv[0][0]        \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",
      "conv5_block1_1_conv (Conv2D)    (None, 7, 7, 512)    524800      conv4_block6_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_1_bn (BatchNormali (None, 7, 7, 512)    2048        conv5_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_1_relu (Activation (None, 7, 7, 512)    0           conv5_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_conv (Conv2D)    (None, 7, 7, 512)    2359808     conv5_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_bn (BatchNormali (None, 7, 7, 512)    2048        conv5_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_relu (Activation (None, 7, 7, 512)    0           conv5_block1_2_bn[0][0]          \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 (BatchNormali (None, 7, 7, 2048)   8192        conv5_block1_0_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048)   8192        conv5_block1_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_add (Add)          (None, 7, 7, 2048)   0           conv5_block1_0_bn[0][0]          \n",
      "                                                                 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 (BatchNormali (None, 7, 7, 512)    2048        conv5_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_1_relu (Activation (None, 7, 7, 512)    0           conv5_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_conv (Conv2D)    (None, 7, 7, 512)    2359808     conv5_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_bn (BatchNormali (None, 7, 7, 512)    2048        conv5_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_relu (Activation (None, 7, 7, 512)    0           conv5_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_3_conv (Conv2D)    (None, 7, 7, 2048)   1050624     conv5_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048)   8192        conv5_block2_3_conv[0][0]        \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 (BatchNormali (None, 7, 7, 512)    2048        conv5_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_1_relu (Activation (None, 7, 7, 512)    0           conv5_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_conv (Conv2D)    (None, 7, 7, 512)    2359808     conv5_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_bn (BatchNormali (None, 7, 7, 512)    2048        conv5_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_relu (Activation (None, 7, 7, 512)    0           conv5_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_3_conv (Conv2D)    (None, 7, 7, 2048)   1050624     conv5_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048)   8192        conv5_block3_3_conv[0][0]        \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",
      "flatten (Flatten)               (None, 100352)       0           conv5_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "dense (Dense)                   (None, 256)          25690368    flatten[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "dense_1 (Dense)                 (None, 2)            514         dense[0][0]                      \n",
      "==================================================================================================\n",
      "Total params: 49,278,594\n",
      "Trainable params: 25,690,882\n",
      "Non-trainable params: 23,587,712\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "x=Flatten()(resnet.output)\n",
    "d=Dense(256, activation='relu')(x)\n",
    "prediction=Dense(len(classes), activation='softmax')(d)\n",
    "model=Model(inputs=resnet.input, outputs=prediction)\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f316b4ea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:16.855632Z",
     "iopub.status.busy": "2021-08-16T05:06:16.854472Z",
     "iopub.status.idle": "2021-08-16T05:06:16.864142Z",
     "shell.execute_reply": "2021-08-16T05:06:16.863634Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.801724Z"
    },
    "papermill": {
     "duration": 0.05726,
     "end_time": "2021-08-16T05:06:16.864267",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.807007",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "model.compile(\n",
    "  loss='categorical_crossentropy',\n",
    "  optimizer='adam',\n",
    "  metrics=['accuracy']\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "736dbd9a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:16.995523Z",
     "iopub.status.busy": "2021-08-16T05:06:16.994379Z",
     "iopub.status.idle": "2021-08-16T05:06:16.998467Z",
     "shell.execute_reply": "2021-08-16T05:06:16.999444Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.819726Z"
    },
    "papermill": {
     "duration": 0.082266,
     "end_time": "2021-08-16T05:06:16.999688",
     "exception": false,
     "start_time": "2021-08-16T05:06:16.917422",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "train_datagen=ImageDataGenerator(rescale=1/255, shear_range=0.1, zoom_range=0.1, horizontal_flip=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b146ba5c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:17.137218Z",
     "iopub.status.busy": "2021-08-16T05:06:17.136186Z",
     "iopub.status.idle": "2021-08-16T05:06:17.142680Z",
     "shell.execute_reply": "2021-08-16T05:06:17.143501Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.828124Z"
    },
    "papermill": {
     "duration": 0.073148,
     "end_time": "2021-08-16T05:06:17.143645",
     "exception": false,
     "start_time": "2021-08-16T05:06:17.070497",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "test_datagen=ImageDataGenerator(rescale=1/255)\n",
    "val_datagen=ImageDataGenerator(rescale=1/255)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b6de9b34",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:17.271937Z",
     "iopub.status.busy": "2021-08-16T05:06:17.270887Z",
     "iopub.status.idle": "2021-08-16T05:06:22.773288Z",
     "shell.execute_reply": "2021-08-16T05:06:22.772748Z",
     "shell.execute_reply.started": "2021-08-16T04:09:39.836850Z"
    },
    "papermill": {
     "duration": 5.56956,
     "end_time": "2021-08-16T05:06:22.773435",
     "exception": false,
     "start_time": "2021-08-16T05:06:17.203875",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 5216 images belonging to 2 classes.\n"
     ]
    }
   ],
   "source": [
    "training_set=train_datagen.flow_from_directory('../input/chest-xray-pneumonia/chest_xray/train', target_size=(224, 224), batch_size=32, class_mode='categorical')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c264e133",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:22.911819Z",
     "iopub.status.busy": "2021-08-16T05:06:22.910747Z",
     "iopub.status.idle": "2021-08-16T05:06:23.125862Z",
     "shell.execute_reply": "2021-08-16T05:06:23.127159Z",
     "shell.execute_reply.started": "2021-08-16T04:09:40.056000Z"
    },
    "papermill": {
     "duration": 0.288735,
     "end_time": "2021-08-16T05:06:23.127539",
     "exception": false,
     "start_time": "2021-08-16T05:06:22.838804",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 624 images belonging to 2 classes.\n"
     ]
    }
   ],
   "source": [
    "test_set=test_datagen.flow_from_directory('../input/chest-xray-pneumonia/chest_xray/test', target_size=(224, 224), batch_size=32, class_mode='categorical')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "aa42029c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:23.256295Z",
     "iopub.status.busy": "2021-08-16T05:06:23.255038Z",
     "iopub.status.idle": "2021-08-16T05:06:23.372332Z",
     "shell.execute_reply": "2021-08-16T05:06:23.371728Z",
     "shell.execute_reply.started": "2021-08-16T04:09:40.166897Z"
    },
    "papermill": {
     "duration": 0.184016,
     "end_time": "2021-08-16T05:06:23.372494",
     "exception": false,
     "start_time": "2021-08-16T05:06:23.188478",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 16 images belonging to 2 classes.\n"
     ]
    }
   ],
   "source": [
    "val_set=val_datagen.flow_from_directory('../input/chest-xray-pneumonia/chest_xray/val', target_size=(224, 224), batch_size=32, class_mode='categorical')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "82c500c8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:06:23.455153Z",
     "iopub.status.busy": "2021-08-16T05:06:23.454380Z",
     "iopub.status.idle": "2021-08-16T05:27:03.128121Z",
     "shell.execute_reply": "2021-08-16T05:27:03.127602Z",
     "shell.execute_reply.started": "2021-08-16T04:09:40.281960Z"
    },
    "papermill": {
     "duration": 1239.717644,
     "end_time": "2021-08-16T05:27:03.128268",
     "exception": false,
     "start_time": "2021-08-16T05:06:23.410624",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "163/163 [==============================] - 174s 1s/step - loss: 1.4933 - accuracy: 0.6808 - val_loss: 0.9421 - val_accuracy: 0.5000\n",
      "Epoch 2/10\n",
      "163/163 [==============================] - 118s 724ms/step - loss: 0.4017 - accuracy: 0.7802 - val_loss: 0.7580 - val_accuracy: 0.6250\n",
      "Epoch 3/10\n",
      "163/163 [==============================] - 116s 712ms/step - loss: 0.3392 - accuracy: 0.8526 - val_loss: 1.0316 - val_accuracy: 0.6250\n",
      "Epoch 4/10\n",
      "163/163 [==============================] - 117s 720ms/step - loss: 0.3040 - accuracy: 0.8687 - val_loss: 1.0229 - val_accuracy: 0.6250\n",
      "Epoch 5/10\n",
      "163/163 [==============================] - 119s 729ms/step - loss: 0.2893 - accuracy: 0.8778 - val_loss: 0.5503 - val_accuracy: 0.6875\n",
      "Epoch 6/10\n",
      "163/163 [==============================] - 118s 719ms/step - loss: 0.2680 - accuracy: 0.8829 - val_loss: 1.8514 - val_accuracy: 0.6250\n",
      "Epoch 7/10\n",
      "163/163 [==============================] - 119s 730ms/step - loss: 0.2803 - accuracy: 0.8843 - val_loss: 0.7620 - val_accuracy: 0.6875\n",
      "Epoch 8/10\n",
      "163/163 [==============================] - 118s 726ms/step - loss: 0.1997 - accuracy: 0.9184 - val_loss: 0.7933 - val_accuracy: 0.6875\n",
      "Epoch 9/10\n",
      "163/163 [==============================] - 118s 726ms/step - loss: 0.1999 - accuracy: 0.9168 - val_loss: 0.7006 - val_accuracy: 0.6875\n",
      "Epoch 10/10\n",
      "163/163 [==============================] - 120s 735ms/step - loss: 0.1854 - accuracy: 0.9218 - val_loss: 1.5245 - val_accuracy: 0.6250\n"
     ]
    }
   ],
   "source": [
    "fit=model.fit(training_set, validation_data=val_set, epochs=10, steps_per_epoch=len(training_set), validation_steps=len(val_set))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "2ae23b71",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:04.322970Z",
     "iopub.status.busy": "2021-08-16T05:27:04.319808Z",
     "iopub.status.idle": "2021-08-16T05:27:04.495629Z",
     "shell.execute_reply": "2021-08-16T05:27:04.496143Z",
     "shell.execute_reply.started": "2021-08-16T04:28:45.355662Z"
    },
    "papermill": {
     "duration": 0.791967,
     "end_time": "2021-08-16T05:27:04.496311",
     "exception": false,
     "start_time": "2021-08-16T05:27:03.704344",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA210lEQVR4nO3deXxU5bnA8d+TdbITIKxhSSyy74GiKNG6gQtqrRXUutSl1qXttfXWLrdWW69ava21aq22LnVX0LqhaC2IdakJCBIEZIcJWwIkJGSfvPePdyYMIXtm5sxMnu/nM5/JnHNmzpMhPOec57yLGGNQSikVvWKcDkAppVRwaaJXSqkop4leKaWinCZ6pZSKcprolVIqysU5HUBL+vbta4YPH+50GEopFTGWL19eaozJamldWCb64cOHU1hY6HQYSikVMURkW2vrtHSjlFJRThO9UkpFOU30SikV5cKyRq+Uil719fW43W5qamqcDiUiuVwusrOziY+P7/B7NNErpULK7XaTlpbG8OHDERGnw4koxhj27duH2+0mJyenw+/T0o1SKqRqamro06ePJvkuEBH69OnT6ashTfRKqZDTJN91XfnuNNErFUqb/gV71zodhephNNErFSqNjfDyFfDOz5yOpMcqKyvj4Ycf7tJ7zzzzTMrKyjq8/a9//Wvuu+++Lu0r0DTRKxUq+zZATTls/xQaap2OpkdqK9E3NDS0+d5FixbRq1evIEQVfJrolQoVd4F9bqiGHZ85G0sPdeutt7Jp0yYmTZrELbfcwtKlSznxxBOZO3cuY8aMAeC8885j6tSpjB07lkcffbTpvcOHD6e0tJStW7cyevRorrnmGsaOHcvpp59OdXV1m/tduXIlM2bMYMKECZx//vkcOHAAgAceeIAxY8YwYcIE5s2bB8AHH3zApEmTmDRpEpMnT6aioqLbv7c2r1QqVNwFkJAG9VWw5QPIOdHpiBx3+xtr+HLnwYB+5phB6dx2ztgW1919990UFRWxcuVKAJYuXcqKFSsoKipqaq74+OOP07t3b6qrq5k2bRoXXHABffr0OeJzNmzYwPPPP89jjz3Gt7/9bRYuXMill17aakyXXXYZf/rTn8jPz+dXv/oVt99+O/fffz933303W7ZsITExsaksdN999/HQQw8xc+ZMKisrcblc3f5O9IxeqVBxF8KQ6TBoMmz+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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fit.history['loss'], label='train loss')\n",
    "plt.plot(fit.history['val_loss'], label='val loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "9f02e3b3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:05.685287Z",
     "iopub.status.busy": "2021-08-16T05:27:05.684081Z",
     "iopub.status.idle": "2021-08-16T05:27:05.830416Z",
     "shell.execute_reply": "2021-08-16T05:27:05.831005Z",
     "shell.execute_reply.started": "2021-08-16T04:29:40.090459Z"
    },
    "papermill": {
     "duration": 0.75719,
     "end_time": "2021-08-16T05:27:05.831229",
     "exception": false,
     "start_time": "2021-08-16T05:27:05.074039",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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efLJJ4mMjGTt2rUAHDp0iPT0dEaOHMkXX3xBQkICBw8ePOOfZcuWLUydOpUePXoAMH78eOrVq0dhYSF9+vRhzZo1tGnThsGDBzNz5ky6du1KVlYWYWFhjBgxgilTpvCvf/2LzZs3k5ube9ZhDv4c6HlH4JO/QJNE6DzM7WpEvM7pRtLVqVu3bifca/38888zZ84cAHbt2sWWLVt+EegJCQklo9suXbqwY8eOX+w3NTWVwYMHs2fPHvLy8kqOsWjRImbMmFGyXXR0NB988AEXXnhhyTb16tU7Y90tWrQoCXOAWbNmMWnSJAoKCtizZw8bNmzAGEOTJk3o2rUrABEREQAMGjSIJ598kn/84x+89tpr3HbbbWc8Xnn47zn0r/4NWWnQ7+/OAhYi4pVq165d8vizzz5j0aJFfPPNN6xevZqkpKQy78WuVatWyePAwMAyz7/fc889jB49mrVr1/Lyyy9XanZsUFDQCefHS++jdN0//PADzzzzDIsXL2bNmjUMGDDgtMcLDw+nb9++vP/++8yaNYthwzwz6PTPQM/Y6QR6h+ugxa/crkZEitWtW5fDhw+f8v3MzEyio6MJDw9n06ZNLF26tNLHyszMJDbWWbhm6tSpJa/37duXiRMnljw/dOgQPXr04IsvvuCHH34AKDnlEh8fz4oVKwBYsWJFyfsny8rKonbt2kRGRrJ3714+/vhjAM477zz27NnDsmXLADh8+HDJfz533HEH9957L127diU6OrrSf87S/DPQP/kLYOCSx92uRERKqV+/Pj179qRDhw488MAvb1To168fBQUFtG3blrFjx55wSqOiHnvsMQYNGkSXLl1o0ODnVh8PP/wwhw4dokOHDiQmJrJkyRJiYmKYNGkS1157LYmJiQwePBiA6667joMHD9K+fXteeOEFWrduXeaxEhMTSUpKok2bNtx444307NkTgJCQEGbOnMk999xDYmIiffv2LRm5d+nShYiICIYPH17pP+PJjLXWYzuriOTkZJuSkuL5He/4Cqb0h94PQe+xnt+/iA/buHEjbdu2dbsMAXbv3k3v3r3ZtGkTAQFlj63L+vsyxiy31iaXtb1/jdCLCmH+nyAiDi641+1qRETKNG3aNLp378748eNPGeaV4V93uax8A35aC9e/BiHhblcjIlKmW265hVtuucXj+/WfEXpOBix+EppfAO2v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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fit.history['accuracy'], label='train accuracy')\n",
    "plt.plot(fit.history['val_accuracy'], label='val accuracy')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1bea68b4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:07.006543Z",
     "iopub.status.busy": "2021-08-16T05:27:07.004882Z",
     "iopub.status.idle": "2021-08-16T05:27:18.296132Z",
     "shell.execute_reply": "2021-08-16T05:27:18.295561Z",
     "shell.execute_reply.started": "2021-08-16T04:31:53.958544Z"
    },
    "papermill": {
     "duration": 11.87738,
     "end_time": "2021-08-16T05:27:18.296341",
     "exception": false,
     "start_time": "2021-08-16T05:27:06.418961",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20/20 [==============================] - 11s 541ms/step - loss: 0.9395 - accuracy: 0.6971\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.939464271068573, 0.6971153616905212]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.evaluate(test_set)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c10f5944",
   "metadata": {
    "papermill": {
     "duration": 0.603564,
     "end_time": "2021-08-16T05:27:19.509005",
     "exception": false,
     "start_time": "2021-08-16T05:27:18.905441",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "#### ***VGG16 Model***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68a12168",
   "metadata": {
    "papermill": {
     "duration": 0.639483,
     "end_time": "2021-08-16T05:27:20.754854",
     "exception": false,
     "start_time": "2021-08-16T05:27:20.115371",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "##### **Same as ResNet**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0c2176f7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:22.041061Z",
     "iopub.status.busy": "2021-08-16T05:27:22.038837Z",
     "iopub.status.idle": "2021-08-16T05:27:22.042466Z",
     "shell.execute_reply": "2021-08-16T05:27:22.043409Z",
     "shell.execute_reply.started": "2021-08-16T04:33:26.806992Z"
    },
    "papermill": {
     "duration": 0.675097,
     "end_time": "2021-08-16T05:27:22.043841",
     "exception": false,
     "start_time": "2021-08-16T05:27:21.368744",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from keras.applications.vgg16 import VGG16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "995bc724",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:23.473507Z",
     "iopub.status.busy": "2021-08-16T05:27:23.472356Z",
     "iopub.status.idle": "2021-08-16T05:27:24.875125Z",
     "shell.execute_reply": "2021-08-16T05:27:24.874514Z",
     "shell.execute_reply.started": "2021-08-16T04:34:33.004848Z"
    },
    "papermill": {
     "duration": 2.014499,
     "end_time": "2021-08-16T05:27:24.875272",
     "exception": false,
     "start_time": "2021-08-16T05:27:22.860773",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
      "58892288/58889256 [==============================] - 1s 0us/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.engine.functional.Functional at 0x7f6d0024b7d0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vgg=VGG16(input_shape=image_shape + [3], weights='imagenet', include_top=False)\n",
    "vgg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "fa4c22ea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:26.090470Z",
     "iopub.status.busy": "2021-08-16T05:27:26.088184Z",
     "iopub.status.idle": "2021-08-16T05:27:26.091359Z",
     "shell.execute_reply": "2021-08-16T05:27:26.091951Z",
     "shell.execute_reply.started": "2021-08-16T04:35:06.993251Z"
    },
    "papermill": {
     "duration": 0.613982,
     "end_time": "2021-08-16T05:27:26.092103",
     "exception": false,
     "start_time": "2021-08-16T05:27:25.478121",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "for layers in vgg.layers:\n",
    "    layers.trainable=False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3044655b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:27.365721Z",
     "iopub.status.busy": "2021-08-16T05:27:27.364566Z",
     "iopub.status.idle": "2021-08-16T05:27:27.411993Z",
     "shell.execute_reply": "2021-08-16T05:27:27.411420Z",
     "shell.execute_reply.started": "2021-08-16T04:36:08.092886Z"
    },
    "papermill": {
     "duration": 0.719969,
     "end_time": "2021-08-16T05:27:27.412160",
     "exception": false,
     "start_time": "2021-08-16T05:27:26.692191",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_2 (InputLayer)         [(None, 224, 224, 3)]     0         \n",
      "_________________________________________________________________\n",
      "block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      \n",
      "_________________________________________________________________\n",
      "block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     \n",
      "_________________________________________________________________\n",
      "block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         \n",
      "_________________________________________________________________\n",
      "block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     \n",
      "_________________________________________________________________\n",
      "block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    \n",
      "_________________________________________________________________\n",
      "block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         \n",
      "_________________________________________________________________\n",
      "block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    \n",
      "_________________________________________________________________\n",
      "block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    \n",
      "_________________________________________________________________\n",
      "block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    \n",
      "_________________________________________________________________\n",
      "block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         \n",
      "_________________________________________________________________\n",
      "block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   \n",
      "_________________________________________________________________\n",
      "block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         \n",
      "_________________________________________________________________\n",
      "block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         \n",
      "_________________________________________________________________\n",
      "flatten_1 (Flatten)          (None, 25088)             0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 256)               6422784   \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 2)                 514       \n",
      "=================================================================\n",
      "Total params: 21,137,986\n",
      "Trainable params: 6,423,298\n",
      "Non-trainable params: 14,714,688\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "x=Flatten()(vgg.output)\n",
    "d=Dense(256, activation='relu')(x)\n",
    "prediction=Dense(len(classes), activation='softmax')(d)\n",
    "model=Model(inputs=vgg.input, outputs=prediction)\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "0a7eb997",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:29.295938Z",
     "iopub.status.busy": "2021-08-16T05:27:29.294853Z",
     "iopub.status.idle": "2021-08-16T05:27:29.301299Z",
     "shell.execute_reply": "2021-08-16T05:27:29.300625Z",
     "shell.execute_reply.started": "2021-08-16T04:36:25.133906Z"
    },
    "papermill": {
     "duration": 0.897504,
     "end_time": "2021-08-16T05:27:29.301489",
     "exception": false,
     "start_time": "2021-08-16T05:27:28.403985",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "model.compile(\n",
    "  loss='categorical_crossentropy',\n",
    "  optimizer='adam',\n",
    "  metrics=['accuracy']\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "34419381",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:27:30.572228Z",
     "iopub.status.busy": "2021-08-16T05:27:30.569709Z",
     "iopub.status.idle": "2021-08-16T05:47:04.715087Z",
     "shell.execute_reply": "2021-08-16T05:47:04.716519Z",
     "shell.execute_reply.started": "2021-08-16T04:36:52.627303Z"
    },
    "papermill": {
     "duration": 1174.774257,
     "end_time": "2021-08-16T05:47:04.716859",
     "exception": false,
     "start_time": "2021-08-16T05:27:29.942602",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "163/163 [==============================] - 121s 721ms/step - loss: 0.5151 - accuracy: 0.8927 - val_loss: 0.5354 - val_accuracy: 0.7500\n",
      "Epoch 2/10\n",
      "163/163 [==============================] - 118s 722ms/step - loss: 0.1138 - accuracy: 0.9598 - val_loss: 0.0728 - val_accuracy: 0.9375\n",
      "Epoch 3/10\n",
      "163/163 [==============================] - 118s 724ms/step - loss: 0.0780 - accuracy: 0.9705 - val_loss: 0.1995 - val_accuracy: 0.9375\n",
      "Epoch 4/10\n",
      "163/163 [==============================] - 117s 717ms/step - loss: 0.0817 - accuracy: 0.9694 - val_loss: 0.1454 - val_accuracy: 0.9375\n",
      "Epoch 5/10\n",
      "163/163 [==============================] - 118s 718ms/step - loss: 0.0485 - accuracy: 0.9809 - val_loss: 0.0538 - val_accuracy: 1.0000\n",
      "Epoch 6/10\n",
      "163/163 [==============================] - 116s 714ms/step - loss: 0.0746 - accuracy: 0.9735 - val_loss: 0.1198 - val_accuracy: 0.9375\n",
      "Epoch 7/10\n",
      "163/163 [==============================] - 117s 721ms/step - loss: 0.0474 - accuracy: 0.9817 - val_loss: 0.0866 - val_accuracy: 1.0000\n",
      "Epoch 8/10\n",
      "163/163 [==============================] - 115s 706ms/step - loss: 0.0445 - accuracy: 0.9839 - val_loss: 0.0728 - val_accuracy: 1.0000\n",
      "Epoch 9/10\n",
      "163/163 [==============================] - 118s 723ms/step - loss: 0.0414 - accuracy: 0.9855 - val_loss: 0.0504 - val_accuracy: 1.0000\n",
      "Epoch 10/10\n",
      "163/163 [==============================] - 115s 705ms/step - loss: 0.0523 - accuracy: 0.9811 - val_loss: 0.0381 - val_accuracy: 1.0000\n"
     ]
    }
   ],
   "source": [
    "fit=model.fit(training_set, validation_data=val_set, epochs=10, steps_per_epoch=len(training_set), validation_steps=len(val_set))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "bf713d20",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:47:07.143499Z",
     "iopub.status.busy": "2021-08-16T05:47:07.142240Z",
     "iopub.status.idle": "2021-08-16T05:47:07.308206Z",
     "shell.execute_reply": "2021-08-16T05:47:07.307615Z",
     "shell.execute_reply.started": "2021-08-16T04:55:00.797118Z"
    },
    "papermill": {
     "duration": 1.392018,
     "end_time": "2021-08-16T05:47:07.308357",
     "exception": false,
     "start_time": "2021-08-16T05:47:05.916339",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fit.history['loss'], label='train loss')\n",
    "plt.plot(fit.history['val_loss'], label='val loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b8976366",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:47:09.806433Z",
     "iopub.status.busy": "2021-08-16T05:47:09.805257Z",
     "iopub.status.idle": "2021-08-16T05:47:10.042425Z",
     "shell.execute_reply": "2021-08-16T05:47:10.039446Z",
     "shell.execute_reply.started": "2021-08-16T04:55:21.557068Z"
    },
    "papermill": {
     "duration": 1.497025,
     "end_time": "2021-08-16T05:47:10.042661",
     "exception": false,
     "start_time": "2021-08-16T05:47:08.545636",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAtQUlEQVR4nO3deXxU1f3/8dcn+x6yESALQUUQ0ICsFb+KWipuoFKK1r0u5atSbWst+tW6/4qtWmsVK7Yu1JViFbS4gSK2SiAgq+yImQQIISQhIQlZ5vz+uJMwgSyTZDI3mfk8H488ZubeOzMfpvU9Z8499xwxxqCUUsp/BdldgFJKqa6lQa+UUn5Og14ppfycBr1SSvk5DXqllPJzIXYXcKzk5GSTlZVldxlKKdWjrF69+oAxJqW5fd0u6LOyssjNzbW7DKWU6lFE5PuW9mnXjVJK+TkNeqWU8nMa9Eop5ec06JVSys9p0CullJ9rM+hF5CUR2S8iG1vYLyLyjIjsEJH1InK6277rRGS76+86bxaulFLKM5606F8BJrWy/wJgoOvvFuB5ABFJBB4AxgJjgAdEJKEzxSqllGq/NsfRG2OWi0hWK4dMAeYZa77jFSLSS0T6AhOAT40xBwFE5FOsL4w3O121Uu313XIIj4N+w+2uxH71tZD7MhwusrsSday4fjDqBq+/rDcumEoDHG6P813bWtp+HBG5BevXAJmZmV4oSSk3hZvgtakQFg23roDYPnZXZK8vHoflfwTE7krUsdJHddug7zRjzFxgLsCoUaN0JRTlPXU18K+fW635msOwaCb8dD5IgIZc/mr48inI/ilc9rzd1Sgf8caomwIgw+1xumtbS9uV8p0vHofCDTD5LzDxIdj+CayZZ3dV9qiphHd/DrF94YLZdlejfMgbQb8IuNY1+mYcUGaM2Qt8DPxIRBJcJ2F/5NqmlG84VsF/noLhV8HgC2H0zTDgLPj4XijZbXd1vrf0ISjeDpc+BxHxdlejfMiT4ZVvAl8Dg0QkX0RuFJEZIjLDdchiYBewA3gRuBXAdRL2EWCV6+/hhhOzSnW5mkp4bwbEpcGk31vbgoJgyhyQIHjvVnA67a3Rl3Z9ATl/hTE/hxMm2F2N8jFPRt1c2cZ+A9zWwr6XgJc6VppSnbDkQSjeAdcuatp67ZUBk2bDwlthxRw443bbSvSZ6jJYeBsknQQ/fNDuapQN9MpY5X92LYOVL8DYGXDC2cfvH/5TGHQRLH0Y9m/xeXk+99G9cKgALv0rhEXZXY2ygQa98i/VZfCeq/V63gPNHyMCl/wZwmOsk5P1tb6t0Ze2LIa1r8GZv4SM0XZXo2yiQa/8y0f3QPkeuOyF1luvMSlw8dOwdy0sf8JX1fnW4QPw/i8g9VQ4e5bd1SgbadAr/7Hl37D2dTjzV9aFJ20ZMhlOm25dPFSwpuvr8yVj4INfQlUpXPZXCAmzuyJlo25xwZRSnXb4ALx/B/Q5Fc7+refPu+AP8N2X8O4M+PkXEBrZdTX60oZ/wuZF1snXPsPsruY4dfVOvj9YSX5JFWHBQUSFBRMZFkxkqNttaDBBQQF6YZuXadCrns8Y+OBOq3/+2oXta71G9rLGlf/jMvjsUTj/sa6q0ncO7YHFd0HGWDjjF7aWUlvv5PviSrYXlrN9fwXbCsvZsb+CXUWHqalve3hreEgQkWHBRIUGE+H6AogKCyYi9Oj9SNfjKNd+634IkWFBri+OkKbPc71eZFgw4SFBSABcJa1Br3q+9fNh8/vww4cgdWj7n3/iuTD6Jvj6ORh0AWSd6f0afcUYayhlfS1c+jwEBfvkbWvrnew+cLgxzLfvr2BHYQW7DlRQW390VpOMxEhO7h3L2YNSGNg7lszEKOrqnVTV1lNVW09lTT3VtfVU1ViP3W8ra+updj0ur66jqPzI0ee49tc72zeDigiNXwJRYSFEh4cQHRZs3YYHE92wLdzaFhMeQlRYCDHhR4+3tgVbt+HBhIf45jNvDw161bOVFcDi30DGODhjZsdfZ+LDsPMzeO9/4X+/gvBY79XoS7l/t/4dFz4BSSd6/eVr6pzsLj7M9sKjrfNtheV8d+Awda6QFYGMhChOTo3hnMG9OTk1hoG9YzmxdzRRYV0bOTV11pdGtesLoOGLovGx68uisqaOqlrXF0xNHZU11v6KI3UcPlJHaVUtBaVVHHY9Plzj+ZdIaLC4vjCsLwjri+HYL45jvlBc21JiwhmW5v2rljXoVc/V0Hp11sKlc1ptvdbWOwkWabnPNyzaGmf+8iRrioTJf+miortQ8U745H444RzrF0onHKmrZ/eBysbWeUPXy+5jAr1/YhQn9Y7lh0NSjwZ6SgyRYfa0asNCgggLCSI+MtSrr2uM4Uid0xX89RyuOfoFcPhIHRVH6qh0PW64X3HE+kJp+PI4UHHE2uc6pqbu+K6r4Rm9eO+28V6tHTToVQ9TW++krKqW0spaQtf8nf67PmfNqfez5luhtHIrpVU1lFTWUlZZS0llDaWVtZRV1VJxpI6osGAGpsYyODWWQX2O/iXHhFsvnunq0/7v0zD4Yjj5fFv/re3irLemdQgKhSnPeTw755G6enYVHT4a5oUVbN9fzu7iysYWbJBA/6RoTuodw/lDUxnYO5aBqTGcmBJDRGj366boCiJChKv/PynGO69ZW++k8kg9FQ1fGkfqCA3umoGQGvTKFnUNgV1VS6krkEtd4dwQ5Mfdr6yl/EgdAP1lHx+GPcZy56lcu2owsJkggV5RYfSKDKVXVCipcREMSo2lV1QY8ZGhlFTWsK2wnCWbC3k79+hSCckxYQzqE8vJqbEMSbmGixM+ImLhTOS2FRCVaNMn1E5f/QUcK+CyuRDfdNmHmjone0qr+P5gJXkHK3EcrGT3gcPs2F/B7uLDNPRIBAlkJUUzMDWGC4b1ZaCrhX5CSnTABLovhQYHER8VRHyUd399NEesqWq6j1GjRpnc3Fy7y1CddKDiCOvzS1nrKOO7A4cpdYV2Qyu7vLquxecGCcRHhlqhHRXqCu6G+2EkRAZx0eobiSvfyfapnxCT0p/4qFBiw0M8Ho5XVH6ErfvK2VpYztZ9h9i6r5xthRVU1dYzRHbzXtj9fBnyA97q/xCDG1r/qbEMSI4mpItaXR1WuAkzdwKHMs7jyxFPkldSRV6xFep5ByvZU1qFe/dyWEgQmYlRnJQSY4V5aiwDe8cwIFkDvScTkdXGmGYvINEWveq0w0fq2FhQxrr8UtY5rNv8kirACu2MxCgSosJIjA7jhOToJgGeEG21thPcgjw2oo3A/s+f4OA3cPmLDBl8SodqTokNJyU2nDMHJjduczoNjpJKtuwrJ3dlPud9P4ev937InC0jG7sxwoKDOLF3DINdvwAavgT6xkd06TC9eqdhT2kVjoOVjS3zvOJK9hSX8fuDd5JkIjh/yxQOblkLWL9SMhKjGNk/gctHpJGRGEX/pGgyE6PoHRuu49MDjLboVbvU1jvZVlhuBbqjlHX5pWwrLG9sMWYkRpKd3sv6y+jFsLQ474602LcR5k6whkH+ZF7XrRRVX2edmD2wnepb/svO6li3XwDW396y6sbDYyNCGOTq+z/6JRDXrp/lFUfq3Frih8k7WMn3xVZXS35JVeNJULBGdqQnRHFn0NtMOfQGn5z6FM5BF9E/KYqMxChiwrUNF2haa9Fr0KsWGWNwHKxibX6pFeqOUjbuKaO61hotkBAVSnaGFerDM3pxWno8SQ0nNrtCXQ28eC5U7LPWfo1Obvs5nXFgB/z1TGtc/VX/PO5Lpayylm37y9my72j3z5Z95U26pfrERRw98ZtqfQFU1tQ1dqu4h3nx4Zomrx8fGdoY3P0To8hMjCIzybrtGx9J8J7V8PeJcNoVuiyg0q4b5ZniiiOsc/Wrr3OUsj6/lJJKa2bHiNAghvWL56qx/cnO6MXw9F5kJEb69qrCL2ZbywJe8WbXhzxA8knW8oMf3g1rXoWR1zfZHR8VyuisREZnHT1ha4xh36FqtuwrZ5ur5b9lXzlf7yo+bjhdkEBaQiSZiVH8aGgqmYlW10r/pCgyEqJa/zXQuCxgP10WULVJgz5AVdbUsbHgEOscpY0tdvd+9ZNTYzl/aB9OS+9FdkY8J6fGdtnQL484Vll988OvtpYF9JXRN1uTpX38f9bKTAlZrR4uIvSNj6RvfCTnDOrduL2u3snu4kp27C8nKiyE/klR9OsV2fHPdOlDzS+solQztOsmANTVO9lWWOE6WVrKWkfTfvX0hMjGVnqX9Kt3Vk2l1YVSX2NdtRoR59v3L8uHOT+A1GFw/Qc+m1agRbu+gHmTrWUBL/yDvbWobkO7bgKA02koPlzDvrJq9h2qZl9ZFbuLK1mfX8qGgqP96r2iQslO78WPhvZheEY8p6X3OnrBUHe15AE4uBOue9/3IQ8Qnw4XPG5Nj7BiTuemWuis6jLrwihdFlC1gwZ9D1BT52R/eTX7yqrZW1ZN4SHr1gp0629/eXWTyaPAmvnv1LSj/erZ6fFkJkb1rNn6di2DlXOtZQEHnGVfHdlXwuYPYOkjcNIPoXfHhnV2WsPCKj/7RJcFVB7ToLfZ4SN1TcLbuq1iX9kR9h2ybg9UHDnueZGhwfSNj6BPfARjByTSx3W/T1xE4/3k6B4+XtqTZQF9pWH5wTljrZOgNy2F4K6/orGJLYuthVX+59e6LKBqFw36LmKMoaSylr1lVUdb4A1/bi3xhkv63SW4Lt/vGx/BqWnx9ImLpE98OH3iIxuDPC4ipGe1zDviw1lW6/XGT7tH67Vh+cH511jLD55zj+/eW5cFVJ2gQe9FTqdhfq6DuV/uIr+kqtnhdL1jI0iNj+DElBjGn5TcpBXeNz6C1LgIvQwdrJEu696As37j2bKAvjJksjVuffkfrUnP0k7v+vfszMIqSqFB7zUb8su4b+FG1jlKGZHZi4mnpDYJ777xkSTHhHW/eVK6o4oiWPQL6HManHW33dUc74LHYfeXVhfOz5d3/fKDjQurPNixhVVUwNOg76TSyhr++PFW3liZR1J0OH+ans2lw9P8v1ulqzS0Xo8cgsve756t18heMOVZa/nBpY/ApP/Xde/VuLCK/csCqp5Lg76DGrppHv9oC4eq67jhjAHcOXEgcRE+PkHnb9a/DVs+cC0LOMTualrWsPzgijnWBVxdsfygMbDodtfCKr5bFlD5Hw36DtiQX8b9Czey1lHK6KwEHp4yjFP62jC+29+U5cPiuzu/LKCvdPXyg128LKAKHNph3A6llTXc994GJj/3H/JLqvjT9Gzm//wHGvLeYAwsvB2cddYEXT2h9dqw/GBZvrX8oDd5cVlApbRF7wGn0/DP1Q4e/2grpZU1XH9GFr+ceLJ203jTqr/Brs/hoqcg8QS7q/Fc5lgYf4c1D4+3lh901lu/Etq5LKBSLdGgb8PGgjLue8+9m2astuC9raH1euJ5MOpndlfTfhPuge2fwqKZ1vTJnV1+8KtnwJHT7LKASnWEdt20oKGb5pJnrW6ap36i3TRdwlkP786wRtdMebZntl5DwuGyv0LlQfj3rzr3WoWb4PP/B6dcAqf9xDv1qYDnUdCLyCQR2SoiO0TkuMvyRKS/iCwVkfUiskxE0t321YvIWtffIm8W3xWcTsP8VQ7OffIL3sjJ4/ozsvjsrrO5/PR0HTLZFf77Z8hfaZ1wjOtndzUd1+dUmDALNr0LGxZ07DXqauBfP7emHb746Z75pae6pTa7bkQkGHgOmAjkA6tEZJEx5lu3w54A5hljXhWRc4HfA9e49lUZY4Z7t+yusbHAGk3zTV4po/pb3TRD+mkLvsvs2+hqvU6GU6fZXU3njb8Ttn0E//419B8PcX3b9/wvHnctrPKGbxZWUQHDkxb9GGCHMWaXMaYGeAuYcswxQ4DPXPc/b2Z/t1ZWWcvvFm5k8rP/wXGwkienZfPPGT/QkO9KdUesK0sjE+DiP/lH6zU4xBqFU3fEGv/enrUeHKvgP0/B8Ktg8EVdV6MKSJ4EfRrgcHuc79rmbh1wuev+ZUCsiCS5HkeISK6IrBCRS5t7AxG5xXVMblFRkefVd1LDRU/nPrmM11Z8z7U/yGLprycwdaR203S5ZbOhcCNMfsa/Wq/JJ1nj63csgdWvePacmkp4bwbEpcGk33dpeSoweWvUzV3AsyJyPbAcKADqXfv6G2MKROQE4DMR2WCM2en+ZGPMXGAuWCtMeammVm0sKON3CzeyxtVN8w/tpvEdx0r479PWsoCDLrC7Gu8bfZN1dW/D8oOJA1o/fsmDuiyg6lKetOgLgAy3x+mubY2MMXuMMZcbY0YA/+faVuq6LXDd7gKWASM6XXUnuHfT5B2s5Ilp1mgaDXkfqTlsjbLx59ZrUBBcOse66Ou9W62RRS3ZtQxWvmAtC3jC2T4rUQUWT4J+FTBQRAaISBhwBdBk9IyIJItIw2vdA7zk2p4gIuENxwDjAfeTuD7jdBr+2Uw3zY9HpvfsxTl6miUPWssCXjrHnmUBfaVh+cG8r6z5cJrjvrCKLguoulCbXTfGmDoRuR34GAgGXjLGbBKRh4FcY8wiYALwexExWF03t7mefgrwgog4sb5UZh8zWscnNu0p43cLN7H6+xJG9k9g3pQxDO2nP5F9rnFZwP+1d1lAX8m+0ppXf+nDzS8/2N0WVlF+S0x7Rgb4wKhRo0xubq5XXqusqpanPtnKP1Z8T0JUGLMuGMzU07UFb4uqUnj+DAiNghlfdv0c7t1FRRHMGWdd4eq+/OCWf8NbP4X/uQvOu9/eGpVfEJHVxphmV+nxyykQnE7DO2vymf3hFkoqa7hmXH9+9aNBxEfq3DS2+WgWlO+zWq+BEvJgLT94ydPw9tXWqlTn3OtaFvAO6yKrs39rd4UqAPhd0Lt305ye2Yt5N2o3je02fwDr3nQtCzjS7mp875RLXMsPPmFNevafP+mygMqn/CboD1XX8tQn25j39W4SosL4449Ps6+bprrMumhGQfUhV+u1my4L6CsNyw++NhWqSnRZQOVTfhP01bX1vPtNAVeP68+vJw4iPsqmbpqCNfDiuUD3Ovdhq+Cw7rssoK+4Lz+oywIqH/OboO8dG8Hyu8+xvx9+52eAgUmPW5fEK+g3onsvC+grJ54L1y+2Rt/0hIVVlN/wqySyPeTBmkc8eRCMm2F3Jao7yhpvdwUqAOl89N7kdFqX92eMsbsSpZRqpEHvTQe2QXUpZI6zuxKllGqkQe9NjhzrNmOsvXUopZQbDXpvcqyEyERr7hKllOomNOi9ybHCas3rXPZKqW5Eg95bDhdbc4rriVilVDejQe8t+SutWz0Rq5TqZjTovSVvBQSFWhcHKaVUN6JB7y2OldA3O7BmZlRK9Qga9N5QVwN71uiwSqVUt6RB7w371kNdtZ6IVUp1Sxr03qAXSimlujENem/IWwG9MiGur92VKKXUcTToO8sYq0WvrXmlVDelQd9Zpd9DRaEGvVKq29Kg7yyH60IpDXqlVDelQd9ZjhwIi9H1P5VS3ZYGfWfl5UD6KF0aTinVbWnQd0b1Idi/SbttlFLdmgZ9ZxTkgnFq0CulujUN+s5wrATE6rpRSqluSoO+Mxw51knYiHi7K1FKqRZp0HeUsx4cq3R+G6VUt6dB31H7N0NNufbPK6W6PY+CXkQmichWEdkhIrOa2d9fRJaKyHoRWSYi6W77rhOR7a6/67xZvK0cK6xbDXqlVDfXZtCLSDDwHHABMAS4UkSGHHPYE8A8Y8xpwMPA713PTQQeAMYCY4AHRCTBe+XbyLESontDQpbdlSilVKs8adGPAXYYY3YZY2qAt4ApxxwzBPjMdf9zt/3nA58aYw4aY0qAT4FJnS+7G3DkQOZYELG7EqWUapUnQZ8GONwe57u2uVsHXO66fxkQKyJJHj4XEblFRHJFJLeoqMjT2u1TXgglu7XbRinVI3jrZOxdwNki8g1wNlAA1Hv6ZGPMXGPMKGPMqJSUFC+V1IV0oRGlVA8S4sExBUCG2+N017ZGxpg9uFr0IhIDTDXGlIpIATDhmOcu60S93YMjB4LDrcXAlVKqm/OkRb8KGCgiA0QkDLgCWOR+gIgki0jDa90DvOS6/zHwIxFJcJ2E/ZFrW8/myIF+IyAk3O5KlFKqTW0GvTGmDrgdK6A3A/ONMZtE5GERmew6bAKwVUS2AanAY67nHgQewfqyWAU87NrWc9VWw5611olYpZTqATzpusEYsxhYfMy237ndXwAsaOG5L3G0hd/z7fkGnLXaP6+U6jH0ytj2ajgRm65THyilegYN+vZy5EDiiRDTA0YHKaUUGvTtY4wV9Npto5TqQTTo2+PgLqgs1hOxSqkeRYO+PfJ0IjOlVM+jQd8ejhxrkZHkQXZXopRSHtOgbw9HjjXaJkg/NqVUz6GJ5amqEijaot02SqkeR4PeU/m51q2eiFVK9TAa9J7KWwESDP1Ot7sSpZRqFw16TzlyoM8wCI+xuxKllGoXDXpP1NdCwWrIGGd3JUop1W4a9J4o3Ai1lZCh89sopXoeDXpPOFZat5naoldK9Twa9J7IWwFxaRCfbnclSinVbhr0nnCs1G4bpVSPpUHflrJ8OJSvJ2KVUj2WBn1bGhYa0Ra9UqqH0qBvi2MlhEZBn1PtrkQppTpEg74teSsgbSQEh9pdiVJKdYgGfWtqDsO+Ddpto5Tq0TToW1OwBky9nohVSvVoGvStcbhWlEofZW8dSinVCRr0rXGstFaTikq0uxKllOowDfqWOJ3W0Eqdf14p1cNp0LfkwDaoLtMVpZRSPZ4GfUsaL5TSE7FKqZ5Ng74ljhyITISkE+2uRCmlOkWDviWOHKvbRsTuSpRSqlM06Jtz+AAU79ATsUopv6BB35yGhUb0RKxSyg94FPQiMklEtorIDhGZ1cz+TBH5XES+EZH1InKha3uWiFSJyFrX31+9/Q/oEo4cCAqFfiPsrkQppTotpK0DRCQYeA6YCOQDq0RkkTHmW7fD7gPmG2OeF5EhwGIgy7VvpzFmuFer7mqOHOibDaGRdleilFKd5kmLfgywwxizyxhTA7wFTDnmGAPEue7HA3u8V6KP1dVYc9xot41Syk94EvRpgMPtcb5rm7sHgatFJB+rNT/Tbd8AV5fOFyLyP829gYjcIiK5IpJbVFTkefVdYe86qD+iJ2KVUn7DWydjrwReMcakAxcC/xCRIGAvkGmMGQH8CnhDROKOfbIxZq4xZpQxZlRKSoqXSuqgxgulNOiVUv7Bk6AvADLcHqe7trm7EZgPYIz5GogAko0xR4wxxa7tq4GdwMmdLbpLOXKgV3+I7WN3JUop5RWeBP0qYKCIDBCRMOAKYNExx+QB5wGIyClYQV8kIimuk7mIyAnAQGCXt4r3OmOOXiillFJ+os1RN8aYOhG5HfgYCAZeMsZsEpGHgVxjzCLg18CLIvJLrBOz1xtjjIicBTwsIrWAE5hhjDnYZf+azir9HioKdUUppZRfaTPoAYwxi7FOsrpv+53b/W+B8c087x3gnU7W6Dt5rv75TJ3ITCnlP/TKWHeOHAiLhd5D7K5EKaW8RoPenWOltWxgULDdlSillNdo0DeoPgT7N+mJWKWU39Ggb1CQC8apJ2KVUn5Hg75BXg4gkD7a7kqUUsqrNOgbOHIgdShEHHfhrlJK9Wga9ADOesjP1f55pZRf0qAH2P8t1JRr0Cul/JIGPbhNZKYnYpVS/keDHqwTsTGpkJBldyVKKeV1GvTgmshsDIjYXYlSSnmdBn35Pmsyswyd30Yp5Z806HWhEaWUn9Ogd6yE4HDoe5rdlSilVJfQoM9bAWmnQ0i43ZUopVSXCOygr62yFgPXYZVKKT8W2EG/Zy04a/VErFLKrwV20DtWWLfaoldK+bEAD/qVkHgiRCfbXYlSSnWZwA16Y6yhlbo+rFLKzwVu0BfvhMpi7bZRSvm9wA16vVBKKRUgAjjoV0BEPCQPsrsSpZTqUgEc9CshfQwEBe5HoJQKDIGZclUlULQFMrXbRinl/wIz6B2rrFvtn1dKBYAADfockGBIG2l3JUop1eUCN+j7nAph0XZXopRSXS7wgr6+FgpWa7eNUipgBF7QF26E2ko9EauUChgeBb2ITBKRrSKyQ0RmNbM/U0Q+F5FvRGS9iFzotu8e1/O2isj53iy+Q/L0QimlVGAJaesAEQkGngMmAvnAKhFZZIz51u2w+4D5xpjnRWQIsBjIct2/AhgK9AOWiMjJxph6b/9DPObIgbg0iE+3rQSllPIlT1r0Y4Adxphdxpga4C1gyjHHGCDOdT8e2OO6PwV4yxhzxBjzHbDD9Xr2ceRoa14pFVA8Cfo0wOH2ON+1zd2DwNUiko/Vmp/ZjuciIreISK6I5BYVFXlYegeU5cOhAg16pVRA8dbJ2CuBV4wx6cCFwD9ExOPXNsbMNcaMMsaMSklJ8VJJzWiYyExPxCqlAkibffRAAZDh9jjdtc3djcAkAGPM1yISASR7+FzfycuB0ChIHWZbCUop5WuetLpXAQNFZICIhGGdXF10zDF5wHkAInIKEAEUuY67QkTCRWQAMBBY6a3i282RY10NGxxqWwlKKeVrbQa9MaYOuB34GNiMNbpmk4g8LCKTXYf9GrhZRNYBbwLXG8smYD7wLfARcJttI26OVMC+Ddo/r5QKOJ503WCMWYx1ktV92+/c7n8LjG/huY8Bj3WiRu/YswZMvQa9UirgBM6VsY0rSo22tw6llPKxwAn6vBxIGQyRCXZXopRSPhUYQe90Qv5KXQhcKRWQAiPoD2yF6jLIGGd3JUop5XOBEfQOnchMKRW4AiToV0JUEiSdaHclSinlcx4Nr+zx8lZYrXkRuytRqtuqra0lPz+f6upqu0tRrYiIiCA9PZ3QUM8v/PT/oD98AA7uhNOvsbsSpbq1/Px8YmNjycrKQrRR1C0ZYyguLiY/P58BAwZ4/Dz/77pp7J/XE7FKtaa6upqkpCQN+W5MREhKSmr3r67ACPqgUOg33O5KlOr2NOS7v478bxQAQb/SCvnQSLsrUUopW/h30NcdgYI1OqxSqR6gtLSUOXPmdOi5F154IaWlpd4tyI/4d9DvXQ/1R/SKWKV6gNaCvq6urtXnLl68mF69enVBVZ1jjMHpdNpdhp+PunGssG61Ra9Uuzz0/ia+3XPIq685pF8cD1wytMX9s2bNYufOnQwfPpyJEydy0UUXcf/995OQkMCWLVvYtm0bl156KQ6Hg+rqau644w5uueUWALKyssjNzaWiooILLriAM888k6+++oq0tDQWLlxIZGTTrtv333+fRx99lJqaGpKSknj99ddJTU2loqKCmTNnkpubi4jwwAMPMHXqVD766CPuvfde6uvrSU5OZunSpTz44IPExMRw1113ATBs2DA++OADAM4//3zGjh3L6tWrWbx4MbNnz2bVqlVUVVXx4x//mIceegiAVatWcccdd3D48GHCw8NZunQpF110Ec888wzDhw8H4Mwzz+S5554jOzu7w5+9nwd9DvTqD7F97K5EKdWG2bNns3HjRtauXQvAsmXLWLNmDRs3bmwcSvjSSy+RmJhIVVUVo0ePZurUqSQlJTV5ne3bt/Pmm2/y4osv8pOf/IR33nmHq6++uskxZ555JitWrEBE+Nvf/sYf/vAHnnzySR555BHi4+PZsGEDACUlJRQVFXHzzTezfPlyBgwYwMGDB9v8t2zfvp1XX32VceOs0X6PPfYYiYmJ1NfXc95557F+/XoGDx7M9OnTefvttxk9ejSHDh0iMjKSG2+8kVdeeYWnn36abdu2UV1d3amQB38OemOsE7EnTLC7EqV6nNZa3r40ZsyYJuPFn3nmGd59910AHA4H27dvPy7oBwwY0NgaHjlyJLt37z7udfPz85k+fTp79+6lpqam8T2WLFnCW2+91XhcQkIC77//PmeddVbjMYmJiW3W3b9//8aQB5g/fz5z586lrq6OvXv38u233yIi9O3bl9GjranT4+LiAJg2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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fit.history['accuracy'], label='train accuracy')\n",
    "plt.plot(fit.history['val_accuracy'], label='val accuracy')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "0a8d626d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-16T05:47:12.617024Z",
     "iopub.status.busy": "2021-08-16T05:47:12.615595Z",
     "iopub.status.idle": "2021-08-16T05:47:19.505613Z",
     "shell.execute_reply": "2021-08-16T05:47:19.504696Z",
     "shell.execute_reply.started": "2021-08-16T04:55:48.222802Z"
    },
    "papermill": {
     "duration": 8.065534,
     "end_time": "2021-08-16T05:47:19.505775",
     "exception": false,
     "start_time": "2021-08-16T05:47:11.440241",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20/20 [==============================] - 7s 328ms/step - loss: 0.3233 - accuracy: 0.9183\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.3232859969139099, 0.9182692170143127]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.evaluate(test_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "96acda4e",
   "metadata": {
    "papermill": {
     "duration": 2.053401,
     "end_time": "2021-08-16T05:47:22.715855",
     "exception": false,
     "start_time": "2021-08-16T05:47:20.662454",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 2490.272696,
   "end_time": "2021-08-16T05:47:27.021874",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2021-08-16T05:05:56.749178",
   "version": "2.3.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}