{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h2 style='color:blue' align='center'>Small Image Classification Using Convolutional Neural Network (CNN)</h2>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook, we will classify small images cifar10 dataset from tensorflow keras datasets. There are total 10 classes as shown below. We will use CNN for classification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"small_images.jpg\" />"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow.keras import datasets, layers, models\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h4 style=\"color:purple\">Load the dataset</h4>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50000, 32, 32, 3)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(X_train, y_train), (X_test,y_test) = datasets.cifar10.load_data()\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, 32, 32, 3)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we see there are 50000 training images and 1000 test images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50000, 1)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6],\n",
       "       [9],\n",
       "       [9],\n",
       "       [4],\n",
       "       [1]], dtype=uint8)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train[:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "y_train is a 2D array, for our classification having 1D array is good enough. so we will convert this to now 1D array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 9, 9, ..., 9, 1, 1], dtype=uint8)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train = y_train.reshape(-1,)\n",
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test = y_test.reshape(-1,)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "classes = [\"airplane\",\"automobile\",\"bird\",\"cat\",\"deer\",\"dog\",\"frog\",\"horse\",\"ship\",\"truck\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot some images to see what they are "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_sample(X, y, index):\n",
    "    plt.figure(figsize = (15,2))\n",
    "    plt.imshow(X[index])\n",
    "    plt.xlabel(classes[y[index]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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9+8fv05fYCRUXhBsKDmbRBBKDVESQbBBlEQQbBAlEQQbREkEwQZREkGwQZREEGwQJSlRlFL4+c9/jurqahiGgX379o13ly5bxJlYorzyyitYtmwZtm/fjmnTpqGmpgYuTa12YeyRu16ifPLJJ6irqztvEGEmk6G6icLYIMOtEuSuu+7CqlWrcOzYMRiGgalTp6K1tRUrV65EW1sbampqCiX4duzYgfnz58Pr9aKurg5r1qxBLjdUrCYajeKnP/0pysvLUVdXh8cffxytra1YvXr1OF3dxYcoSQny5JNP4pFHHkFjYyO6u7uxe/duAMCWLVvgcrnw5ptv4plnnsGJEyfwgx/8APPmzcM///lPbNq0Cc8++yx+/etfF47V1taGN998E9u2bUNnZyd27tyJd955Z7wu7eJkXMMrhfPy+OOPqylTphS2Fy1apK677jpLmwcffFBNnz5dmaZZkD311FOqoqJC5fN5FYlElNvtVn/9618L3w8MDKiysjJ1//33j/UlXDKITXIRMXeutZb9Bx98gIULF1qW0d5www2IxWI4fvw4+vv7kc1mMX/+/ML3wWAQ06dPv2B9vhSQ4dZFRHl5uWVbadaZqy8mKw3DsPytayN8OURJLmJmzJiBXbt2Wf7pd+3ahUAggIaGBlxxxRVwu914++23C99HIhF8/PHH49HdixZRkouYFStWoKurC6tWrcKhQ4fw0ksv4eGHH0ZbWxscDgcCgQDuvPNO/OIXv8Drr7+OAwcO4Gc/+xkcDsdlk+lkNBAluYhpaGjAyy+/jLfffhuzZs3C8uXLcffdd+OXv/xloc2GDRuwcOFC/OhHP8L3vvc93HDDDbjmmmvg8/nGsecXF+Jxv8yIx+NoaGjA7373O9x9993j3Z2LApndusR59913cejQIcyfPx+Dg4N45JFHAADLli0b555dPIiSXAb89re/xYcffljIabZz507U1NSMd7cuGmS4JQg2iOEuCDaIkgiCDaIkgmCDKIkg2CBKIgg2iJIIgg2iJIJggyiJINggSiIINvx/OnEJ35W/EPYAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1500x200 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_sample(X_train, y_train, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1500x200 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_sample(X_train, y_train, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Normalize the images to a number from 0 to 1. Image has 3 channels (R,G,B) and each value in the channel can range from 0 to 255. Hence to normalize in 0-->1 range, we need to divide it by 255"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h4 style=\"color:purple\">Normalizing the training data</h4>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = X_train / 255.0\n",
    "X_test = X_test / 255.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[1.        , 1.        , 1.        ],\n",
       "        [0.99215686, 0.99215686, 0.99215686],\n",
       "        [0.99215686, 0.99215686, 0.99215686],\n",
       "        ...,\n",
       "        [0.99215686, 0.99215686, 0.99215686],\n",
       "        [0.99215686, 0.99215686, 0.99215686],\n",
       "        [0.99215686, 0.99215686, 0.99215686]],\n",
       "\n",
       "       [[1.        , 1.        , 1.        ],\n",
       "        [1.        , 1.        , 1.        ],\n",
       "        [1.        , 1.        , 1.        ],\n",
       "        ...,\n",
       "        [1.        , 1.        , 1.        ],\n",
       "        [1.        , 1.        , 1.        ],\n",
       "        [1.        , 1.        , 1.        ]],\n",
       "\n",
       "       [[1.        , 1.        , 1.        ],\n",
       "        [0.99607843, 0.99607843, 0.99607843],\n",
       "        [0.99607843, 0.99607843, 0.99607843],\n",
       "        ...,\n",
       "        [0.99607843, 0.99607843, 0.99607843],\n",
       "        [0.99607843, 0.99607843, 0.99607843],\n",
       "        [0.99607843, 0.99607843, 0.99607843]],\n",
       "\n",
       "       ...,\n",
       "\n",
       "       [[0.44313725, 0.47058824, 0.43921569],\n",
       "        [0.43529412, 0.4627451 , 0.43529412],\n",
       "        [0.41176471, 0.43921569, 0.41568627],\n",
       "        ...,\n",
       "        [0.28235294, 0.31764706, 0.31372549],\n",
       "        [0.28235294, 0.31372549, 0.30980392],\n",
       "        [0.28235294, 0.31372549, 0.30980392]],\n",
       "\n",
       "       [[0.43529412, 0.4627451 , 0.43137255],\n",
       "        [0.40784314, 0.43529412, 0.40784314],\n",
       "        [0.38823529, 0.41568627, 0.38431373],\n",
       "        ...,\n",
       "        [0.26666667, 0.29411765, 0.28627451],\n",
       "        [0.2745098 , 0.29803922, 0.29411765],\n",
       "        [0.30588235, 0.32941176, 0.32156863]],\n",
       "\n",
       "       [[0.41568627, 0.44313725, 0.41176471],\n",
       "        [0.38823529, 0.41568627, 0.38431373],\n",
       "        [0.37254902, 0.4       , 0.36862745],\n",
       "        ...,\n",
       "        [0.30588235, 0.33333333, 0.3254902 ],\n",
       "        [0.30980392, 0.33333333, 0.3254902 ],\n",
       "        [0.31372549, 0.3372549 , 0.32941176]]])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using Artificial Neural Network (ANN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\aliyu\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\reshaping\\flatten.py:37: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
      "  super().__init__(**kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 10ms/step - accuracy: 0.2968 - loss: 1.9356\n",
      "Epoch 2/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 10ms/step - accuracy: 0.4220 - loss: 1.6348\n",
      "Epoch 3/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 10ms/step - accuracy: 0.4521 - loss: 1.5484\n",
      "Epoch 4/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 10ms/step - accuracy: 0.4813 - loss: 1.4842\n",
      "Epoch 5/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 10ms/step - accuracy: 0.4992 - loss: 1.4311\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.src.callbacks.history.History at 0x1816a5a9160>"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ann = models.Sequential([\n",
    "        layers.Flatten(input_shape=(32,32,3)),\n",
    "        layers.Dense(3000, activation='relu'),\n",
    "        layers.Dense(1000, activation='relu'),\n",
    "        layers.Dense(10, activation='softmax')    \n",
    "    ])\n",
    "\n",
    "ann.compile(optimizer='SGD',\n",
    "              loss='sparse_categorical_crossentropy',\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "ann.fit(X_train, y_train, epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.4917 - loss: 1.4282\n",
      "Test Accuracy: 0.4875\n"
     ]
    }
   ],
   "source": [
    "# Evaluate on test data\n",
    "test_loss, test_acc = ann.evaluate(X_test, y_test)\n",
    "print(f\"Test Accuracy: {test_acc:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "**At the end of 5 epochs, accuracy is at around 49%**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step\n",
      "Classification Report: \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.58      0.53      0.55      1000\n",
      "           1       0.58      0.67      0.62      1000\n",
      "           2       0.42      0.25      0.32      1000\n",
      "           3       0.33      0.31      0.32      1000\n",
      "           4       0.62      0.21      0.32      1000\n",
      "           5       0.34      0.46      0.39      1000\n",
      "           6       0.45      0.66      0.53      1000\n",
      "           7       0.52      0.58      0.55      1000\n",
      "           8       0.58      0.67      0.62      1000\n",
      "           9       0.55      0.54      0.54      1000\n",
      "\n",
      "    accuracy                           0.49     10000\n",
      "   macro avg       0.50      0.49      0.48     10000\n",
      "weighted avg       0.50      0.49      0.48     10000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix , classification_report\n",
    "import numpy as np\n",
    "y_pred = ann.predict(X_test)\n",
    "y_pred_classes = [np.argmax(element) for element in y_pred]\n",
    "\n",
    "print(\"Classification Report: \\n\", classification_report(y_test, y_pred_classes))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Use Validation Dataset During Training for ANN model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "\u001b[1m1172/1172\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 11ms/step - accuracy: 0.5077 - loss: 1.3988 - val_accuracy: 0.5114 - val_loss: 1.3906\n",
      "Epoch 2/5\n",
      "\u001b[1m1172/1172\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 11ms/step - accuracy: 0.5257 - loss: 1.3496 - val_accuracy: 0.5072 - val_loss: 1.3906\n",
      "Epoch 3/5\n",
      "\u001b[1m1172/1172\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 11ms/step - accuracy: 0.5346 - loss: 1.3200 - val_accuracy: 0.5221 - val_loss: 1.3508\n",
      "Epoch 4/5\n",
      "\u001b[1m1172/1172\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 12ms/step - accuracy: 0.5536 - loss: 1.2870 - val_accuracy: 0.4863 - val_loss: 1.4346\n",
      "Epoch 5/5\n",
      "\u001b[1m1172/1172\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 13ms/step - accuracy: 0.5595 - loss: 1.2560 - val_accuracy: 0.5282 - val_loss: 1.3319\n"
     ]
    }
   ],
   "source": [
    "# The training dataset \n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# split the training data into train and validation using the SciKitLearn package \"train_test_split\"\n",
    "X2_train, X_val, y2_train, y_val = train_test_split(X_train, y_train , test_size=0.25, random_state=104) \n",
    "\n",
    "# Retrain the model with Training and Validation Dataset.Compile & Train\n",
    "# keep history to plot for progress with Epoch\n",
    "history = ann.fit(X2_train, y2_train, validation_data=(X_val, y_val), epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.5115 - loss: 1.3775\n",
      "Test Accuracy: 0.5075\n"
     ]
    }
   ],
   "source": [
    "# Evaluate on test data\n",
    "test_loss, test_acc = ann.evaluate(X_test, y_test)\n",
    "print(f\"Test Accuracy: {test_acc:.4f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step\n",
      "Classification Report: \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.46      0.72      0.56      1000\n",
      "           1       0.57      0.69      0.62      1000\n",
      "           2       0.46      0.30      0.36      1000\n",
      "           3       0.42      0.28      0.34      1000\n",
      "           4       0.38      0.53      0.44      1000\n",
      "           5       0.55      0.27      0.36      1000\n",
      "           6       0.52      0.63      0.57      1000\n",
      "           7       0.55      0.59      0.57      1000\n",
      "           8       0.63      0.64      0.64      1000\n",
      "           9       0.59      0.41      0.49      1000\n",
      "\n",
      "    accuracy                           0.51     10000\n",
      "   macro avg       0.51      0.51      0.50     10000\n",
      "weighted avg       0.51      0.51      0.50     10000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix , classification_report\n",
    "import numpy as np\n",
    "y_pred = ann.predict(X_test)\n",
    "y_pred_classes = [np.argmax(element) for element in y_pred]\n",
    "\n",
    "print(\"Classification Report: \\n\", classification_report(y_test, y_pred_classes))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def plot_history(history):\n",
    "    acc = history.history[\"accuracy\"]\n",
    "    loss = history.history[\"loss\"]\n",
    "    val_loss = history.history[\"val_loss\"]\n",
    "    val_accuracy = history.history[\"val_accuracy\"]\n",
    "    \n",
    "    x = range(1, len(acc) + 1)\n",
    "    \n",
    "    plt.figure(figsize=(12,5))\n",
    "\n",
    "    # Accuracy plot\n",
    "    plt.subplot(1, 2, 1)\n",
    "    plt.plot(x, acc, \"b\", label=\"Training Accuracy\")\n",
    "    plt.plot(x, val_accuracy, \"r\", label=\"Validation Accuracy\")\n",
    "    plt.title(\"Accuracy\")\n",
    "    plt.xlabel(\"Epochs\")\n",
    "    plt.ylabel(\"Accuracy\")\n",
    "    plt.legend()\n",
    "\n",
    "    # Loss plot\n",
    "    plt.subplot(1, 2, 2)\n",
    "    plt.plot(x, loss, \"b\", label=\"Training Loss\")\n",
    "    plt.plot(x, val_loss, \"r\", label=\"Validation Loss\")\n",
    "    plt.title(\"Loss\")\n",
    "    plt.xlabel(\"Epochs\")\n",
    "    plt.ylabel(\"Loss\")\n",
    "    plt.legend()\n",
    "\n",
    "    plt.show()\n",
    "\n",
    "plot_history(history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using Convolutional Neural Network (CNN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\aliyu\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\convolutional\\base_conv.py:107: 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"
     ]
    }
   ],
   "source": [
    "cnn = models.Sequential([\n",
    "    layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)),\n",
    "    layers.MaxPooling2D((2, 2)),\n",
    "    \n",
    "    layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),\n",
    "    layers.MaxPooling2D((2, 2)),\n",
    "    \n",
    "    layers.Flatten(),\n",
    "    layers.Dense(64, activation='relu'),\n",
    "    layers.Dense(10, activation='softmax')\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "cnn.compile(optimizer='adam',\n",
    "              loss='sparse_categorical_crossentropy',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.6562 - loss: 0.9888\n",
      "Epoch 2/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.6935 - loss: 0.8871\n",
      "Epoch 3/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.7121 - loss: 0.8366\n",
      "Epoch 4/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.7354 - loss: 0.7627\n",
      "Epoch 5/5\n",
      "\u001b[1m1563/1563\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.7470 - loss: 0.7298\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.src.callbacks.history.History at 0x1816a692840>"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cnn.fit(X_train, y_train, epochs=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**With CNN, at the end 5 epochs, accuracy was at around 70% which is a significant improvement over ANN. CNN's are best for image classification and gives superb accuracy. Also computation is much less compared to simple ANN as maxpooling reduces the image dimensions while still preserving the features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.7050 - loss: 0.8858\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.8964060544967651, 0.6973000168800354]"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cnn.evaluate(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n",
      "Classification Report: \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.75      0.73      0.74      1000\n",
      "           1       0.81      0.84      0.82      1000\n",
      "           2       0.58      0.59      0.59      1000\n",
      "           3       0.49      0.55      0.52      1000\n",
      "           4       0.59      0.71      0.64      1000\n",
      "           5       0.73      0.47      0.57      1000\n",
      "           6       0.71      0.83      0.76      1000\n",
      "           7       0.74      0.72      0.73      1000\n",
      "           8       0.81      0.79      0.80      1000\n",
      "           9       0.82      0.74      0.78      1000\n",
      "\n",
      "    accuracy                           0.70     10000\n",
      "   macro avg       0.70      0.70      0.70     10000\n",
      "weighted avg       0.70      0.70      0.70     10000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "y_pred = cnn.predict(X_test)\n",
    "y_pred_classes = [np.argmax(element) for element in y_pred]\n",
    "\n",
    "print(\"Classification Report: \\n\", classification_report(y_test, y_pred_classes))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "anaconda-panel-2023.05-py310",
   "language": "python",
   "name": "conda-env-anaconda-panel-2023.05-py310-py"
  },
  "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.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
