{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cd43b0de-2406-43cd-8eef-96e88d4b1204",
   "metadata": {},
   "source": [
    "<div style=\"text-align: center; font-family: Arial, sans-serif;\">\n",
    "\n",
    "  <h1 style=\"color: navy; font-size: 36px; font-weight: bold;\">\n",
    "    Practical Image Processing and Natural Language Processing\n",
    "  </h1>\n",
    "\n",
    "  <h3 style=\"color:black darkred; font-size: 28px;\">\n",
    "    Waleed Mohammed Rasheedy\n",
    "  </h3>\n",
    "\n",
    "  <h3 style=\"color: black; font-size: 24px;\">\n",
    "    2021204005\n",
    "  </h3>\n",
    "\n",
    "  <h2 style=\"color:black darkred; font-size: 28px;\">\n",
    "    Master’s Student, Master of Science in Artificial Intelligence Updated\n",
    "   </h2>\n",
    "\n",
    "   <h2 style=\"color:black darkred; font-size: 28px;\">\n",
    "    College of Informatics, Midocean University\n",
    "   </h2>\n",
    "\n",
    "   <h2 style=\"color:black darkred; font-size: 28px;\">\n",
    "    Under Supervision of<strong> Dr. Hager Saleh</strong>\n",
    "   </h2>\n",
    "\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a1f34ad-f35d-42ca-a71d-efe5e78f10d4",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">Splitting dataset </span>  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8c1d3d99-3014-411b-8b19-386251ce3fbf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Copied 699 images to dataset\\train\\cats\n",
      "Copied 100 images to dataset\\validation\\cats\n",
      "Copied 201 images to dataset\\test\\cats\n",
      "Copied 699 images to dataset\\train\\dogs\n",
      "Copied 100 images to dataset\\validation\\dogs\n",
      "Copied 201 images to dataset\\test\\dogs\n",
      "Copied 699 images to dataset\\train\\snakes\n",
      "Copied 100 images to dataset\\validation\\snakes\n",
      "Copied 201 images to dataset\\test\\snakes\n"
     ]
    }
   ],
   "source": [
    "import os, shutil\n",
    "from sklearn.model_selection import train_test_split\n",
    "        \n",
    "original_dataset_dir = 'Animals'\n",
    "base_dir = 'dataset'\n",
    "train_dir = os.path.join(base_dir, 'train')\n",
    "validation_dir = os.path.join(base_dir, 'validation')\n",
    "test_dir = os.path.join(base_dir, 'test')\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "for dir in [train_dir, validation_dir, test_dir]:\n",
    "    os.makedirs(dir, exist_ok=True)\n",
    "\n",
    "train_ratio, validation_ratio, test_ratio = 0.7, 0.1, 0.2\n",
    "\n",
    "def split_and_copy_files(class_dir, dest_base_dir):\n",
    "    all_images = [os.path.join(class_dir, f) for f in os.listdir(class_dir) if os.path.isfile(os.path.join(class_dir, f))]\n",
    "    train_images, temp_images = train_test_split(all_images, test_size=(1 - train_ratio), random_state=42)\n",
    "    validation_images, test_images = train_test_split(temp_images, test_size=test_ratio / (validation_ratio + test_ratio), random_state=42)\n",
    "\n",
    "    for images, folder_name in zip([train_images, validation_images, test_images], ['train', 'validation', 'test']):\n",
    "        dest_dir = os.path.join(dest_base_dir, folder_name, os.path.basename(class_dir))\n",
    "        os.makedirs(dest_dir, exist_ok=True)\n",
    "        for file in images:\n",
    "            shutil.copy(file, dest_dir)\n",
    "        print(f\"Copied {len(images)} images to {dest_dir}\")\n",
    "\n",
    "# Apply to all class subfolders\n",
    "for class_dir in os.listdir(original_dataset_dir):\n",
    "    full_class_dir = os.path.join(original_dataset_dir, class_dir)\n",
    "    if os.path.isdir(full_class_dir):\n",
    "        split_and_copy_files(full_class_dir, base_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51b490b3-98ae-4870-8446-304d0fdd1242",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">Image data augmentation</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "100d3e81-2493-48b2-873d-84228f0092f2",
   "metadata": {},
   "outputs": [],
   "source": [
    " import tensorflow as tf\n",
    " from tensorflow.keras.models import Sequential\n",
    " from tensorflow.keras.layers import Conv2D, MaxPooling2D\n",
    " from tensorflow.keras.layers import Dense, Flatten, Dropout, GlobalAveragePooling2D\n",
    " from tensorflow.keras.applications import ResNet50\n",
    " from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    " from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
    " import matplotlib.pyplot as plt\n",
    " import numpy as np\n",
    " import seaborn as sns\n",
    " def create_data_generators(train_dir, val_dir, test_dir, img_size=(240, 240), batch_size=32):\n",
    "    # Data augmentation for training dataset\n",
    "    train_datagen = ImageDataGenerator(\n",
    "    rescale=1./255,\n",
    "    rotation_range=20,          \n",
    "    horizontal_flip=True,\n",
    "    width_shift_range=0.1,\n",
    "    height_shift_range=0.1,\n",
    "    zoom_range=0.1,              \n",
    "    brightness_range=[0.8, 1.2]  \n",
    "    )\n",
    "    # Only rescale for validation and testing\n",
    "    val_test_datagen = ImageDataGenerator(rescale=1./255)\n",
    "    # Generate augmented training images\n",
    "    train_generator = train_datagen.flow_from_directory(\n",
    "        train_dir,\n",
    "        target_size=img_size,\n",
    "        batch_size=batch_size,\n",
    "        class_mode='categorical',\n",
    "        shuffle=True\n",
    "    )\n",
    "    # Generate validation images\n",
    "    val_generator = val_test_datagen.flow_from_directory(\n",
    "        val_dir,\n",
    "        target_size=img_size,\n",
    "        batch_size=batch_size,\n",
    "        class_mode='categorical',\n",
    "        shuffle=False\n",
    "    )\n",
    "    # Generate test images\n",
    "    test_generator = val_test_datagen.flow_from_directory(\n",
    "        test_dir,\n",
    "        target_size=img_size,\n",
    "        batch_size=batch_size,\n",
    "        class_mode='categorical',\n",
    "        shuffle=False\n",
    "    )\n",
    "    return train_generator, val_generator, test_generator"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "335c6a34-8ecf-43de-8f0a-99a73ed03b78",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">CNN Model</span>  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0fe804eb-f80a-4dc0-8bb4-ddc4c2bcf20f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "\n",
    "def build_cnn_model(input_shape, num_classes):\n",
    "    model = Sequential([\n",
    "        Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),\n",
    "        MaxPooling2D(2, 2),\n",
    "\n",
    "        Conv2D(64, (3, 3), activation='relu'),\n",
    "        MaxPooling2D(2, 2),\n",
    "\n",
    "        Conv2D(128, (3, 3), activation='relu'),\n",
    "        MaxPooling2D(2, 2),\n",
    "\n",
    "        Flatten(),\n",
    "        Dense(128, activation='relu'),\n",
    "        Dropout(0.5),\n",
    "        Dense(num_classes, activation='softmax')\n",
    "    ])\n",
    "\n",
    "    model.compile(optimizer='adam',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])\n",
    "\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d4a2aaa9-3aa4-4ed2-9307-834aa7bbd498",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2097 images belonging to 3 classes.\n",
      "Found 300 images belonging to 3 classes.\n",
      "Found 603 images belonging to 3 classes.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\keras\\src\\layers\\convolutional\\base_conv.py:113: 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__(activity_regularizer=activity_regularizer, **kwargs)\n",
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\keras\\src\\trainers\\data_adapters\\py_dataset_adapter.py:121: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.\n",
      "  self._warn_if_super_not_called()\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m90s\u001b[0m 1s/step - accuracy: 0.3967 - loss: 1.2812 - val_accuracy: 0.5533 - val_loss: 0.8675\n",
      "Epoch 2/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 811ms/step - accuracy: 0.5894 - loss: 0.8608 - val_accuracy: 0.5833 - val_loss: 0.9967\n",
      "Epoch 3/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 812ms/step - accuracy: 0.5945 - loss: 0.8603 - val_accuracy: 0.6133 - val_loss: 0.7525\n",
      "Epoch 4/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 839ms/step - accuracy: 0.6706 - loss: 0.7383 - val_accuracy: 0.6400 - val_loss: 0.7617\n",
      "Epoch 5/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 839ms/step - accuracy: 0.6475 - loss: 0.7401 - val_accuracy: 0.6067 - val_loss: 0.9022\n",
      "Epoch 6/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 847ms/step - accuracy: 0.6614 - loss: 0.7269 - val_accuracy: 0.6500 - val_loss: 0.7036\n",
      "Epoch 7/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 842ms/step - accuracy: 0.6793 - loss: 0.6969 - val_accuracy: 0.6767 - val_loss: 0.7150\n",
      "Epoch 8/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 849ms/step - accuracy: 0.7066 - loss: 0.6611 - val_accuracy: 0.6367 - val_loss: 0.7462\n",
      "Epoch 9/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 843ms/step - accuracy: 0.6850 - loss: 0.6583 - val_accuracy: 0.6000 - val_loss: 0.9660\n",
      "Epoch 10/10\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 847ms/step - accuracy: 0.6814 - loss: 0.7005 - val_accuracy: 0.6367 - val_loss: 0.8270\n"
     ]
    }
   ],
   "source": [
    "# Directories for datasets\n",
    "\n",
    "train_dir = 'dataset/train'\n",
    "val_dir = 'dataset/validation'\n",
    "test_dir = 'dataset/test'\n",
    "\n",
    "# Create data generators\n",
    "train_gen, val_gen, test_gen = create_data_generators(train_dir, val_dir, test_dir)\n",
    "\n",
    "# Get input shape and number of classes\n",
    "input_shape = (240, 240, 3)\n",
    "num_classes = len(train_gen.class_indices)\n",
    "\n",
    "# Build CNN model\n",
    "model = build_cnn_model(input_shape, num_classes)\n",
    "\n",
    "# Train the model\n",
    "history = model.fit(train_gen, epochs=10, validation_data=val_gen)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "730c8800-6c19-49ba-a02f-ae6269acca9f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_model(model_name, y_true, y_pred):\n",
    "    labels = list(test_gen.class_indices.keys())\n",
    "    accuracy = accuracy_score(y_true, y_pred)\n",
    "    precision = precision_score(y_true, y_pred, average='weighted')  \n",
    "    recall = recall_score(y_true, y_pred, average='weighted')\n",
    "    f1 = f1_score(y_true, y_pred, average='weighted')\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "    \n",
    "    print(\"Accuracy:\", accuracy)\n",
    "    print(\"Precision :\", precision)\n",
    "    print(\"Recall:\", recall)\n",
    "    print(\"F1-score:\" , f1)\n",
    "    print(\"Classification Report:\")\n",
    "    print(classification_report(y_true, y_pred_classes, target_names=labels))\n",
    "    \n",
    "    \n",
    "    # Plot confusion matrix\n",
    "    plt.figure(figsize=(6, 5))\n",
    "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)\n",
    "    plt.xlabel(\"Predicted Label\")\n",
    "    plt.ylabel(\"True Label\")\n",
    "    plt.title(\"Confusion Matrix\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "3e75352b-bec1-48d0-bd01-816861981dc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m19/19\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 426ms/step\n",
      "Accuracy: 0.6434494195688225\n",
      "Precision : 0.6588084417820009\n",
      "Recall: 0.6434494195688225\n",
      "F1-score: 0.6196337387312898\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "        cats       0.72      0.37      0.49       201\n",
      "        dogs       0.63      0.59      0.61       201\n",
      "      snakes       0.62      0.97      0.76       201\n",
      "\n",
      "    accuracy                           0.64       603\n",
      "   macro avg       0.66      0.64      0.62       603\n",
      "weighted avg       0.66      0.64      0.62       603\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " y_pred=model.predict(test_gen)\n",
    " y_true = test_gen.classes\n",
    " y_pred_classes = np.argmax(y_pred, axis=1)\n",
    " evaluate_model('CNN', y_true, y_pred_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56a3e294-8626-4779-92ed-01f120ffad79",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">ResNet50</span>  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1d43b017-215c-4d17-960e-a51f243697e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.applications import ResNet50\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import GlobalAveragePooling2D, Dense, Dropout\n",
    "\n",
    "def build_resnet_model(input_shape, num_classes):\n",
    "    base_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape)\n",
    "    base_model.trainable = False  # Freeze the base model\n",
    "\n",
    "    model = Sequential([\n",
    "        base_model,\n",
    "        GlobalAveragePooling2D(),\n",
    "        Dense(128, activation='relu'),\n",
    "        Dropout(0.5),\n",
    "        Dense(num_classes, activation='softmax')\n",
    "    ])\n",
    "\n",
    "    model.compile(optimizer='adam',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])\n",
    "\n",
    "    return model\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "fec932b6-90a7-4260-a744-eb9d15465473",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m132s\u001b[0m 2s/step - accuracy: 0.3465 - loss: 1.2148 - val_accuracy: 0.5100 - val_loss: 1.0633\n",
      "Epoch 2/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m130s\u001b[0m 2s/step - accuracy: 0.3855 - loss: 1.0889 - val_accuracy: 0.4533 - val_loss: 1.0586\n",
      "Epoch 3/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m128s\u001b[0m 2s/step - accuracy: 0.4018 - loss: 1.0620 - val_accuracy: 0.4367 - val_loss: 1.0218\n",
      "Epoch 4/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m137s\u001b[0m 2s/step - accuracy: 0.4442 - loss: 1.0366 - val_accuracy: 0.5067 - val_loss: 0.9887\n",
      "Epoch 5/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m141s\u001b[0m 2s/step - accuracy: 0.4398 - loss: 1.0326 - val_accuracy: 0.4867 - val_loss: 1.0082\n",
      "Epoch 6/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m136s\u001b[0m 2s/step - accuracy: 0.4178 - loss: 1.0355 - val_accuracy: 0.4767 - val_loss: 0.9769\n",
      "Epoch 7/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m139s\u001b[0m 2s/step - accuracy: 0.4772 - loss: 1.0033 - val_accuracy: 0.5067 - val_loss: 0.9629\n",
      "Epoch 8/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m132s\u001b[0m 2s/step - accuracy: 0.5016 - loss: 0.9858 - val_accuracy: 0.4767 - val_loss: 0.9478\n",
      "Epoch 9/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m130s\u001b[0m 2s/step - accuracy: 0.4581 - loss: 1.0051 - val_accuracy: 0.5433 - val_loss: 0.9389\n",
      "Epoch 10/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m130s\u001b[0m 2s/step - accuracy: 0.4549 - loss: 0.9996 - val_accuracy: 0.5233 - val_loss: 0.9443\n",
      "Epoch 11/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m131s\u001b[0m 2s/step - accuracy: 0.4854 - loss: 0.9811 - val_accuracy: 0.5233 - val_loss: 0.9486\n",
      "Epoch 12/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m128s\u001b[0m 2s/step - accuracy: 0.4728 - loss: 1.0080 - val_accuracy: 0.5333 - val_loss: 0.9375\n",
      "Epoch 13/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m130s\u001b[0m 2s/step - accuracy: 0.4647 - loss: 0.9919 - val_accuracy: 0.5133 - val_loss: 0.9321\n",
      "Epoch 14/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m132s\u001b[0m 2s/step - accuracy: 0.4644 - loss: 0.9949 - val_accuracy: 0.4800 - val_loss: 0.9551\n",
      "Epoch 15/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m140s\u001b[0m 2s/step - accuracy: 0.5164 - loss: 0.9595 - val_accuracy: 0.5033 - val_loss: 0.9349\n",
      "Epoch 16/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m132s\u001b[0m 2s/step - accuracy: 0.4668 - loss: 0.9853 - val_accuracy: 0.4600 - val_loss: 1.0070\n",
      "Epoch 17/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m132s\u001b[0m 2s/step - accuracy: 0.4921 - loss: 0.9577 - val_accuracy: 0.5067 - val_loss: 0.9368\n",
      "Epoch 18/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m131s\u001b[0m 2s/step - accuracy: 0.5003 - loss: 0.9568 - val_accuracy: 0.5333 - val_loss: 0.8960\n",
      "Epoch 19/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m122s\u001b[0m 2s/step - accuracy: 0.4992 - loss: 0.9628 - val_accuracy: 0.5133 - val_loss: 0.9404\n",
      "Epoch 20/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m123s\u001b[0m 2s/step - accuracy: 0.5177 - loss: 0.9399 - val_accuracy: 0.5267 - val_loss: 0.8965\n"
     ]
    }
   ],
   "source": [
    "input_shape = (240, 240, 3)  \n",
    "num_classes = len(train_gen.class_indices)\n",
    "\n",
    "model = build_resnet_model(input_shape, num_classes)\n",
    "history = model.fit(train_gen, epochs=20, validation_data=val_gen)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "3d31f99d-a287-4e55-b1a6-7730af803e0d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m19/19\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m31s\u001b[0m 2s/step\n",
      "Accuracy: 0.5671641791044776\n",
      "Precision : 0.5400508013414447\n",
      "Recall: 0.5671641791044776\n",
      "F1-score: 0.5401230938630127\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "        cats       0.52      0.69      0.59       201\n",
      "        dogs       0.39      0.21      0.28       201\n",
      "      snakes       0.71      0.80      0.75       201\n",
      "\n",
      "    accuracy                           0.57       603\n",
      "   macro avg       0.54      0.57      0.54       603\n",
      "weighted avg       0.54      0.57      0.54       603\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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AAAHIxAAAMDBCAQAAHAwAgE/oR2I+vbtS0cih+D7dha+b0QlOgsCAOBgZAQAAHAwAgEAAByMQAAAAAcjEABimEqVKkmnTp3srgZioB9//FEsy5KLFy/aXRX4EQIBP9WvXz8pUqSI3dUAAMRwBAIAADgYgUAMdv/+fRk6dKjkyJHDjB/OlCmTvP/++2bfO++8I7ly5ZIECRJItmzZpHfv3nLnzh2zb+rUqdK/f3/Zvn27SSPqpmU6UlQzBXoePV+6dOmkY8eONr9LZ7t27Zo0a9ZMEiVKJGnTppURI0Z47b9w4YLZnzx5cvNd16xZUw4cOOB1zOTJkyVjxoxmf/369eXDDz+UZMmSefbrv4PKlStL4sSJzTz1xYsXl82bN0fbe3Sab775RgoWLCjx48eXlClTStWqVc333KJFC6lXr54MHz7cfNe6r127dp6/WzV9+nQpUaKE+a5CQkKkSZMmcvr06Ye+1vXr182/iXLlynmaCz755BPJmzevxIsXT/LkySPjx4/3HH/79m1p3769eX3dnzlzZrOYERxO5xFAzPT222+7kidP7po6darr4MGDrp9++sk1efJks++9995z/fzzz67Dhw+7FixY4EqTJo1ryJAhZt/169ddXbt2deXPn9914sQJs2nZ7NmzXUmSJHF99913riNHjrg2bNjgmjRpks3v0tneeOMNV6ZMmVw//PCD67fffnM9++yzrsSJE7veeusts/+5555z5c2b17VmzRrXtm3bXNWrV3flyJHDdfv2bbN/7dq1roCAANewYcNc+/btc40bN86VIkUKV9KkST2vof8OXn75ZdeePXtc+/fvd3399dfmXPC948ePuwIDA10ffvih+dvU71S/kytXrriaN29u/v7atm1rvouFCxe6EiRI4PU3+Omnn5q/z99//921fv16V9myZV01a9b07F+1apXO++K6cOGC2Z588klXtWrVXNeuXTP7v/jiC1fatGld3377revQoUPmp/570P+GKP13kjFjRvPv6Y8//jD/TZk5c6YNnxRiEgKBGOry5cuu4OBgz4X/3+gfePHixT3P+/bt6ypcuLDXMSNGjHDlypXLcxGBvfTiEBQUZC7MbufOnXPFjx/fBAJ60db/6GvA53b27Fmz3/07L730kqt27dpe523atKlXIKCBhftCgKi1ZcsW853pRTYsDQQyZ87s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",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " y_pred=model.predict(test_gen)\n",
    " y_true = test_gen.classes\n",
    " y_pred_classes = np.argmax(y_pred, axis=1)\n",
    " evaluate_model('CNN', y_true, y_pred_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9624cd6-6d31-47e7-a034-51e466bd2c80",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">EfficientNetB0</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "87692341-cf64-4b86-9eba-2af1c45d1a3b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.applications import EfficientNetB0\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import GlobalAveragePooling2D, Dense, Dropout\n",
    "from tensorflow.keras.optimizers import Adam\n",
    "\n",
    "def build_efficientnetb0_model(input_shape, num_classes):\n",
    "   \n",
    "    base_model = EfficientNetB0(weights='imagenet', include_top=False, input_shape=input_shape)\n",
    "    base_model.trainable = False \n",
    "\n",
    "  \n",
    "    model = Sequential([\n",
    "        base_model,\n",
    "        GlobalAveragePooling2D(),\n",
    "        Dense(128, activation='relu'),\n",
    "        Dropout(0.5),\n",
    "        Dense(num_classes, activation='softmax')\n",
    "    ])\n",
    "\n",
    "    \n",
    "    model.compile(\n",
    "        optimizer=Adam(),\n",
    "        loss='categorical_crossentropy',\n",
    "        metrics=['accuracy']\n",
    "    )\n",
    "\n",
    "    return model\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "7a34ea1a-f9e5-448d-9eac-c530cfa48cd1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m80s\u001b[0m 1s/step - accuracy: 0.3484 - loss: 1.1304 - val_accuracy: 0.3333 - val_loss: 1.0994\n",
      "Epoch 2/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3387 - loss: 1.1020 - val_accuracy: 0.3333 - val_loss: 1.0988\n",
      "Epoch 3/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 1s/step - accuracy: 0.3345 - loss: 1.0990 - val_accuracy: 0.3333 - val_loss: 1.0991\n",
      "Epoch 4/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3373 - loss: 1.0992 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 5/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 1s/step - accuracy: 0.3232 - loss: 1.0994 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 6/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3556 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 7/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 1s/step - accuracy: 0.3166 - loss: 1.0988 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 8/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m71s\u001b[0m 1s/step - accuracy: 0.3268 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 9/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3319 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 10/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 1s/step - accuracy: 0.3257 - loss: 1.0988 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 11/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3470 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 12/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3452 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 13/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3301 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 14/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 1s/step - accuracy: 0.3370 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 15/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 1s/step - accuracy: 0.3358 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 16/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 1s/step - accuracy: 0.3293 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 17/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3235 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 18/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3274 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 19/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3164 - loss: 1.0987 - val_accuracy: 0.3333 - val_loss: 1.0986\n",
      "Epoch 20/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 1s/step - accuracy: 0.3485 - loss: 1.0986 - val_accuracy: 0.3333 - val_loss: 1.0986\n"
     ]
    }
   ],
   "source": [
    "# Creat model and train it\n",
    "model = build_efficientnetb0_model(input_shape=(240, 240, 3), num_classes=len(train_gen.class_indices))\n",
    "history = model.fit(train_gen, epochs=20, validation_data=val_gen)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "1f099f78-9271-47b2-be63-31368de81908",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m19/19\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 844ms/step\n",
      "Accuracy: 0.3333333333333333\n",
      "Precision : 0.1111111111111111\n",
      "Recall: 0.3333333333333333\n",
      "F1-score: 0.16666666666666666\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "        cats       0.00      0.00      0.00       201\n",
      "        dogs       0.33      1.00      0.50       201\n",
      "      snakes       0.00      0.00      0.00       201\n",
      "\n",
      "    accuracy                           0.33       603\n",
      "   macro avg       0.11      0.33      0.17       603\n",
      "weighted avg       0.11      0.33      0.17       603\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1731: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", result.shape[0])\n",
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1731: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", result.shape[0])\n",
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1731: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", result.shape[0])\n",
      "C:\\Users\\sea_user\\anaconda3\\envs\\AnimalClassification\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1731: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", result.shape[0])\n"
     ]
    },
    {
     "data": {
      "image/png": "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mYHEQCYAAIBEpsMD27dvL1WqVJE77rhDxo0bJ2fOnDGjBRITQUAKoSko7YBCpyE78Pu2C7/vlOfRRx+VI0eOyKBBg+TgwYNSoUIFWbRoUazOgsFGx0AAACxFnwAAACxFEAAAgKUIAgAAsBRBAJDE1KpVS1544QW3i4Ek6H//+584jiMnTpxwuyhIIQgCUiidplJ7mwIAcDUEAQAAWIogIAnTGaRGjBghRYsWNeOD8+fPL//3f/9njvXt21eKFStmlp4sXLiwDBw4UC5evGiOTZkyxSxi8fPPP5vUoW66T0eDaoZAr6PXy5s3rzz33HMuv0u76eQg7dq1k4wZM0qePHlk9OjRfsePHz9ujmfNmtX8ruvXry+///673znvvfee5MuXzxxv3LixWaI0S5YsvuP6d3DvvfdKpkyZzLzzOlPZTz/9lGjv0TZz5syRsmXLSrp06SQiIsKsDKe/5w4dOkijRo1k1KhR5netx7p06eL73Kpp06aZyWP0d6XTx7Zu3fqa68ufPXvW/E3cddddviaC999/X0qWLClp06aVEiVKyIQJE/xWr+vatat5fT1eoEABszARLKbzBCBp6tOnjydr1qyeKVOmeHbu3On57rvvPO+995459vLLL3t++OEHz549ezxffPGFJ1euXJ7XX3/dHDt79qynZ8+entKlS3sOHDhgNt336aefesLDwz1fffWVZ9++fZ61a9d63n33XZffpd06d+7syZ8/v+fbb7/1bN682fPggw96MmXK5Hn++efN8YcffthTsmRJz8qVKz2bNm3y1KtXz1O0aFHPhQsXzPHvv//eExIS4hk5cqRn+/btnrffftuTLVs2T+bMmX2voX8Hbdu29Wzbts2zY8cOzyeffGKuhcD7+++/PalTp/aMGTPGfDb1d6q/k1OnTnnat29vPn/PPPOM+V0sWLDAkz59er/P4AcffGA+n7t27fKsXr3aU716dU/9+vV9x5cvX67zuniOHz9utjvvvNNTt25dz5kzZ8zx6dOne/LkyeP57LPPPLt37zZf9e9B/w1R+neSL18+8/e0d+9e82/KzJkzXfhJIakgCEiiTp486QkLC/NV+tejH+7KlSv7ng8ePNhTvnx5v3NGjx7tKVasmK8Cgbu0YggNDTWVstfRo0c96dKlM0GAVtj6D74Ge17//POPOe79nkcffdTTsGFDv+u2adPGLwjQoMJbCSC41q9fb35nWsHGpEFAgQIFPJcuXfLta968ufkdXs26devM9fRvJXoQoEFEuXLlPE2bNvWcP3/ed36RIkViVep6w6DBhOrWrZvnvvvu81y5ciUg7xfJH80BSdS2bdvMkpS1a9eO8/js2bNNClBThppKHjBggOzfv/+a12zevLmcO3fONB906tRJPv/8c7l06VKQ3gGuZ9euXSY9W7VqVd++bNmySfHixX1/A6lTp/Y7rilkPa7H1Pbt282849HFfK5zlD/55JMmLf3aa6+Z10VwlC9f3nxmtTlAP2/aVKNNOl6lS5c2q8d5aVo+erp//fr18tBDD5kmO20SqFmzptkf87N9//33m2ZC/XdAF6NR2uSgv9uOHTuafxO82yuvvOL7nWuTxKZNm8zfkDYFfvPNN0H/mSBpIwhIorQ98WpWr14tbdq0kQYNGsjChQtl48aN0r9/f1OhXIu2G2uloW2Eev1nn31WatSo4dcmiZRH+4H8+uuv0rBhQ1m2bJmUKlXKBIAIPK3glyxZIl9//bX5OY8fP95UuHv27DHH06RJ43e+9tfRvj/eSrxevXqm38aMGTNk3bp1vt9TzM+2/i5XrlwpW7du9e07ffq0+aqBh1b03u2XX36RNWvWmGOVKlUyZXn55ZfNDUGLFi2kWbNmQf6pICkjCEiibrvtNlNRR19q0mvVqlWmQ49W/NqJSM/dt2+f3zl6d3D58uVY36vX1DuNN99804w51oBiy5YtQX0viFuRIkVMpbB27VrfPr1r3LFjh3msnbs0UxP9+NGjR00gpxWM0gpGK4voYj5X2om0e/fu5s6vSZMmMnny5CC+M7tpxa5ZOu2cqwG6fhbjE3T99ttv5ver2Zp77rnHdOq7WqdAPUdXoNOsgzcQ0IVntLPv7t27TZYg+laoUCHf92qQoYvXaLCgmYTPPvtMjh07FsCfAJITVhFMorTnro4A6NOnj/lHRP9R0RWn9I5OK31ND86aNUtuv/12+fLLL2P9I1OwYEET8eudwK233mpSix9//LEJDDS9rD3Jp0+fboICDSiQ+DRVq6nb3r17mzR/zpw5TWAXEvJvbK6/50ceecQ03bzzzjvmd/jiiy/KLbfcYvarbt26mWyOjgjQ4E7v9PUuVCsipXd7en2929OK4M8//zRBQtOmTV197ymVBmwauNetW9f8PvW5fm41oNu8efM1v1ebAPSzrtmDZ555xtzB6x371egoA/0833fffSag16BBAw9N82fOnFkeeOAB06SoI0E0uNRmIf070SaIihUrmr+zTz/91DQpRh9NAsu43SkBV3f58mXPK6+8YjoTpUmTxvQif/XVV82x3r17eyIiIjwZM2Y0HYvGjh3r1xksKirKdBrKkiWL6Ug0efJkz+eff+6pWrWq6aGcIUMGT7Vq1UyvdLhHO3xpz33tJa4jPEaMGOGpWbOmb3TAsWPHPI899pj53WqHQB0doB0Go9Pe5bfccos53qhRI/M3kzt3bnNMO421bNnS9AjXToh58+b1dO3a1XPu3DlX3m9Kt3XrVvM7ypEjh+nYqx1xx48f7+sY+Mgjj/idr79n/X17aae+ggULmu/Vznw68kc/vxs3bow1OsBLO/vpiAAdHaJmzJjhqVChgvl96+iiGjVqeObOnev7W9Fj+vnXfwdq167t2bBhQ6L8bJA0sZQwkMJo5kBTy999953bRQGQxNEcACRzmhbW3uIZMmQwTQFTp071myAGAK6GTACQzGkPb20TPnXqlBn+qf0EtE0ZAK6HIAAAAEsxRBAAAEsRBAAAYCmCAAAALEUQAACApQgCAACwFEEAEAS6WlujRo18z2vVqiUvvPBCopdDhw7qFMInTpxItPeaVMsJIDaCAFhDKyutaHTTOdp1YZVhw4YlynLKc+fOveY88G5WiLrOxLhx4xLltQAkLcwYCKvooiq6gp4urPLVV19Jly5dzEp+/fr1i3WuLt/qXav9ZmXLli0g1wGAQCITAKuEhYWZVdN05cTOnTtLnTp15IsvvvBLa//f//2fWZJVl+lVf/zxh5mVT1da08pcV/Dbu3ev75q6kpuu0KbHdTVAXfkx5hxcMZsDNAjRVSLz5ctnyqRZiQ8++MBc99577zXnZM2a1WQEtFxK150fPny4WQ1QV38sX768zJkzx+91NLDRZYP1uF4nejlvhL43XenQ+5r6M3njjTfiPFdXsMuRI4dZqlZnLNQgyis+ZQeQ+MgEwGpaIeka7l66DKxWYkuWLDHPL168KPXq1ZPq1aubBXlSp04tr7zyisko6NKwmikYPXq0TJkyRT788EOzZKw+16WddYnXq2nXrp2sXr1a3nzzTVMh6rLP//zzjwkKdH13Xep3+/btpixaRqWVqC7/PGnSJLPM8MqVK6Vt27am4q1Zs6YJVpo0aWKyG0899ZRZQrZnz5439fPRyluXotYlZzXAWbVqlbm2LkergVH0n5suf61NGRp4PP744+Z8DajiU3YALnF5FUMg0URfyvXKlSueJUuWmCVbe/Xq5Tuuy/nq8rte06ZN8xQvXtyc76XHddnexYsXm+e6jKsuAex18eJFz6233uq3bGz05YF1yVf96OnrxyWu5WJ1aWhdbnjVqlV+53bs2NHTqlUr87hfv36eUqVK+R3v27dvrGvFpEtV61LU8dWlSxezTLWX/tyyZcvmOXPmjG/fxIkTzTLXuhx2fMoe13sGEHxkAmCVhQsXSsaMGc0dvt7ltm7dWoYMGeI7XrZsWb9+AD///LPs3LlTMmXK5HedqKgo2bVrl0RGRsqBAwekatWqvmOaLahSpUqsJgGvTZs2SapUqRJ0B6xlOHv2rFktMDpNuVesWNE83rZtm185lGYwbtbbb79tshz79++Xc+fOmdesUKGC3zmazUifPr3f654+fdpkJ/Tr9coOwB0EAbCKtpNPnDjRVPTa7q8VdnS6HG90WoFVrlxZZsyYEetamsq+Ed70fkJoOdSXX34pt9xyi98x7VMQLLNmzZJevXqZJg6t2DUYGjlypKxduzbJlx3A9REEwCpayWsnvPiqVKmSzJ49W3LmzGna5+Oi7eNaKdaoUcM81yGH69evN98bF802aBZixYoVpmNiTN5MhHbK8ypVqpSpMPVu/GoZBO2P4O3k6LVmzRq5GT/88IPceeed8uyzz/r2aQYkJs2YaJbAG+Do62rGRfs4aGfK65UdgDsYHQBcQ5s2bSR79uxmRIB2DNQOfNr57bnnnpM///zTnPP888/La6+9JvPmzZPffvvNVJjXGuOv4/Lbt28vTzzxhPke7zU/+eQTc1xHLuioAG26OHLkiLmT1jtwvSPv3r27TJ061VTEGzZskPHjx5vnSnvk//7779K7d2/TqXDmzJmmw2J8/PXXX6aZIvp2/Phx04lPOxguXrxYduzYIQMHDpR169bF+n5N7esogq1bt5oRCoMHD5auXbtKSEhIvMoOwCWJ0O8ASHIdAxNy/MCBA5527dp5smfPbjoSFi5c2NOpUydPZGSkryOgdvoLDw/3ZMmSxdOjRw9z/tU6Bqpz5855unfvbjoVhoaGeooWLer58MMPfceHDRvmyZ07t8dxHFMupZ0Tx40bZzoqpkmTxpMjRw5PvXr1PCtWrPB934IFC8y1tJz33HOPuWZ8OgbqOTE37RSpnfo6dOjgyZw5s3lvnTt39rz44oue8uXLx/q5DRo0yBMREWE6BOrPR7/X63plp2Mg4A5H/+dWAAIAANxDcwAAAJYiCAAAwFIEAQAAWIogAAAASxEEAABgKYIAAAAsRRAAAIClCAIAALAUQQAAAJYiCAAAwFIEAQAAiJ3+H0UCP+bqIPRvAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " y_pred=model.predict(test_gen)\n",
    " y_true = test_gen.classes\n",
    " y_pred_classes = np.argmax(y_pred, axis=1)\n",
    " evaluate_model('CNN', y_true, y_pred_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74572298-ed7f-4143-8e02-f7992294956e",
   "metadata": {},
   "source": [
    "<span style=\"font-size:32px\">InceptionV3</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "6b707eab-94d9-40c0-bcc4-982130de3f59",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.applications import InceptionV3\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import GlobalAveragePooling2D, Dense, Dropout\n",
    "\n",
    "def build_inceptionv3_model(input_shape, num_classes):\n",
    "    base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=input_shape)\n",
    "    base_model.trainable = False  # Freeze the base model\n",
    "\n",
    "    model = Sequential([\n",
    "        base_model,\n",
    "        GlobalAveragePooling2D(),\n",
    "        Dense(128, activation='relu'),\n",
    "        Dropout(0.5),\n",
    "        Dense(num_classes, activation='softmax')\n",
    "    ])\n",
    "\n",
    "    model.compile(optimizer='adam',\n",
    "                  loss='categorical_crossentropy',\n",
    "                  metrics=['accuracy'])\n",
    "\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "d06f0482-3efa-482f-b663-4321ae2f481a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 1s/step - accuracy: 0.8489 - loss: 0.3953 - val_accuracy: 0.9967 - val_loss: 0.0231\n",
      "Epoch 2/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m79s\u001b[0m 1s/step - accuracy: 0.9713 - loss: 0.1029 - val_accuracy: 0.9933 - val_loss: 0.0270\n",
      "Epoch 3/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9847 - loss: 0.0458 - val_accuracy: 0.9867 - val_loss: 0.0432\n",
      "Epoch 4/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9833 - loss: 0.0515 - val_accuracy: 0.9833 - val_loss: 0.0414\n",
      "Epoch 5/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9826 - loss: 0.0613 - val_accuracy: 0.9900 - val_loss: 0.0307\n",
      "Epoch 6/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9826 - loss: 0.0487 - val_accuracy: 0.9933 - val_loss: 0.0303\n",
      "Epoch 7/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 1s/step - accuracy: 0.9853 - loss: 0.0413 - val_accuracy: 0.9933 - val_loss: 0.0194\n",
      "Epoch 8/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9868 - loss: 0.0444 - val_accuracy: 0.9967 - val_loss: 0.0132\n",
      "Epoch 9/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 1s/step - accuracy: 0.9931 - loss: 0.0259 - val_accuracy: 0.9867 - val_loss: 0.0253\n",
      "Epoch 10/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9873 - loss: 0.0403 - val_accuracy: 0.9900 - val_loss: 0.0345\n",
      "Epoch 11/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 1s/step - accuracy: 0.9851 - loss: 0.0469 - val_accuracy: 0.9900 - val_loss: 0.0184\n",
      "Epoch 12/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9918 - loss: 0.0240 - val_accuracy: 0.9867 - val_loss: 0.0182\n",
      "Epoch 13/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 1s/step - accuracy: 0.9862 - loss: 0.0433 - val_accuracy: 0.9933 - val_loss: 0.0197\n",
      "Epoch 14/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9890 - loss: 0.0299 - val_accuracy: 0.9900 - val_loss: 0.0173\n",
      "Epoch 15/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9902 - loss: 0.0259 - val_accuracy: 0.9933 - val_loss: 0.0155\n",
      "Epoch 16/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9893 - loss: 0.0301 - val_accuracy: 0.9933 - val_loss: 0.0135\n",
      "Epoch 17/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9940 - loss: 0.0249 - val_accuracy: 0.9933 - val_loss: 0.0108\n",
      "Epoch 18/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9932 - loss: 0.0286 - val_accuracy: 0.9933 - val_loss: 0.0145\n",
      "Epoch 19/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 1s/step - accuracy: 0.9922 - loss: 0.0217 - val_accuracy: 0.9933 - val_loss: 0.0189\n",
      "Epoch 20/20\n",
      "\u001b[1m66/66\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 1s/step - accuracy: 0.9916 - loss: 0.0328 - val_accuracy: 0.9933 - val_loss: 0.0152\n"
     ]
    }
   ],
   "source": [
    "# Creat model and train it\n",
    "model = build_inceptionv3_model(input_shape, num_classes)\n",
    "history = model.fit(train_gen, epochs=20, validation_data=val_gen)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "ea43d942-0cb2-470a-9ba4-7ad69e01fcc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m19/19\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 974ms/step\n",
      "Accuracy: 0.988391376451078\n",
      "Precision : 0.9883747106053888\n",
      "Recall: 0.988391376451078\n",
      "F1-score: 0.9883789593950879\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "        cats       0.99      0.99      0.99       201\n",
      "        dogs       0.98      0.98      0.98       201\n",
      "      snakes       1.00      1.00      1.00       201\n",
      "\n",
      "    accuracy                           0.99       603\n",
      "   macro avg       0.99      0.99      0.99       603\n",
      "weighted avg       0.99      0.99      0.99       603\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " y_pred=model.predict(test_gen)\n",
    " y_true = test_gen.classes\n",
    " y_pred_classes = np.argmax(y_pred, axis=1)\n",
    " evaluate_model('CNN', y_true, y_pred_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "61e73b7b-ffbb-4517-84dc-5f0f5001596a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
