diff --git a/Pokemon classification using Deep learning/Dataset/README.md b/Pokemon classification using Deep learning/Dataset/README.md new file mode 100644 index 000000000..061eba05c --- /dev/null +++ b/Pokemon classification using Deep learning/Dataset/README.md @@ -0,0 +1,4 @@ +# PokΓ©mon Classification Dataset + +Sourced from Kaggle: +https://www.kaggle.com/datasets/lantian773030/pokemonclassification diff --git a/Pokemon classification using Deep learning/Model/README.md b/Pokemon classification using Deep learning/Model/README.md new file mode 100644 index 000000000..de64fbf4b --- /dev/null +++ b/Pokemon classification using Deep learning/Model/README.md @@ -0,0 +1,7 @@ +# PokΓ©mon Classification using Deep Learning + +## πŸ“ Project Description +This module provides a comprehensive comparative study of 4 distinct deep learning architectures (Custom CNN, VGG16, InceptionV3, and MobileNetV2) evaluating accuracy, training efficiency, and parameter footprints on a dataset of 7,000+ Gen-1 PokΓ©mon images. + +## πŸ“Š Model Comparison & Results +*(Visualizations, training curves, and final evaluation matrices will be populated here upon model execution).* diff --git a/Pokemon classification using Deep learning/Model/pokemon_classification.ipynb b/Pokemon classification using Deep learning/Model/pokemon_classification.ipynb new file mode 100644 index 000000000..109c45272 --- /dev/null +++ b/Pokemon classification using Deep learning/Model/pokemon_classification.ipynb @@ -0,0 +1,718 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "id": "e9680cc5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: pandas in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (2.3.3)\n", + "Requirement already satisfied: numpy in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (2.2.6)\n", + "Requirement already satisfied: matplotlib in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (3.10.7)\n", + "Requirement already satisfied: seaborn in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (0.13.2)\n", + "Requirement already satisfied: tensorflow in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (2.21.0)\n", + "Requirement already satisfied: scikit-learn in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (1.7.2)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from pandas) (2026.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from pandas) (2026.2)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (4.60.1)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (1.4.9)\n", + "Requirement already satisfied: pillow>=8 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (12.0.0)\n", + "Requirement already satisfied: pyparsing>=3 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (3.2.5)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (1.3.2)\n", + "Requirement already satisfied: packaging>=20.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (25.0)\n", + "Requirement already satisfied: cycler>=0.10 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from matplotlib) (0.12.1)\n", + "Requirement already satisfied: opt_einsum>=2.3.2 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (3.4.0)\n", + "Requirement already satisfied: six>=1.12.0 in /usr/lib/python3/dist-packages (from tensorflow) (1.16.0)\n", + "Requirement already satisfied: typing_extensions>=3.6.6 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (4.15.0)\n", + "Requirement already satisfied: keras>=3.12.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (3.12.1)\n", + "Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from tensorflow) (59.6.0)\n", + "Requirement already satisfied: astunparse>=1.6.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (1.6.3)\n", + "Requirement already satisfied: wrapt>=1.11.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (2.1.2)\n", + "Requirement already satisfied: ml_dtypes<1.0.0,>=0.5.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (0.5.4)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (1.78.0)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (2.32.5)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (0.7.0)\n", + "Requirement already satisfied: absl-py>=1.0.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (2.4.0)\n", + "Requirement already satisfied: google_pasta>=0.1.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (0.2.0)\n", + "Requirement already satisfied: termcolor>=1.1.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (3.3.0)\n", + "Requirement already satisfied: h5py<3.15.0,>=3.11.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (3.14.0)\n", + "Requirement already satisfied: protobuf<8.0.0,>=6.31.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (7.34.0)\n", + "Requirement already satisfied: libclang>=13.0.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (18.1.1)\n", + "Requirement already satisfied: flatbuffers>=25.9.23 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from tensorflow) (25.12.19)\n", + "Requirement already satisfied: joblib>=1.2.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from scikit-learn) (1.5.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from scikit-learn) (3.6.0)\n", + "Requirement already satisfied: scipy>=1.8.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from scikit-learn) (1.15.3)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/lib/python3/dist-packages (from astunparse>=1.6.0->tensorflow) (0.37.1)\n", + "Requirement already satisfied: namex in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from keras>=3.12.0->tensorflow) (0.1.0)\n", + "Requirement already satisfied: optree in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from keras>=3.12.0->tensorflow) (0.19.0)\n", + "Requirement already satisfied: rich in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from keras>=3.12.0->tensorflow) (14.3.3)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorflow) (3.11)\n", + "Requirement already satisfied: charset_normalizer<4,>=2 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorflow) (3.4.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorflow) (2.5.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorflow) (2025.11.12)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from rich->keras>=3.12.0->tensorflow) (4.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from rich->keras>=3.12.0->tensorflow) (2.19.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/shrinidhiwalvekar/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.12.0->tensorflow) (0.1.2)\n" + ] + } + ], + "source": [ + "!pip install pandas numpy matplotlib seaborn tensorflow scikit-learn" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e7061bfe", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "I0000 00:00:1779775306.573027 186390 port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "I0000 00:00:1779775306.577436 186390 cudart_stub.cc:31] Could not find cuda drivers on your machine, GPU will not be used.\n", + "I0000 00:00:1779775307.546878 186390 cpu_feature_guard.cc:227] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "I0000 00:00:1779775310.523851 186390 port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "I0000 00:00:1779775310.526599 186390 cudart_stub.cc:31] Could not find cuda drivers on your machine, GPU will not be used.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TensorFlow Version: 2.21.0\n", + "Available Devices for Training: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "E0000 00:00:1779775311.376035 186390 cuda_platform.cc:52] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)\n" + ] + } + ], + "source": [ + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "import tensorflow as tf\n", + "from tensorflow.keras import layers, models\n", + "from tensorflow.keras.applications import VGG16, InceptionV3, MobileNetV2\n", + "from sklearn.metrics import classification_report, confusion_matrix\n", + "\n", + "# Set clean aesthetic style configurations for training analysis curves\n", + "sns.set_theme(style=\"whitegrid\")\n", + "plt.rcParams['figure.figsize'] = [10, 6]\n", + "plt.rcParams['font.size'] = 12\n", + "\n", + "# Verification block to ensure your local environment is configured properly\n", + "print(\"TensorFlow Version:\", tf.__version__)\n", + "print(\"Available Devices for Training:\", tf.config.list_physical_devices())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92164797", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifying target dataset directory path at: /mnt/c/Users/Shrinidhi Walvekar/Desktop/gssoc/DL-Simplified/Pokemon classification using Deep learning/Dataset\n", + "Success! Path exists. Found 151 items inside.\n" + ] + } + ], + "source": [ + "# Define the local path to your extracted Kaggle dataset folder\n", + "# Ensure it points directly to the directory containing the 150 class folders\n", + "DATASET_DIR = \"/mnt/c/Users/Shrinidhi Walvekar/Desktop/gssoc/DL-Simplified/Pokemon classification using Deep learning/Dataset\" \n", + "\n", + "# Structural configuration hyperparameters\n", + "IMAGE_SIZE = (224, 224)\n", + "BATCH_SIZE = 32\n", + "\n", + "import os\n", + "print(f\"Verifying target dataset directory path at: {DATASET_DIR}\")\n", + "if os.path.exists(DATASET_DIR):\n", + " # List the folder elements to verify classes\n", + " contents = os.listdir(DATASET_DIR)\n", + " print(f\"βœ… Success! Path exists. Found {len(contents)} items inside.\")\n", + "else:\n", + " print(\"❌ ERROR: Path directory not found. Please double check your folder name!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "30eb797b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Abra', 'Aerodactyl', 'Alakazam', 'Alolan Sandslash', 'Arbok', 'Arcanine', 'Articuno', 'Beedrill', 'Bellsprout', 'Blastoise', 'Bulbasaur', 'Butterfree', 'Caterpie', 'Chansey', 'Charizard', 'Charmander', 'Charmeleon', 'Clefable', 'Clefairy', 'Cloyster', 'Cubone', 'Dewgong', 'Diglett', 'Ditto', 'Dodrio', 'Doduo', 'Dragonair', 'Dragonite', 'Dratini', 'Drowzee', 'Dugtrio', 'Eevee', 'Ekans', 'Electabuzz', 'Electrode', 'Exeggcute', 'Exeggutor', 'Farfetchd', 'Fearow', 'Flareon', 'Gastly', 'Gengar', 'Geodude', 'Gloom', 'Golbat', 'Goldeen', 'Golduck', 'Golem', 'Graveler', 'Grimer', 'Growlithe', 'Gyarados', 'Haunter', 'Hitmonchan', 'Hitmonlee', 'Horsea', 'Hypno', 'Ivysaur', 'Jigglypuff', 'Jolteon', 'Jynx', 'Kabuto', 'Kabutops', 'Kadabra', 'Kakuna', 'Kangaskhan', 'Kingler', 'Koffing', 'Krabby', 'Lapras', 'Lickitung', 'Machamp', 'Machoke', 'Machop', 'Magikarp', 'Magmar', 'Magnemite', 'Magneton', 'Mankey', 'Marowak', 'Meowth', 'Metapod', 'Mew', 'Mewtwo', 'Moltres', 'MrMime', 'Muk', 'Nidoking', 'Nidoqueen', 'Nidorina', 'Nidorino', 'Ninetales', 'Oddish', 'Omanyte', 'Omastar', 'Onix', 'Paras', 'Parasect', 'Persian', 'Pidgeot', 'Pidgeotto', 'Pidgey', 'Pikachu', 'Pinsir', 'Poliwag', 'Poliwhirl', 'Poliwrath', 'Ponyta', 'Porygon', 'Primeape', 'Psyduck', 'Raichu', 'Rapidash', 'Raticate', 'Rattata', 'README.md', 'Rhydon', 'Rhyhorn', 'Sandshrew', 'Sandslash', 'Scyther', 'Seadra', 'Seaking', 'Seel', 'Shellder', 'Slowbro', 'Slowpoke', 'Snorlax', 'Spearow', 'Squirtle', 'Starmie', 'Staryu', 'Tangela', 'Tauros', 'Tentacool', 'Tentacruel', 'Vaporeon', 'Venomoth', 'Venonat', 'Venusaur', 'Victreebel', 'Vileplume', 'Voltorb', 'Vulpix', 'Wartortle', 'Weedle', 'Weepinbell', 'Weezing', 'Wigglytuff', 'Zapdos', 'Zubat']\n" + ] + } + ], + "source": [ + "print(os.listdir(DATASET_DIR))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "79e5b08e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading Training Dataset (80% Split)...\n", + "Found 6820 files belonging to 150 classes.\n", + "Using 5456 files for training.\n", + "\n", + "Loading Validation Dataset (20% Split)...\n", + "Found 6820 files belonging to 150 classes.\n", + "Using 1364 files for validation.\n", + "\n", + "Total Target Classification Categories: 150\n" + ] + } + ], + "source": [ + "print(\"Loading Training Dataset (80% Split)...\")\n", + "train_ds = tf.keras.utils.image_dataset_from_directory(\n", + " DATASET_DIR,\n", + " validation_split=0.2,\n", + " subset=\"training\",\n", + " seed=123,\n", + " image_size=IMAGE_SIZE,\n", + " batch_size=BATCH_SIZE,\n", + " label_mode=\"categorical\"\n", + ")\n", + "\n", + "print(\"\\nLoading Validation Dataset (20% Split)...\")\n", + "val_ds = tf.keras.utils.image_dataset_from_directory(\n", + " DATASET_DIR,\n", + " validation_split=0.2,\n", + " subset=\"validation\",\n", + " seed=123,\n", + " image_size=IMAGE_SIZE,\n", + " batch_size=BATCH_SIZE,\n", + " label_mode=\"categorical\"\n", + ")\n", + "\n", + "# Extract total classes found by TensorFlow\n", + "NUM_CLASSES = len(train_ds.class_names)\n", + "print(f\"\\nTotal Target Classification Categories: {NUM_CLASSES}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "6018994f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Data acceleration pipeline and runtime data augmentation initialized successfully.\n" + ] + } + ], + "source": [ + "# Create an on-the-fly data augmentation mathematical pipeline\n", + "data_augmentation = tf.keras.Sequential([\n", + " layers.RandomFlip(\"horizontal\"),\n", + " layers.RandomRotation(0.15),\n", + " layers.RandomZoom(0.1)\n", + "])\n", + "\n", + "# Optimize disk-to-RAM data processing streams using AUTOTUNE\n", + "AUTOTUNE = tf.data.AUTOTUNE\n", + "\n", + "# Apply augmentation to the training dataset\n", + "train_ds = train_ds.map(lambda x, y: (data_augmentation(x, training=True), y))\n", + "\n", + "# Cache, shuffle, and prefetch batches into RAM for faster execution\n", + "train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)\n", + "val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)\n", + "\n", + "print(\" Data acceleration pipeline and runtime data augmentation initialized successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "52a45bdf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Custom CNN and VGG16 models instantiated successfully.\n" + ] + } + ], + "source": [ + "# 1. Baseline Model: Custom CNN Architecture\n", + "def build_custom_cnn():\n", + " model = models.Sequential([\n", + " # Rescaling layer normalizes pixel integers (0-255) to decimals (0-1)\n", + " layers.Rescaling(1./255, input_shape=(224, 224, 3)),\n", + " \n", + " layers.Conv2D(32, (3, 3), activation='relu'),\n", + " layers.MaxPooling2D((2, 2)),\n", + " \n", + " layers.Conv2D(64, (3, 3), activation='relu'),\n", + " layers.MaxPooling2D((2, 2)),\n", + " \n", + " layers.Conv2D(128, (3, 3), activation='relu'),\n", + " layers.MaxPooling2D((2, 2)),\n", + " \n", + " layers.Flatten(),\n", + " layers.Dense(256, activation='relu'),\n", + " layers.Dropout(0.5), # Prevents neurons from over-relying on specific features\n", + " layers.Dense(NUM_CLASSES, activation='softmax') # Outputs a probability distribution for the 150 classes\n", + " ])\n", + " return model\n", + "\n", + "# 2. Transfer Learning Model Factory\n", + "def build_transfer_model(model_choice):\n", + " inputs = layers.Input(shape=(224, 224, 3))\n", + " x = layers.Rescaling(1./255)(inputs)\n", + " \n", + " if model_choice == \"vgg16\":\n", + " base = VGG16(include_top=False, weights='imagenet', input_shape=(224, 224, 3))\n", + " elif model_choice == \"inception\":\n", + " base = InceptionV3(include_top=False, weights='imagenet', input_shape=(224, 224, 3))\n", + " elif model_choice == \"mobilenet\":\n", + " base = MobileNetV2(include_top=False, weights='imagenet', input_shape=(224, 224, 3))\n", + " \n", + " base.trainable = False # Freeze pre-trained weights so we don't destroy them during training\n", + " \n", + " x = base(x, training=False)\n", + " x = layers.GlobalAveragePooling2D()(x)\n", + " x = layers.Dense(256, activation='relu')(x)\n", + " x = layers.Dropout(0.3)(x)\n", + " outputs = layers.Dense(NUM_CLASSES, activation='softmax')(x)\n", + " \n", + " return models.Model(inputs, outputs)\n", + "\n", + "# Initialize instances of our models\n", + "custom_model = build_custom_cnn()\n", + "vgg_model = build_transfer_model(\"vgg16\")\n", + "\n", + "print(\" Custom CNN and VGG16 models instantiated successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "bdeeb4d8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Both models compiled with separate learning optimization parameters.\n" + ] + } + ], + "source": [ + "# Configure standard learning algorithms\n", + "OPTIMIZER_CUSTOM = tf.keras.optimizers.Adam(learning_rate=0.001)\n", + "OPTIMIZER_VGG = tf.keras.optimizers.Adam(learning_rate=0.0001) # Lower rate for transfer learning\n", + "\n", + "LOSS_FUNCTION = tf.keras.losses.CategoricalCrossentropy()\n", + "METRICS = ['accuracy']\n", + "\n", + "# Compile Custom CNN\n", + "custom_model.compile(\n", + " optimizer=OPTIMIZER_CUSTOM,\n", + " loss=LOSS_FUNCTION,\n", + " metrics=METRICS\n", + ")\n", + "\n", + "# Compile VGG16 Transfer Learning Model\n", + "vgg_model.compile(\n", + " optimizer=OPTIMIZER_VGG,\n", + " loss=LOSS_FUNCTION,\n", + " metrics=METRICS\n", + ")\n", + "\n", + "print(\" Both models compiled with separate learning optimization parameters.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "703c6d11", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "πŸš€ Starting Custom CNN Training Phase...\n", + "Epoch 1/10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W0000 00:00:1779775315.845448 186745 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "I0000 00:00:1779775325.624706 186756 shuffle_dataset_op.cc:453] ShuffleDatasetV3:18: Filling up shuffle buffer (this may take a while): 52 of 1000\n", + "W0000 00:00:1779775327.331860 186736 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "W0000 00:00:1779775327.706844 186738 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "W0000 00:00:1779775332.117892 186746 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "W0000 00:00:1779775340.668272 186746 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "W0000 00:00:1779775341.384953 186742 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n", + "I0000 00:00:1779775345.708557 186756 shuffle_dataset_op.cc:453] ShuffleDatasetV3:18: Filling up shuffle buffer (this may take a while): 161 of 1000\n", + "I0000 00:00:1779775347.408442 186756 shuffle_dataset_op.cc:483] Shuffle buffer filled.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 418ms/step - accuracy: 0.0086 - loss: 5.1027" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W0000 00:00:1779775420.985909 187356 prefetch_autotuner.cc:55] Prefetch autotuner tried to allocate 19286784 bytes after encountering the first element of size 19286784 bytes.This already causes the autotune ram budget to be exceeded. To stay within the ram budget, either increase the ram budget or reduce element size\n", + "W0000 00:00:1779775424.896249 187346 png_io.cc:96] PNG warning: iCCP: known incorrect sRGB profile\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m112s\u001b[0m 451ms/step - accuracy: 0.0148 - loss: 4.9180 - val_accuracy: 0.0323 - val_loss: 4.5300\n", + "Epoch 2/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m83s\u001b[0m 483ms/step - accuracy: 0.0603 - loss: 4.2738 - val_accuracy: 0.1356 - val_loss: 3.7957\n", + "Epoch 3/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m129s\u001b[0m 757ms/step - accuracy: 0.1365 - loss: 3.6409 - val_accuracy: 0.1848 - val_loss: 3.3174\n", + "Epoch 4/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 493ms/step - accuracy: 0.2548 - loss: 3.0008 - val_accuracy: 0.2918 - val_loss: 2.8839\n", + "Epoch 5/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m83s\u001b[0m 485ms/step - accuracy: 0.4102 - loss: 2.2551 - val_accuracy: 0.3233 - val_loss: 2.8551\n", + "Epoch 6/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 480ms/step - accuracy: 0.5717 - loss: 1.5916 - val_accuracy: 0.3248 - val_loss: 2.9064\n", + "Epoch 7/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 482ms/step - accuracy: 0.6831 - loss: 1.1464 - val_accuracy: 0.3270 - val_loss: 3.1139\n", + "Epoch 8/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 478ms/step - accuracy: 0.7599 - loss: 0.8479 - val_accuracy: 0.3160 - val_loss: 3.3186\n", + "Epoch 9/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 476ms/step - accuracy: 0.8213 - loss: 0.6271 - val_accuracy: 0.3123 - val_loss: 3.6367\n", + "Epoch 10/10\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 477ms/step - accuracy: 0.8686 - loss: 0.4748 - val_accuracy: 0.3424 - val_loss: 3.6260\n" + ] + } + ], + "source": [ + "EPOCHS = 10\n", + "\n", + "print(\"πŸš€ Starting Custom CNN Training Phase...\")\n", + "custom_history = custom_model.fit(\n", + " train_ds,\n", + " validation_data=val_ds,\n", + " epochs=EPOCHS\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2af50809", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "πŸš€ Starting VGG16 Transfer Learning Training Phase...\n", + "Epoch 1/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m676s\u001b[0m 4s/step - accuracy: 0.0086 - loss: 5.0809 - val_accuracy: 0.0117 - val_loss: 4.9856\n", + "Epoch 2/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m676s\u001b[0m 4s/step - accuracy: 0.0159 - loss: 4.9739 - val_accuracy: 0.0293 - val_loss: 4.9328\n", + "Epoch 3/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5726s\u001b[0m 34s/step - accuracy: 0.0291 - loss: 4.9076 - val_accuracy: 0.0491 - val_loss: 4.8814\n", + "Epoch 4/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3029s\u001b[0m 18s/step - accuracy: 0.0466 - loss: 4.8354 - val_accuracy: 0.0674 - val_loss: 4.8190\n", + "Epoch 5/5\n", + "\u001b[1m 12/171\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m6:58\u001b[0m 3s/step - accuracy: 0.1047 - loss: 4.7477" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m VGG_EPOCHS \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m \u001b[38;5;66;03m# Transfer learning features converge much faster!\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mπŸš€ Starting VGG16 Transfer Learning Training Phase...\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m vgg_history \u001b[38;5;241m=\u001b[39m \u001b[43mvgg_model\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mval_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mVGG_EPOCHS\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/keras/src/backend/tensorflow/trainer.py:399\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 397\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m begin_step, end_step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator:\n\u001b[1;32m 398\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(begin_step)\n\u001b[0;32m--> 399\u001b[0m logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 400\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_end(end_step, logs)\n\u001b[1;32m 401\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstop_training:\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/keras/src/backend/tensorflow/trainer.py:241\u001b[0m, in \u001b[0;36mTensorFlowTrainer._make_function..function\u001b[0;34m(iterator)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mfunction\u001b[39m(iterator):\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m 239\u001b[0m iterator, (tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mIterator, tf\u001b[38;5;241m.\u001b[39mdistribute\u001b[38;5;241m.\u001b[39mDistributedIterator)\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m opt_outputs \u001b[38;5;241m=\u001b[39m \u001b[43mmulti_step_on_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m opt_outputs\u001b[38;5;241m.\u001b[39mhas_value():\n\u001b[1;32m 243\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py:164\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 162\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 164\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 166\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:833\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 830\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 832\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 833\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 835\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 836\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:878\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 876\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 878\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mtracing_compilation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 879\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_variable_creation_config\u001b[49m\n\u001b[1;32m 880\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 881\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables:\n\u001b[1;32m 882\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 883\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:139\u001b[0m, in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m bound_args \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mbind(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 138\u001b[0m flat_inputs \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39munpack_inputs(bound_args)\n\u001b[0;32m--> 139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# pylint: disable=protected-access\u001b[39;49;00m\n\u001b[1;32m 140\u001b[0m \u001b[43m \u001b[49m\u001b[43mflat_inputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\n\u001b[1;32m 141\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py:1322\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1318\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1319\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1320\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_preflattened\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1323\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1324\u001b[0m args,\n\u001b[1;32m 1325\u001b[0m possible_gradient_type,\n\u001b[1;32m 1326\u001b[0m executing_eagerly)\n\u001b[1;32m 1327\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:216\u001b[0m, in \u001b[0;36mAtomicFunction.call_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mcall_preflattened\u001b[39m(\u001b[38;5;28mself\u001b[39m, args: Sequence[core\u001b[38;5;241m.\u001b[39mTensor]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 215\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m flat_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mpack_output(flat_outputs)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:251\u001b[0m, in \u001b[0;36mAtomicFunction.call_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m record\u001b[38;5;241m.\u001b[39mstop_recording():\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mexecuting_eagerly():\n\u001b[0;32m--> 251\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_bound_context\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunction_type\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflat_outputs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 257\u001b[0m outputs \u001b[38;5;241m=\u001b[39m make_call_op_in_graph(\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mfunction_call_options\u001b[38;5;241m.\u001b[39mas_attrs(),\n\u001b[1;32m 261\u001b[0m )\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/context.py:1688\u001b[0m, in \u001b[0;36mContext.call_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1686\u001b[0m cancellation_context \u001b[38;5;241m=\u001b[39m cancellation\u001b[38;5;241m.\u001b[39mcontext()\n\u001b[1;32m 1687\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1688\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1689\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mutf-8\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1690\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnum_outputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1691\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtensor_inputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1692\u001b[0m \u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1693\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1694\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1695\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1696\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 1697\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1698\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1702\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_context,\n\u001b[1;32m 1703\u001b[0m )\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/tensorflow/python/eager/execute.py:53\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 52\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 53\u001b[0m tensors \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_Execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_handle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mop_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "VGG_EPOCHS = 5 # Transfer learning features converge much faster!\n", + "\n", + "print(\"πŸš€ Starting VGG16 Transfer Learning Training Phase...\")\n", + "vgg_history = vgg_model.fit(\n", + " train_ds,\n", + " validation_data=val_ds,\n", + " epochs=VGG_EPOCHS\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ab87faae", + "metadata": {}, + "source": [ + "### Why we abandoned VGG16 and pivoted to MobileNetV2\n", + "\n", + "During the initial training phase with VGG16, two massive bottlenecks became apparent:\n", + "1. **Hardware Limitations (CPU Bottleneck):** VGG16 is an incredibly deep and mathematically heavy architecture. Running it on a standard laptop CPU resulted in exponentially increasing epoch times (jumping from 11 minutes to over 1.5 hours per epoch). Deep networks like this practically require a GPU for reasonable parallel matrix multiplications.\n", + "2. **Preprocessing Mismatch:** The validation accuracy was stagnant at ~1-4%. This occurred because VGG16 requires a highly specific mathematical input normalization (`tf.keras.applications.vgg16.preprocess_input`). Because raw scaled pixels `[0, 1]` were passed instead, the pre-trained ImageNet weights were effectively neutralized.\n", + "\n", + "**The Solution:**\n", + "Instead of brute-forcing CPU training, we are pivoting to **MobileNetV2**. \n", + "* MobileNetV2 utilizes **depthwise separable convolutions**, making it an ultra-lightweight architecture explicitly engineered to run fast and efficiently on mobile processors and standard CPUs without sacrificing feature extraction power.\n", + "* We will properly embed its native `preprocess_input` layer directly into the architecture to ensure the ImageNet weights scale correctly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0e28422", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224_no_top.h5\n", + "\u001b[1m9406464/9406464\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 1us/step\n", + "βœ… Lightweight MobileNetV2 compiled and ready for rapid training!\n" + ] + } + ], + "source": [ + "# Build MobileNetV2 with its required preprocessing layer embedded\n", + "def build_fast_mobilenet():\n", + " inputs = layers.Input(shape=(224, 224, 3))\n", + " \n", + " # MobileNetV2 expects inputs scaled between [-1, 1] instead of [0, 1]\n", + " x = tf.keras.applications.mobilenet_v2.preprocess_input(inputs)\n", + " \n", + " base_model = tf.keras.applications.MobileNetV2(\n", + " input_shape=(224, 224, 3),\n", + " include_top=False,\n", + " weights='imagenet'\n", + " )\n", + " base_model.trainable = False # Freeze the pre-trained weights\n", + " \n", + " x = base_model(x, training=False)\n", + " x = layers.GlobalAveragePooling2D()(x)\n", + " x = layers.Dense(256, activation='relu')(x)\n", + " x = layers.Dropout(0.3)(x)\n", + " outputs = layers.Dense(NUM_CLASSES, activation='softmax')(x)\n", + " \n", + " return models.Model(inputs, outputs)\n", + "\n", + "# Instantiate and compile the fast model\n", + "fast_model = build_fast_mobilenet()\n", + "fast_model.compile(\n", + " optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "print(\" Lightweight MobileNetV2 compiled and ready for rapid training!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "95b7c4c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "πŸš€ Launching Fast MobileNetV2 Training...\n", + "Epoch 1/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 295ms/step - accuracy: 0.1043 - loss: 4.4355 - val_accuracy: 0.3321 - val_loss: 3.2551\n", + "Epoch 2/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m55s\u001b[0m 324ms/step - accuracy: 0.4100 - loss: 2.4988 - val_accuracy: 0.5806 - val_loss: 1.9018\n", + "Epoch 3/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m57s\u001b[0m 334ms/step - accuracy: 0.5979 - loss: 1.5905 - val_accuracy: 0.6026 - val_loss: 1.5959\n", + "Epoch 4/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m52s\u001b[0m 304ms/step - accuracy: 0.6979 - loss: 1.1446 - val_accuracy: 0.6320 - val_loss: 1.3877\n", + "Epoch 5/5\n", + "\u001b[1m171/171\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m52s\u001b[0m 302ms/step - accuracy: 0.7626 - loss: 0.8816 - val_accuracy: 0.6694 - val_loss: 1.2614\n" + ] + } + ], + "source": [ + "print(\"πŸš€ Launching Fast MobileNetV2 Training...\")\n", + "fast_history = fast_model.fit(\n", + " train_ds,\n", + " validation_data=val_ds,\n", + " epochs=5\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "69968737", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AcDDwwO7d++ut49YwXX9+vVYv359K42KiIioYWZmZgCAkpISvpiNqBFKSkoA3Pu7Q0RERETUERlcgZaIiKi9MjExgb29PXJzcwEA1tbW7eIlR1VVVSgvLwcAvgyrFsZFV0vFRBAElJSUIDc3F/b29owvEREREXVoLNASERG1oO7duwOApkjbHqjValRWVsLU1BRSqVTfwzEYjIuulo6Jvb295u8MEREREVFHxQItERFRC5JIJOjRowccHR2hUqn0PZxGKS0thVwuh4uLC5dmqIVx0dWSMTEzM+Ods0REREREYIGWiIioVZiYmLSb4pNarQYAWFhYwNLSUs+jMRyMiy7GhIiIiIio5fF5PSIiIiIiIiIiIiI9YYGWiIiIiIiIiIiISE9YoCUiIiIiIiIiIiLSE4kgCIK+B2GIfvnlFwiCAHNz8zY5nyAIUKlUMDMzg0QiaZNzGjrGRBzjoosxEce4iGNcdDEm4hgXXW0dk4qKCkgkEvj5+bX6uYwNc1n9Y0zEMS66GBNxjIs4xkUXYyKOcdFlyLksXxJWh7aevBKJpM0S6PaCMRHHuOhiTMQxLuIYF12MiTjGRVdbx0QikfAfFM3EXFb/GBNxjIsuxkQc4yKOcdHFmIhjXHQZci7LO2iJiIiIiIiIiIiI9IRr0BIRERERERERERHpCQu0RERERERERERERHrCAi0RERERERERERGRnrBAS0RERERERERERKQnLNASERERERERERER6QkLtERERERERERERER6wgItERERERERERERkZ6wQEtERERERERERESkJyzQEhEREREREREREekJC7REREREREREREREesICLREREREREREREZGemOp7AMbu5s2biImJwcWLF3H9+nW4u7vj8OHDDe4nCAKio6Px6aefoqCgAF5eXoiIiICvr2/rD7oNNDcuY8aMQWZmpk57cnIyLCwsWmOobebo0aM4dOgQUlJSoFAo0KdPH8ycORNTpkyBRCKpcz9jnyvNjYsxz5WkpCRER0cjNTUVxcXFcHJyQnBwMMLCwmBra1vvvv/5z3+wc+dOZGVlwc3NDcuWLUNQUFAbjbx1NTcuM2fOxE8//aTTnpiYCA8Pj9Yccpu7e/cuJkyYgJycHHzxxRfw9vaus6+xX1tqNCUmxnxdOXDgACIiInTaQ0JCsHLlyjr36yjzpCNjLiuO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Y8eOITg4WNOemJiIRx55BObm5m011DbVUFzElJSU4NSpU/D29m7FkbUNLy8vxMXFabVduXIF69atw5o1a+r8jsZ8bWluTMQY+3UlMTERJiYmGDBggOh2Y54n9GA4NxrPmK4jzGXFMZdtHOay4pjLMpe9H3PZxmtvuSwLtK2stLQUSUlJAKpvRS8uLsaxY8cAAP7+/nBwcMDs2bORlZWleWzBwsICoaGhiIqKgoODA/r164fPPvsMhYWFmDdvnt6+S0tqTlwOHz6M7777DqNGjYKjoyNu376NHTt2wMTEBHPnztXbd2kpa9aswXfffYdVq1ahuLgYv/76q2bbgAEDYG5u3iHnSnPiYuxzJSwsDIMGDYKnpycsLS1x9epVxMTEwNPTU5Owvvbaazh48CAuX76s2S88PBwrV66Ei4sLAgICkJiYiOTkZHzyySf6+iotqjlxOXfuHHbu3Ilx48bB2dkZubm5+Pjjj5GXl4cPPvhAn1+nRchkMgQEBIhuGzhwIAYOHAgAHera0tyYGPt1Zd68eQgICICnpycA4JtvvsG+ffswa9YsdOvWDUDHmid0D3NZccxldTGXFcdcVhdzWXHMZXUxl9XFXFacMeSyLNC2svz8fCxZskSrreZzXFwcAgICoFarUVVVpdUnJCQEgiBg165dKCgogJeXF2JiYozm0Y3mxKVXr17Izc3Fu+++C6VSCVtbWzz88MNYvHixUcTlzJkzAID169frbPvmm2/Qq1evDjlXmhMXY58rPj4+SExMxI4dOyAIApydnfHss89i3rx5mrsHxObKpEmTUFpaiujoaOzYsQNubm7YsmWLUbzdFWheXLp16waVSoXNmzejsLAQVlZWGDJkCNasWQMfHx99fZU21xGvLQ3paNcVNzc37N+/H9nZ2VCr1XB1dcVrr72GmTNnavpwnnRMzGXFMZfVxVxWHHNZXcxlxTGXbb6OeG1pSEe7rhhDLisRBEFo87MSEREREREREREREZr26kgiIiIiIiIiIiIiajEs0BIRERERERERERHpCQu0RERERERERERERHrCAi0RERERERERERGRnrBAS0RERERERERERKQnLNASERERERERERER6QkLtERERERERERERER6wgItERERERERERERkZ6wQEtERACAAwcOwNPTE5cuXdL3UIiIiIiImoS5LBG1Z6b6HgARUUdy4MABRERE1Ll979698PX1bbsBERERERE1EnNZIqLWwQItEZEeLF68GL169dJpd3Fx0cNoiIiIiIgaj7ksEVHLYoGWiEgPRo4cCW9vb30Pg4iIiIioyZjLEhG1LK5BS0RkYDIyMuDp6YmYmBjs3r0bQUFB8PHxwYwZM3Dt2jWd/t9//z1eeOEF+Pr6YujQoVi4cCFu3Lih0y8nJwevvfYaRowYgUGDBmHMmDF48803UVFRodWvoqIC69atw8MPPwxfX18sWrQIBQUFWn0uXbqEefPmISAgAD4+PhgzZky9j7sRERERUcfAXJaIqOl4By0RkR4UFxfrJIoSiQSdO3fWfD548CDu3r2LF154AeXl5YiPj8fs2bORkJCArl27AgDOnj2LkJAQ9OrVC2FhYSgrK8Mnn3yC559/HgcOHNA8epaTk4OpU6dCqVRi2rRpcHd3R05ODr7++muUlZXB3Nxcc961a9dCJpMhLCwMmZmZiI2Nxdtvv433338fAJCfn4958+ahc+fOWLBgAWQyGTIyMnDixIlWjhoRERERGQLmskRELYsFWiIiPZgzZ45Om7m5udZbZ2/duoXjx4/DyckJQPWjZM8++yyio6M1P+F/7733YGdnh71798Le3h4AEBwcjKeffhpRUVHYsGEDAODf//437ty5g3379mk9jrZkyRIIgqA1Dnt7e+zatQsSiQQAoFarER8fD6VSCVtbW1y4cAFFRUWIiYnROtayZcsePDBEREREZPCYyxIRtSwWaImI9GD16tVwc3PTapNKtVedCQ4O1iS0AODj44PBgwcjKSkJERERyM3NxZUrVzB//nxNQgsA/fv3R2BgIJKSkgBUJ6UnT55EUFCQ6FphNclrjWnTpmm1DR06FLt370ZmZib69+8PW1tbAMCpU6fQv39/mJmZNS8IRERERNQuMZclImpZLNASEemBj49Pgy9W6NOnj06bq6srjh49CgDIysoCAJ3kGAA8PDzwv//9DyUlJSgpKUFxcTH+9re/NWpsPXv21Posk8kAAAqFAgDg7++Pxx57DFu2bMHu3bvh7++P4OBgPPnkk1qPlxERERGRcWIuS0TUsviSMCIi0nL/3Q81ah4fk0gkiIyMxN69ezFjxgzNCxueeeYZ3L17ty2HSkRERESkhbksEbVHLNASERmomzdv6rSlp6fD2dkZwL27A9LS0nT6yeVydO7cGdbW1nBwcICNjQ2uX7/eouPz9fXFsmXLcODAAWzcuBHXr19HYmJii56DiIiIiNon5rJERI3HAi0RkYE6efIkcnJyNJ+Tk5Nx8eJFjBw5EgDg6OgILy8vHDx4UPPIFgBcu3YNZ86cwahRowBU30UQHByM7777TuvFDTXuf7FCQ4qKinT28fLyAgBUVFQ06VhEREREZJyYyxIRNR7XoCUi0oPTp09DLpfrtPv5+WleauDi4oLnn38ezz//PCoqKhAXFwd7e3vMnz9f0/+VV15BSEgInnvuOUydOhVlZWX45JNPYGtri7CwME2/5cuX48yZM5g5cyamTZsGDw8P5OXl4dixY/j00081a3M1xpdffonPPvsMwcHBcHFxwd27d7Fv3z7Y2NhoEm4iIiIiMl7MZYmIWhYLtEREehAZGSnavm7dOvj7+wMAnnrqKUilUsTGxiI/Px8+Pj5444034OjoqOkfGBiInTt3IjIyEpGRkTA1NcWwYcPw8ssvo3fv3pp+Tk5O2LdvHz744AMkJCSguLgYTk5OGDlyJCwtLZs0dn9/f1y6dAmJiYm4c+cObG1t4ePjg40bN2qdk4iIiIiME3NZIqKWJRGa+jwAERG1qoyMDIwdOxavvPIK5s2bp+/hEBERERE1GnNZIqKm4xq0RERERERERERERHrCAi0RERERERERERGRnrBAS0RERERERERERKQnXIOWiIiIiIiIiIiISE94By0RERERERERERGRnrBAS0RERERERERERKQnLNASERERERERERER6QkLtERERERERERERER6wgItERERERERERERkZ6wQEtERERERERERESkJyzQEhEREREREREREekJC7REREREREREREREesICLREREREREREREZGe/H+ZSS6hvMJEaAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Extract metrics from training logs\n", + "acc = fast_history.history['accuracy']\n", + "val_acc = fast_history.history['val_accuracy']\n", + "loss = fast_history.history['loss']\n", + "val_loss = fast_history.history['val_loss']\n", + "epochs_range = range(1, len(acc) + 1)\n", + "\n", + "# Create plotting canvas\n", + "plt.figure(figsize=(14, 5))\n", + "\n", + "# Plot 1: Accuracy Curves\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(epochs_range, acc, 'b-o', label='Training Accuracy')\n", + "plt.plot(epochs_range, val_acc, 'r-s', label='Validation Accuracy')\n", + "plt.title('MobileNetV2 Training vs Validation Accuracy')\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('Accuracy')\n", + "plt.legend(loc='lower right')\n", + "plt.grid(True)\n", + "\n", + "# Plot 2: Loss Curves\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(epochs_range, loss, 'b-o', label='Training Loss')\n", + "plt.plot(epochs_range, val_loss, 'r-s', label='Validation Loss')\n", + "plt.title('MobileNetV2 Training vs Validation Loss')\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('Cross-Entropy Loss')\n", + "plt.legend(loc='upper right')\n", + "plt.grid(True)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "217291f0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Targeting absolute destination: /mnt/c/Users/Shrinidhi Walvekar/Desktop/gssoc/DL-Simplified/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'fast_model' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m SAVE_PATH \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/mnt/c/Users/Shrinidhi Walvekar/Desktop/gssoc/DL-Simplified/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTargeting absolute destination: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mSAVE_PATH\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m \u001b[43mfast_model\u001b[49m\u001b[38;5;241m.\u001b[39msave(SAVE_PATH)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mπŸ“¦ Model saved successfully at: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mSAVE_PATH\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'fast_model' is not defined" + ] + } + ], + "source": [ + "SAVE_PATH = \"/mnt/c/Users/Shrinidhi Walvekar/Desktop/gssoc/DL-Simplified/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras\"\n", + "\n", + "print(f\"Targeting absolute destination: {SAVE_PATH}\")\n", + "fast_model.save(SAVE_PATH)\n", + "\n", + "print(f\"πŸ“¦ Model saved successfully at: {SAVE_PATH}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras b/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras new file mode 100644 index 000000000..4e702cfed Binary files /dev/null and b/Pokemon classification using Deep learning/Model/pokemon_mobilenetv2.keras differ diff --git a/Pokemon classification using Deep learning/requirements.txt b/Pokemon classification using Deep learning/requirements.txt new file mode 100644 index 000000000..a623994b0 --- /dev/null +++ b/Pokemon classification using Deep learning/requirements.txt @@ -0,0 +1,6 @@ +tensorflow>=2.10.0 +numpy +matplotlib +seaborn +scikit-learn +pandas