{
 "nbformat": 4,
 "nbformat_minor": 0,
 "metadata": {
  "colab": {
   "provenance": [],
   "gpuType": "T4"
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3"
  },
  "language_info": {
   "name": "python"
  },
  "accelerator": "GPU"
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Data Access and File Verification"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "from google.colab import drive\n",
    "drive.mount('/content/drive')"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "U7UVgM_Ou476",
    "outputId": "3e3c6827-8414-4a3a-ab8e-db1139c6024c"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
     ]
    }
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "J3g07eDFqzmY",
    "outputId": "6f35fc9d-6ba0-4789-bf19-1b961d6172f2"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "print(os.path.exists(\"/content/drive/MyDrive/PlantPathology_Split.zip\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Dataset Extraction and Directory Check"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "!unzip -q \"/content/drive/MyDrive/PlantPathology_Split.zip\" -d \"/content/\""
   ],
   "metadata": {
    "id": "HDCNqa4xwaq5",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "outputId": "81b88e61-a939-4a6a-db1b-fff46308538d"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "replace /content/PlantPathology_Split/test/complex/8052c7272b3b3f5c.jpg? [y]es, [n]o, [A]ll, [N]one, [r]ename: "
     ]
    }
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "!ls \"/content/PlantPathology_Split\""
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "241jCc1XyfV6",
    "outputId": "9dd87c12-cad5-4db8-ecd1-9773a782c315"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "test  train  valid\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Dataset Loading and Configuration"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Load libraries\n",
    "import os\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras import layers, models\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Image settings\n",
    "IMG_SIZE = (512, 512)\n",
    "BATCH_SIZE = 32\n",
    "\n",
    "# Required five classes\n",
    "selected_classes = [\n",
    "    \"frog_eye_leaf_spot\",\n",
    "    \"healthy\",\n",
    "    \"powdery_mildew\",\n",
    "    \"rust\",\n",
    "    \"scab\"\n",
    "]\n",
    "\n",
    "train_ds = tf.keras.utils.image_dataset_from_directory(\n",
    "    \"/content/PlantPathology_Split/train\",\n",
    "    class_names=selected_classes,\n",
    "    image_size=IMG_SIZE,\n",
    "    batch_size=BATCH_SIZE,\n",
    "    label_mode=\"int\"\n",
    ")\n",
    "\n",
    "valid_ds = tf.keras.utils.image_dataset_from_directory(\n",
    "    \"/content/PlantPathology_Split/valid\",\n",
    "    class_names=selected_classes,\n",
    "    image_size=IMG_SIZE,\n",
    "    batch_size=BATCH_SIZE,\n",
    "    label_mode=\"int\"\n",
    ")\n",
    "\n",
    "test_ds = tf.keras.utils.image_dataset_from_directory(\n",
    "    \"/content/PlantPathology_Split/test\",\n",
    "    class_names=selected_classes,\n",
    "    image_size=IMG_SIZE,\n",
    "    batch_size=BATCH_SIZE,\n",
    "    label_mode=\"int\",\n",
    "    shuffle=False\n",
    ")\n",
    "\n",
    "# Display selected classes\n",
    "class_names = train_ds.class_names\n",
    "\n",
    "print(\"Classes:\")\n",
    "print(class_names)"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "MFt4tEfiynlQ",
    "outputId": "de012e38-ab92-473c-a54e-89cbafe78b73"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Found 7307 files belonging to 5 classes.\n",
      "Found 1564 files belonging to 5 classes.\n",
      "Found 1567 files belonging to 5 classes.\n",
      "Classes:\n",
      "['frog_eye_leaf_spot', 'healthy', 'powdery_mildew', 'rust', 'scab']\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Dataset Pipeline Optimisation and Data Augmentation"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "AUTOTUNE = tf.data.AUTOTUNE\n",
    "\n",
    "train_ds = train_ds.prefetch(AUTOTUNE)\n",
    "valid_ds = valid_ds.prefetch(AUTOTUNE)\n",
    "test_ds = test_ds.prefetch(AUTOTUNE)"
   ],
   "metadata": {
    "id": "T28L_smdztQU"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "source": [
    "data_augmentation = tf.keras.Sequential([\n",
    "    layers.RandomFlip(\"horizontal\"),\n",
    "    layers.RandomRotation(0.05)\n",
    "])\n"
   ],
   "metadata": {
    "id": "5uyE7gahE1FM"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Improved CNN Model Architecture"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Build the Improved CNN model\n",
    "num_classes = len(class_names)\n",
    "\n",
    "improved_cnn_model = models.Sequential([\n",
    "    layers.Rescaling(1./255, input_shape=(512, 512, 3)),\n",
    "\n",
    "    layers.Conv2D(32, 3, activation='relu'),\n",
    "    layers.MaxPooling2D(),\n",
    "\n",
    "    layers.Conv2D(64, 3, activation='relu'),\n",
    "    layers.MaxPooling2D(),\n",
    "\n",
    "    layers.Conv2D(128, 3, activation='relu'),\n",
    "    layers.MaxPooling2D(),\n",
    "\n",
    "    layers.Flatten(),\n",
    "\n",
    "    layers.Dense(128, activation='relu'),\n",
    "    layers.Dropout(0.5),\n",
    "\n",
    "    layers.Dense(num_classes, activation='softmax')\n",
    "])\n",
    "\n",
    "improved_cnn_model.summary()"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 536
    },
    "id": "m-SN90ngz6xW",
    "outputId": "cd060abd-c086-44d0-f86c-3bfae5e55cc6"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "/usr/local/lib/python3.12/dist-packages/keras/src/layers/preprocessing/data_layer.py:95: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
      "  super().__init__(**kwargs)\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "\u001b[1mModel: \"sequential_1\"\u001b[0m\n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_1\"</span>\n",
       "</pre>\n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                   \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape          \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ rescaling (\u001b[38;5;33mRescaling\u001b[0m)           │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m, \u001b[38;5;34m512\u001b[0m, \u001b[38;5;34m3\u001b[0m)    │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d (\u001b[38;5;33mConv2D\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m510\u001b[0m, \u001b[38;5;34m510\u001b[0m, \u001b[38;5;34m32\u001b[0m)   │           \u001b[38;5;34m896\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m)    │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m255\u001b[0m, \u001b[38;5;34m255\u001b[0m, \u001b[38;5;34m32\u001b[0m)   │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m253\u001b[0m, \u001b[38;5;34m253\u001b[0m, \u001b[38;5;34m64\u001b[0m)   │        \u001b[38;5;34m18,496\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m)  │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m126\u001b[0m, \u001b[38;5;34m126\u001b[0m, \u001b[38;5;34m64\u001b[0m)   │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m124\u001b[0m, \u001b[38;5;34m124\u001b[0m, \u001b[38;5;34m128\u001b[0m)  │        \u001b[38;5;34m73,856\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m)  │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m62\u001b[0m, \u001b[38;5;34m62\u001b[0m, \u001b[38;5;34m128\u001b[0m)    │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ flatten (\u001b[38;5;33mFlatten\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m492032\u001b[0m)         │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense (\u001b[38;5;33mDense\u001b[0m)                   │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m)            │    \u001b[38;5;34m62,980,224\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dropout (\u001b[38;5;33mDropout\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m)            │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense_1 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m)              │           \u001b[38;5;34m645\u001b[0m │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\"> Layer (type)                    </span>┃<span style=\"font-weight: bold\"> Output Shape           </span>┃<span style=\"font-weight: bold\">       Param # </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ rescaling (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Rescaling</span>)           │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">512</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">512</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3</span>)    │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">510</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">510</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>)   │           <span style=\"color: #00af00; text-decoration-color: #00af00\">896</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>)    │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">255</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">255</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>)   │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">253</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">253</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>)   │        <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>)  │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">126</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">126</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>)   │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">124</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">124</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>)  │        <span style=\"color: #00af00; text-decoration-color: #00af00\">73,856</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>)  │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">62</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">62</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>)    │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">492032</span>)         │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                   │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>)            │    <span style=\"color: #00af00; text-decoration-color: #00af00\">62,980,224</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>)            │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>)              │           <span style=\"color: #00af00; text-decoration-color: #00af00\">645</span> │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
       "</pre>\n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m63,074,117\u001b[0m (240.61 MB)\n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">63,074,117</span> (240.61 MB)\n",
       "</pre>\n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m63,074,117\u001b[0m (240.61 MB)\n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">63,074,117</span> (240.61 MB)\n",
       "</pre>\n"
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
       "</pre>\n"
      ]
     },
     "metadata": {}
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Model Compilation and Early Stopping"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Compile the Improved CNN model\n",
    "improved_cnn_model.compile(\n",
    "    optimizer='adam',\n",
    "    loss='sparse_categorical_crossentropy',\n",
    "    metrics=['accuracy']\n",
    ")"
   ],
   "metadata": {
    "id": "syzhnwu-z8Sv"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "source": [
    "# Stop training when validation loss stops improving\n",
    "early_stopping = tf.keras.callbacks.EarlyStopping(\n",
    "    monitor='val_loss',\n",
    "    patience=5,\n",
    "    restore_best_weights=True\n",
    ")"
   ],
   "metadata": {
    "id": "i9zcvYUn71Ma"
   },
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. Model Training"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "history_improved_cnn = improved_cnn_model.fit(\n",
    "    train_ds,\n",
    "    validation_data=valid_ds,\n",
    "    epochs=30,\n",
    "    callbacks=[early_stopping]\n",
    ")"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "l9YL4e4f0ZWI",
    "outputId": "7caa5bf7-e593-4a37-9171-429e9d7913a6"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Epoch 1/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m102s\u001b[0m 363ms/step - accuracy: 0.3375 - loss: 1.9297 - val_accuracy: 0.4591 - val_loss: 1.3526\n",
      "Epoch 2/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 286ms/step - accuracy: 0.4448 - loss: 1.3127 - val_accuracy: 0.4974 - val_loss: 1.1589\n",
      "Epoch 3/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 288ms/step - accuracy: 0.5025 - loss: 1.2051 - val_accuracy: 0.4942 - val_loss: 1.1986\n",
      "Epoch 4/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 279ms/step - accuracy: 0.5632 - loss: 1.1115 - val_accuracy: 0.6042 - val_loss: 1.0030\n",
      "Epoch 5/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m83s\u001b[0m 283ms/step - accuracy: 0.6098 - loss: 0.9944 - val_accuracy: 0.6119 - val_loss: 0.9966\n",
      "Epoch 6/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 278ms/step - accuracy: 0.6514 - loss: 0.8712 - val_accuracy: 0.6573 - val_loss: 0.8890\n",
      "Epoch 7/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 286ms/step - accuracy: 0.6929 - loss: 0.7877 - val_accuracy: 0.6445 - val_loss: 0.9438\n",
      "Epoch 8/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 278ms/step - accuracy: 0.7353 - loss: 0.6848 - val_accuracy: 0.6637 - val_loss: 1.0167\n",
      "Epoch 9/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m65s\u001b[0m 282ms/step - accuracy: 0.7728 - loss: 0.5859 - val_accuracy: 0.6471 - val_loss: 1.0886\n",
      "Epoch 10/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 279ms/step - accuracy: 0.8166 - loss: 0.4834 - val_accuracy: 0.6522 - val_loss: 1.3027\n",
      "Epoch 11/30\n",
      "\u001b[1m229/229\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m83s\u001b[0m 284ms/step - accuracy: 0.8411 - loss: 0.4121 - val_accuracy: 0.6777 - val_loss: 1.1079\n"
     ]
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. Training and Validation Performance"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Plot training and validation results\n",
    "plt.figure(figsize=(12, 5))\n",
    "\n",
    "# Accuracy\n",
    "plt.subplot(1, 2, 1)\n",
    "\n",
    "plt.plot(\n",
    "    history_improved_cnn.history['accuracy'],\n",
    "    color='lightskyblue'\n",
    ")\n",
    "\n",
    "plt.plot(\n",
    "    history_improved_cnn.history['val_accuracy'],\n",
    "    color='lightgreen'\n",
    ")\n",
    "\n",
    "plt.title('Improved CNN Model Accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(['Training', 'Validation'])\n",
    "\n",
    "# Loss\n",
    "plt.subplot(1, 2, 2)\n",
    "\n",
    "plt.plot(\n",
    "    history_improved_cnn.history['loss'],\n",
    "    color='lightskyblue'\n",
    ")\n",
    "\n",
    "plt.plot(\n",
    "    history_improved_cnn.history['val_loss'],\n",
    "    color='lightgreen'\n",
    ")\n",
    "\n",
    "plt.title('Improved CNN Model Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend(['Training', 'Validation'])\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 507
    },
    "id": "7FmxqaGeLUbY",
    "outputId": "05f01c29-6579-46af-b8d0-9b7ff0a0f485"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAzrtJREFUeJzs3Xl8VNX9//HXvTOTPZkkkARIAmHfBQVBXBAUZVEUcKu2BdRqbV1r7eLXarW18rW1fm211vbXVrSCCwiKG4ig4oKiCCj7TliysWRfJjP3/P4YGIlsCSSZLO/n45EHzJ1773xmJjM553PP+RzLGGMQERERERERERFpRHa4AxARERERERERkdZHSSkREREREREREWl0SkqJiIiIiIiIiEijU1JKREREREREREQanZJSIiIiIiIiIiLS6JSUEhERERERERGRRqeklIiIiIiIiIiINDolpUREREREREREpNEpKSUiIiIiIiIiIo1OSSkROSnbt2/HsiymT58e7lCatVN5HT/44AMsy+KDDz6o97hERESk6VN7rH6oPSYSPkpKiXzH9OnTsSyLL7/8MtyhtCh5eXncc8899OrVi5iYGGJjYxk0aBAPP/wwhYWFof1GjBiBZVmMHz/+iHMcajA89thjoW2HGgKWZbF8+fIjjpk6dSpxcXEnjO/BBx/Esixs22bnzp1H3F9cXEx0dDSWZXHbbbfV8lk3PU8//TSWZTF06NBwhyIiInJMao81DLXHwke/0yJHp6SUiDS4L774gn79+vG3v/2N8847j8cff5w///nPnH766fzv//4vV1999RHHvPnmm0dt1BzPgw8+eMqxRkZG8uKLLx6xfc6cOad87qZgxowZZGVlsWzZMjZv3hzucERERKSRqD0mIk2RklIiTZwxhoqKinCHcdIKCwuZOHEiLpeLFStW8P/+3//jlltu4ZZbbuFf//oXW7ZsYfjw4TWO6dixI0lJSTz00EO1fpyBAwfy5ptv8tVXX51SvOPGjTtqI2jmzJlccsklp3TucNu2bRuffvopjz/+OCkpKcyYMSPcIR1TWVlZuEMQEREJUXusdtQeE5G6UlJKpBYODTnOzs7m0ksvJS4ujvT0dP72t78B8M0333DBBRcQGxtLp06dmDlzZo3jDw3XXbJkCT/+8Y9p06YNCQkJTJ48mQMHDtTYNysri0svvZQFCxYwePBgoqOj+cc//gHA1q1bueqqq0hOTiYmJoazzjqLt956K3RsXl4ebrf7qI2HDRs2YFkWTz31VGhbYWEhd911F5mZmURGRtKtWzceffRRHMepcWxhYSFTp07F6/WSmJjIlClTagzxPp5//OMf7N69m8cff5xevXodcX9aWhq/+c1vamyLj4/nZz/7GW+88UatGzW33347SUlJp3x17rrrrmPlypWsX78+tC03N5fFixdz3XXXHfWY/Px8brzxRtLS0oiKimLAgAE899xzR+xXl9dx/fr1XHnllSQnJxMVFcXgwYOZN2/eKT23GTNmkJSUxCWXXMKVV155zKRUYWEhP/vZz8jKyiIyMpKMjAwmT57M3r17Q/tUVlby4IMP0qNHD6Kiomjfvj2TJk1iy5YtwLHrKxytZsOhz9eWLVsYN24c8fHxfP/73wfgo48+4qqrrqJjx45ERkaSmZnJz372s6N2DNavX8/VV19NSkoK0dHR9OzZk/vuuw+A999/H8uymDt37hHHzZw5E8uyWLp0aZ1eTxERaVxqj6k91hLaYyeyYsUKxo4dS0JCAnFxcVx44YV89tlnNfaprq7moYceonv37kRFRdGmTRvOPfdcFi5cGNonNzeX66+/noyMDCIjI2nfvj2XX34527dvb9D4RepKSSmRWgoEAowdO5bMzEz++Mc/kpWVxW233cb06dMZM2YMgwcP5tFHHyU+Pp7Jkyezbdu2I85x2223sW7dOh588EEmT57MjBkzmDBhAsaYGvtt2LCBa6+9losuuoi//OUvDBw4kLy8PM4++2wWLFjAT3/6U/7whz9QWVnJZZddFupop6Wlcf755/PKK68c8dgvv/wyLpeLq666CoDy8nLOP/98XnjhBSZPnsxf//pXzjnnHO69917uvvvu0HHGGC6//HL++9//8oMf/ICHH36YXbt2MWXKlFq9bvPmzSM6Oporr7yy1q81wJ133lmnRk1CQkKdG05HM3z4cDIyMmo0ZF9++WXi4uKOemWuoqKCESNG8N///pfvf//7/OlPf8Lr9TJ16lT+8pe/hPary+u4Zs0azjrrLNatW8evf/1r/vznPxMbG8uECROOmlSprRkzZjBp0iQiIiK49tpr2bRpE1988UWNfUpLSznvvPN48sknufjii/nLX/7CLbfcwvr169m1axcQ/CxceumlPPTQQwwaNIg///nP3HnnnRQVFbF69eqTis3v9zN69GhSU1N57LHHuOKKKwCYNWsW5eXl/OQnP+HJJ59k9OjRPPnkk0yePLnG8V9//TVDhw5l8eLF3HTTTfzlL39hwoQJvPHGG0CwNkZmZuZRE3EzZsyga9euDBs27KRiFxGRxqP2mNpjzb09djxr1qzhvPPOY9WqVfzyl7/k/vvvZ9u2bYwYMYLPP/88tN+DDz7IQw89xMiRI3nqqae477776NixY43X/IorrmDu3Llcf/31PP3009xxxx2UlJSQnZ3dILGLnDQjIjU8++yzBjBffPFFaNuUKVMMYB555JHQtgMHDpjo6GhjWZZ56aWXQtvXr19vAPPb3/72iHMOGjTI+Hy+0PY//vGPBjCvv/56aFunTp0MYObPn18jrrvuussA5qOPPgptKykpMZ07dzZZWVkmEAgYY4z5xz/+YQDzzTff1Di+T58+5oILLgjd/v3vf29iY2PNxo0ba+z361//2rhcLpOdnW2MMea1114zgPnjH/8Y2sfv95vzzjvPAObZZ5899otpjElKSjIDBgw47j6HO//8803fvn2NMcY89NBDBjDLly83xhizbds2A5g//elPof3ff/99A5hZs2aZwsJCk5SUZC677LLQ/VOmTDGxsbEnfNzf/va3BjAFBQXmnnvuMd26dQvdd+aZZ5rrr7/eGGMMYG699dbQfU888YQBzAsvvBDa5vP5zLBhw0xcXJwpLi42xtTtdbzwwgtN//79TWVlZWib4zjm7LPPNt27dz/iub///vsnfH5ffvmlAczChQtD58vIyDB33nlnjf0eeOABA5g5c+YccQ7HcYwxxvznP/8xgHn88cePuc+xYjv0Hh7+fA99vn79618fcb7y8vIjtk2bNs1YlmV27NgR2jZ8+HATHx9fY9vh8RhjzL333msiIyNNYWFhaFt+fr5xu901Pq8iIhJ+ao+pPdbS2mNH+53+rgkTJpiIiAizZcuW0LY9e/aY+Ph4M3z48NC2AQMGmEsuueSY5zlw4MAR75FIU6WRUiJ18KMf/Sj0/8TERHr27ElsbGyNwpA9e/YkMTGRrVu3HnH8zTffjMfjCd3+yU9+gtvt5u23366xX+fOnRk9enSNbW+//TZDhgzh3HPPDW2Li4vj5ptvZvv27axduxaASZMm4Xa7efnll0P7rV69mrVr13LNNdeEts2aNYvzzjuPpKQk9u7dG/oZNWoUgUCAJUuWhB7X7Xbzk5/8JHSsy+Xi9ttvr9VrVlxcTHx8fK32/a5DV+dqW8vA6/Vy1113MW/ePFasWHFSjwnBIeObN2/miy++CP17rKHib7/9Nu3atePaa68NbfN4PNxxxx2Ulpby4Ycfhvarzeu4f/9+Fi9ezNVXX01JSUnofdm3bx+jR49m06ZN7N69u87PacaMGaSlpTFy5EgALMvimmuu4aWXXiIQCIT2e/XVVxkwYAATJ0484hyWZYX2adu27VF/Bw7tczIOf20OiY6ODv2/rKyMvXv3cvbZZ2OMCb3HBQUFLFmyhBtuuIGOHTseM57JkydTVVXF7NmzQ9tefvll/H4/P/jBD046bhERaVxqjwWpPfat5tIeO55AIMC7777LhAkT6NKlS2h7+/btue666/j4448pLi4Ggr/3a9asYdOmTUc9V3R0NBEREXzwwQdHTE0VaWqUlBKppaioKFJSUmps83q9ZGRkHNER93q9R/0D0L179xq34+LiaN++/RFzuzt37nzEsTt27KBnz55HbO/du3fofoC2bdty4YUX1hgy/vLLL+N2u5k0aVJo26ZNm5g/fz4pKSk1fkaNGgUE5+UfOm/79u2PWMb3aLEcTUJCAiUlJbXa97tOplFz5513kpiYeEq1DE4//XR69erFzJkzmTFjBu3ateOCCy446r47duyge/fu2HbNr9Pvvi+1fR03b96MMYb777//iPfmt7/9LfDte1NbgUCAl156iZEjR7Jt2zY2b97M5s2bGTp0KHl5eSxatCi075YtW+jXr99xz7dlyxZ69uyJ2+2uUxzH43a7ycjIOGJ7dnY2U6dOJTk5mbi4OFJSUjj//PMBKCoqAgh1OE4Ud69evTjzzDNrTOGbMWMGZ511Ft26dauvpyIiIg1I7TG1x46mObTHTqSgoIDy8vJj/n45jsPOnTsB+N3vfkdhYSE9evSgf//+/OIXv+Drr78O7R8ZGcmjjz7KO++8Q1paGsOHD+ePf/wjubm59RqzSH2ovx6FSAvncrnqtN18py5BXRw+OuRkfO973+P6669n5cqVDBw4kFdeeYULL7yQtm3bhvZxHIeLLrqIX/7yl0c9R48ePU4phkN69erFypUr8fl8RERE1Pn4O++8k//7v//joYce4oknnjjh/ocaTg8++OApX537+9//Tnx8PNdcc80RjZyGcqio6T333HPE1dlD6ppAWbx4MTk5Obz00ku89NJLR9w/Y8YMLr744roHexzHGjF1+Kisw0VGRh7xGgcCAS666CL279/Pr371K3r16kVsbCy7d+9m6tSpRxSArY3Jkydz5513smvXLqqqqvjss89qFJsVEZGmTe2xk6P2WN00RHusPg0fPpwtW7bw+uuv8+677/Kvf/2L//u//+OZZ54JjSS86667GD9+PK+99hoLFizg/vvvZ9q0aSxevJjTTz89bLGLfJeSUiKNaNOmTaHpUxAsKp2Tk8O4ceNOeGynTp3YsGHDEdsPrUrSqVOn0LYJEybw4x//ODRkfOPGjdx77701juvatSulpaWhK3HHe9xFixZRWlpa46rS0WI5mvHjx7N06VJeffXVGkOqa+vwRk1ti3neddddPPHEEzz00EMkJibW+TEh2Ah64IEHyMnJ4b///e8x9+vUqRNff/01juPUaCh9932p7et4aLi2x+M54XtTWzNmzCA1NTW0OtHh5syZw9y5c3nmmWeIjo6ma9euJyxW3rVrVz7//HOqq6trTH84XFJSEsARq9kculJZG9988w0bN27kueeeq1HY/PCVZeDb16w2Rda/973vcffdd/Piiy9SUVGBx+OpMY1CRERaPrXH1B4LR3vsRFJSUoiJiTnm75dt22RmZoa2JScnc/3113P99ddTWlrK8OHDefDBB2tMb+3atSs///nP+fnPf86mTZsYOHAgf/7zn3nhhRca5TmJ1Iam74k0on/+859UV1eHbv/973/H7/czduzYEx47btw4li1bVmPZ+rKyMv75z3+SlZVFnz59QtsTExMZPXo0r7zyCi+99BIRERFMmDChxvmuvvpqli5dyoIFC454rMLCQvx+f+hx/X4/f//730P3BwIBnnzyyVo951tuuYX27dvz85//nI0bNx5xf35+Pg8//PBxz3HXXXeRmJjI7373u1o95qGG0+uvv87KlStrdcx3de3alSeeeIJp06YxZMiQY+43btw4cnNza9SM8Pv9PPnkk8TFxYWmmtX2dUxNTWXEiBH84x//ICcn54jHKygoqNPzqKioYM6cOVx66aVceeWVR/zcdtttlJSUhJY3vuKKK1i1atVRV5U5dLX5iiuuYO/evUcdYXRon06dOuFyuUK1MA55+umnax37oaveh1/lNsbUWEUHgo244cOH85///OeIFWW+e4W8bdu2jB07lhdeeIEZM2YwZsyYGlesRUSk5VN7TO2xxm6P1YbL5eLiiy/m9ddfrzGVNC8vj5kzZ3LuueeSkJAAwL59+2ocGxcXR7du3aiqqgKCqzpWVlbW2Kdr167Ex8eH9hFpKjRSSqQR+Xw+LrzwQq6++mo2bNjA008/zbnnnstll112wmN//etf8+KLLzJ27FjuuOMOkpOTee6559i2bRuvvvrqEcOZr7nmGn7wgx/w9NNPM3r06COuUP3iF79g3rx5XHrppUydOpVBgwZRVlbGN998w+zZs9m+fTtt27Zl/PjxnHPOOfz6179m+/bt9OnThzlz5oTq+ZxIUlISc+fOZdy4cQwcOJAf/OAHDBo0CICvvvqKF198kWHDhh33HF6vlzvvvLPWBTbh22Hmq1atIjY2ttbHffccJ3LzzTfzj3/8g6lTp7J8+XKysrKYPXs2n3zyCU888USoqGhdXse//e1vnHvuufTv35+bbrqJLl26kJeXx9KlS9m1axerVq2q9XOYN28eJSUlx/wdO+uss0hJSWHGjBlcc801/OIXv2D27NlcddVV3HDDDQwaNIj9+/czb948nnnmGQYMGMDkyZN5/vnnufvuu1m2bBnnnXceZWVlvPfee/z0pz/l8ssvx+v1ctVVV/Hkk09iWRZdu3blzTffrFP9hV69etG1a1fuuecedu/eTUJCAq+++upR64P89a9/5dxzz+WMM87g5ptvpnPnzmzfvp233nrriIbw5MmTQ0ti//73v691PCIi0jKoPab2WGO3xw73n//8h/nz5x/1eT788MMsXLiQc889l5/+9Ke43W7+8Y9/UFVVxR//+MfQvn369GHEiBEMGjSI5ORkvvzyS2bPns1tt90GBEflHfod79OnD263m7lz55KXl8f3vve9k4pbpMGEa9k/kabqWEsQH20Z28OXyz1cp06daizTeuicH374obn55ptNUlKSiYuLM9///vfNvn37jnvs4bZs2WKuvPJKk5iYaKKiosyQIUPMm2++edR9i4uLTXR09BHL4x6upKTE3HvvvaZbt24mIiLCtG3b1px99tnmscceq7FU8r59+8wPf/hDk5CQYLxer/nhD39oVqxYUasliA/Zs2eP+dnPfmZ69OhhoqKiTExMjBk0aJD5wx/+YIqKikL7Hes1PXDggPF6vcddgvi7Di0rXNcliI+H7yxBbIwxeXl55vrrrzdt27Y1ERERpn///kd9XeryOm7ZssVMnjzZtGvXzng8HpOenm4uvfRSM3v27COe+/GWIB4/fryJiooyZWVlx9xn6tSpxuPxmL1794bivO2220x6erqJiIgwGRkZZsqUKaH7jTGmvLzc3HfffaZz587G4/GYdu3amSuvvLLGEsYFBQXmiiuuMDExMSYpKcn8+Mc/NqtXrz7i+R5vmei1a9eaUaNGmbi4ONO2bVtz0003mVWrVh31NVu9erWZOHFi6PPRs2dPc//99x9xzqqqKpOUlGS8Xq+pqKg45usiIiLho/aY2mPH09zaY8Z8+/t3rJ+dO3caY4z56quvzOjRo01cXJyJiYkxI0eONJ9++mmNcz388MNmyJAhJjEx0URHR5tevXqZP/zhD6Hfl71795pbb73V9OrVy8TGxhqv12uGDh1qXnnllePGKBIOljGnUP1PRGpl+vTpXH/99XzxxRcMHjw43OGItGp+v58OHTowfvx4/v3vf4c7HBERaSRqj4mIND2qKSUiIq3Ka6+9RkFBQY3i6SIiIiIi0vhUU0pERFqFzz//nK+//prf//73nH766aGipyIiIiIiEh4aKSUiIq3C3//+d37yk5+QmprK888/H+5wRERERERaPdWUEhERERERERGRRqeRUiIiIiLNyLRp0zjzzDOJj48nNTWVCRMmsGHDhhMeN2vWLHr16kVUVBT9+/fn7bffboRoRURERI5NSSkRERGRZuTDDz/k1ltv5bPPPmPhwoVUV1dz8cUXU1ZWdsxjPv30U6699lpuvPFGVqxYwYQJE5gwYQKrV69uxMhFREREamp10/ccx2HPnj3Ex8djWVa4wxEREZEmzBhDSUkJHTp0wLab5rW8goICUlNT+fDDDxk+fPhR97nmmmsoKyvjzTffDG0766yzGDhwIM8880ytHkdtKBEREamt2rahWt3qe3v27CEzMzPcYYiIiEgzsnPnTjIyMsIdxlEVFRUBkJycfMx9li5dyt13311j2+jRo3nttddq/ThqQ4mIiEhdnagN1eqSUvHx8UDwhUlISAhzNCIiItKUFRcXk5mZGWo/NDWO43DXXXdxzjnn0K9fv2Pul5ubS1paWo1taWlp5ObmHvOYqqoqqqqqQrcPDa5XG0pEREROpLZtqFaXlDo03DwhIUENKhEREamVpjpd7dZbb2X16tV8/PHH9X7uadOm8dBDDx2xXW0oERERqa0TtaGaZnEEERERETmu2267jTfffJP333//hFML27VrR15eXo1teXl5tGvX7pjH3HvvvRQVFYV+du7cWS9xi4iIiByipJSIiIhIM2KM4bbbbmPu3LksXryYzp07n/CYYcOGsWjRohrbFi5cyLBhw455TGRkZGhUlEZHiYiISENoddP3RERERJqzW2+9lZkzZ/L6668THx8fqgvl9XqJjo4GYPLkyaSnpzNt2jQA7rzzTs4//3z+/Oc/c8kll/DSSy/x5Zdf8s9//jNsz0NERERESaljCAQCVFdXhzsMqQcejweXyxXuMEREROrF3//+dwBGjBhRY/uzzz7L1KlTAcjOzq6x/PLZZ5/NzJkz+c1vfsP//M//0L17d1577bXjFkcXERGpb+pntxz11c+2zKGlVFqJ4uJivF4vRUVFRx2GbowhNzeXwsLCxg9OGkxiYiLt2rVrsoVqRUSkaTpRu6E10WshIiInS/3slul4/ezaths0Uuo7Dn1QUlNTiYmJURKjmTPGUF5eTn5+PgDt27cPc0QiIiIiIiKti/rZLUt99rOVlDpMIBAIfVDatGkT7nCknhyqr5Gfn09qaqqm8omIiIiIiDQS9bNbpvrqZ2v1vcMcmtsaExMT5kikvh16TzV/WUREREREpPGon91y1Uc/W0mpo9BQwpZH76mIiIiIiEj4qE/W8tTHe6qklIiIiIiIiIiINDolpeSYsrKyeOKJJ2q9/wcffIBlWVpRQUREREREROQo1M+uSUmpFsCyrOP+PPjggyd13i+++IKbb7651vufffbZ5OTk4PV6T+rxRERERERERJoC9bMbh1bfawFycnJC/3/55Zd54IEH2LBhQ2hbXFxc6P/GGAKBAG73id/6lJSUOsURERFBu3bt6nSMiIiIiIiISFOjfnbj0EipFqBdu3ahH6/Xi2VZodvr168nPj6ed955h0GDBhEZGcnHH3/Mli1buPzyy0lLSyMuLo4zzzyT9957r8Z5vzus0LIs/vWvfzFx4kRiYmLo3r078+bNC93/3WGF06dPJzExkQULFtC7d2/i4uIYM2ZMjQ+33+/njjvuIDExkTZt2vCrX/2KKVOmMGHChIZ8yURE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hxKRRKBQSkQGtbvuuourrrqKLVu2cP3113PddddRXV0NQHt7O4sWLSI3N5cNGzbw+9//nr/85S+9Gqaf/exn3HrrrXz1q19l69atPPvss4waNarX57jnnnu45pprePvtt/nsZz/L9ddfz/Hjx2P6OEVERET6knooEYkJIyIyQC1ZssQ4jmPS09N7vf3oRz8yxhgDmFtuuaXXPrNmzTJf+9rXjDHGPPTQQyY3N9e0tbX13P7cc88Z27ZNbW2tMcaY0tJS893vfvdDawDM9773vZ7329raDGBeeOGFPnucIiIiIn1JPZSIJArNlBKRAe2iiy7iZz/7Wa9teXl5Pf+fPXt2r9tmz57N5s2bAaiurmbSpEmkp6f33D537lw8z2Pnzp1YlsWxY8f49Kc//ZE1nH/++T3/T09PJysri/r6+o/7kERERET6nXooEUkECqVEZEBLT08/bSl4X0lNTT2r+/n9/l7vW5aF53n9UZKIiIhIn1APJSKJQDOlRGRQW7t27WnvV1VVAVBVVcWWLVtob2/vuf2NN97Atm3GjBlDZmYmw4cPZ/ny5TGtWURERCTe1EOJSCxopZSIDGhdXV3U1tb22ubz+SgoKADg97//PdOnT2fevHn85je/Yf369Tz88MMAXH/99dx9990sWbKEf/7nf6ahoYGvf/3r3HDDDRQVFQHwz//8z9xyyy0UFhZy2WWX0drayhtvvMHXv/712D5QERERkT6kHkpEEoFCKREZ0F588UVKSkp6bRszZgw7duwAold1efTRR/nHf/xHSkpK+N3vfse4ceMASEtL46WXXuL2229nxowZpKWlcdVVV3Hffff1fKwlS5bQ2dnJ//7f/5tvf/vbFBQUcPXVV8fuAYqIiIj0A/VQIpIILGOMiXcRIiL9wbIsnn76aa644op4lyIiIiIyYKiHEpFY0UwpERERERERERGJOYVSIiIiIiIiIiISczp9T0REREREREREYk4rpUREREREREREJOYUSomIiIiIiIiISMwplBIRERERERERkZhTKCUiIiIiIiIiIjGnUEpERERERERERGJOoZSIiIiIiIiIiMScQikREREREREREYk5hVIiIiIiIiIiIhJzCqVERERERERERCTm/n9Nfja9H6E3DwAAAABJRU5ErkJggg==\n"
     },
     "metadata": {}
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. Epoch-by-Epoch Results"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Create a table with the results from each completed epoch\n",
    "\n",
    "import pandas as pd\n",
    "\n",
    "improved_cnn_results = pd.DataFrame({\n",
    "    'Epoch': range(\n",
    "        1,\n",
    "        len(history_improved_cnn.history['accuracy']) + 1\n",
    "    ),\n",
    "    'Training Accuracy': history_improved_cnn.history['accuracy'],\n",
    "    'Validation Accuracy': history_improved_cnn.history['val_accuracy'],\n",
    "    'Training Loss': history_improved_cnn.history['loss'],\n",
    "    'Validation Loss': history_improved_cnn.history['val_loss']\n",
    "})\n",
    "\n",
    "improved_cnn_results.round(4)"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 394
    },
    "id": "zLG9Df2j3cp3",
    "outputId": "a39f7bd4-0052-44d4-b46a-a638e761304d"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "    Epoch  Training Accuracy  Validation Accuracy  Training Loss  \\\n",
       "0       1             0.3375               0.4591         1.9297   \n",
       "1       2             0.4448               0.4974         1.3127   \n",
       "2       3             0.5025               0.4942         1.2051   \n",
       "3       4             0.5632               0.6042         1.1115   \n",
       "4       5             0.6098               0.6119         0.9944   \n",
       "5       6             0.6514               0.6573         0.8712   \n",
       "6       7             0.6929               0.6445         0.7877   \n",
       "7       8             0.7353               0.6637         0.6848   \n",
       "8       9             0.7728               0.6471         0.5859   \n",
       "9      10             0.8166               0.6522         0.4834   \n",
       "10     11             0.8411               0.6777         0.4121   \n",
       "\n",
       "    Validation Loss  \n",
       "0            1.3526  \n",
       "1            1.1589  \n",
       "2            1.1986  \n",
       "3            1.0030  \n",
       "4            0.9966  \n",
       "5            0.8890  \n",
       "6            0.9438  \n",
       "7            1.0167  \n",
       "8            1.0886  \n",
       "9            1.3027  \n",
       "10           1.1079  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-c4b531d4-3949-44a3-820f-bb53ad5dedab\" class=\"colab-df-container\">\n",
       "    <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Epoch</th>\n",
       "      <th>Training Accuracy</th>\n",
       "      <th>Validation Accuracy</th>\n",
       "      <th>Training Loss</th>\n",
       "      <th>Validation Loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.3375</td>\n",
       "      <td>0.4591</td>\n",
       "      <td>1.9297</td>\n",
       "      <td>1.3526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.4448</td>\n",
       "      <td>0.4974</td>\n",
       "      <td>1.3127</td>\n",
       "      <td>1.1589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.5025</td>\n",
       "      <td>0.4942</td>\n",
       "      <td>1.2051</td>\n",
       "      <td>1.1986</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.5632</td>\n",
       "      <td>0.6042</td>\n",
       "      <td>1.1115</td>\n",
       "      <td>1.0030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.6098</td>\n",
       "      <td>0.6119</td>\n",
       "      <td>0.9944</td>\n",
       "      <td>0.9966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0.6514</td>\n",
       "      <td>0.6573</td>\n",
       "      <td>0.8712</td>\n",
       "      <td>0.8890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0.6929</td>\n",
       "      <td>0.6445</td>\n",
       "      <td>0.7877</td>\n",
       "      <td>0.9438</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0.7353</td>\n",
       "      <td>0.6637</td>\n",
       "      <td>0.6848</td>\n",
       "      <td>1.0167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>0.7728</td>\n",
       "      <td>0.6471</td>\n",
       "      <td>0.5859</td>\n",
       "      <td>1.0886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>0.8166</td>\n",
       "      <td>0.6522</td>\n",
       "      <td>0.4834</td>\n",
       "      <td>1.3027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>0.8411</td>\n",
       "      <td>0.6777</td>\n",
       "      <td>0.4121</td>\n",
       "      <td>1.1079</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c4b531d4-3949-44a3-820f-bb53ad5dedab')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-c4b531d4-3949-44a3-820f-bb53ad5dedab button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-c4b531d4-3949-44a3-820f-bb53ad5dedab');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"improved_cnn_results\",\n  \"rows\": 11,\n  \"fields\": [\n    {\n      \"column\": \"Epoch\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 3,\n        \"min\": 1,\n        \"max\": 11,\n        \"num_unique_values\": 11,\n        \"samples\": [\n          6,\n          1,\n          10\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Training Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.1600400909999514,\n        \"min\": 0.3375,\n        \"max\": 0.8411,\n        \"num_unique_values\": 11,\n        \"samples\": [\n          0.6514,\n          0.3375,\n          0.8166\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Validation Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.07875682019528674,\n        \"min\": 0.4591,\n        \"max\": 0.6777,\n        \"num_unique_values\": 11,\n        \"samples\": [\n          0.6573,\n          0.4591,\n          0.6522\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Training Loss\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.43892263555209815,\n        \"min\": 0.4121,\n        \"max\": 1.9297,\n        \"num_unique_values\": 11,\n        \"samples\": [\n          0.8712,\n          1.9297,\n          0.4834\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Validation Loss\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.1463144409700001,\n        \"min\": 0.889,\n        \"max\": 1.3526,\n        \"num_unique_values\": 11,\n        \"samples\": [\n          0.889,\n          1.3526,\n          1.3027\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {},
     "execution_count": 19
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10. Best Epoch Identification"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "# Find the best epoch based on the lowest validation loss\n",
    "best_improved_epoch = improved_cnn_results.loc[\n",
    "    improved_cnn_results['Validation Loss'].idxmin()\n",
    "]\n",
    "\n",
    "print(\"Best Improved CNN epoch:\")\n",
    "print(best_improved_epoch.round(4))"
   ],
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "bQ1eBtqE4PXd",
    "outputId": "793cd9d9-fabd-488e-e5fb-02d76a240831"
   },
   "execution_count": null,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Best Improved CNN epoch:\n",
      "Epoch                  6.0000\n",
      "Training Accuracy      0.6514\n",
      "Validation Accuracy    0.6573\n",
      "Training Loss          0.8712\n",
      "Validation Loss        0.8890\n",
      "Name: 5, dtype: float64\n"
     ]
    }
   ]
  }
 ]
}