Created
October 16, 2025 12:04
-
-
Save mattbullen/1414092c01e7dd4c4e462dfe9840a5aa to your computer and use it in GitHub Desktop.
Unit09 Ex1 Convolutional Neural Networks (CNN) - Object Recognition.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/mattbullen/1414092c01e7dd4c4e462dfe9840a5aa/unit09-ex1-convolutional-neural-networks-cnn-object-recognition.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "1c4zG7AH3fyM" | |
| }, | |
| "source": [ | |
| "# Convolutional Neural Networks (CNN) - Object Recognition" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "xOOyVK6l3fyN" | |
| }, | |
| "source": [ | |
| "# Imports" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "E2kgc6Lk3fyN" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from numpy.random import seed\n", | |
| "seed(888)\n", | |
| "\n", | |
| "#from tensorflow import set_random_seed\n", | |
| "#set_random_seed(4112)\n", | |
| "import tensorflow\n", | |
| "tensorflow.random.set_seed(112)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "TAIwPch63fyO" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import os\n", | |
| "import numpy as np\n", | |
| "import itertools\n", | |
| "\n", | |
| "import tensorflow as tf\n", | |
| "import keras\n", | |
| "from keras.datasets import cifar10 # importing the dataset\n", | |
| "\n", | |
| "from keras.models import Sequential #to define model/ layers\n", | |
| "from keras.layers import Dense, Conv2D, MaxPool2D, Flatten\n", | |
| "\n", | |
| "from sklearn.metrics import confusion_matrix\n", | |
| "\n", | |
| "# To Explore the images\n", | |
| "from IPython.display import display\n", | |
| "from keras.preprocessing.image import array_to_img\n", | |
| "\n", | |
| "from tensorflow.keras.utils import to_categorical\n", | |
| "\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "tE3fULJa3fyO" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "OrbvcmES3fyO" | |
| }, | |
| "source": [ | |
| "We are using Tensorflow to power Keras" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "6cUgYQSz3fyO" | |
| }, | |
| "source": [ | |
| "# Get the Dataset" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "-htHf_8n3fyP" | |
| }, | |
| "source": [ | |
| "CIFAR-10 is an established computer-vision dataset used for object recognition. It is a subset of the 80 million tiny images dataset and consists of 60,000 32x32 color images containing one of 10 object classes, with 6000 images per class. It was collected by Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton.\n", | |
| "The dataset is popularly used to train image classification models." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "SD97cB5T3fyP" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Getting the dataset as a Tuple\n", | |
| "\n", | |
| "(x_train_all, y_train_all), (x_test, y_test) = cifar10.load_data()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "NJ9oUQw83fyP" | |
| }, | |
| "source": [ | |
| "# Constants" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "pV09lhVS3fyQ" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "LABEL_NAMES = ['airplane', 'automobile','bird','cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "wP-eU7NK3fyQ" | |
| }, | |
| "source": [ | |
| "# Exploring the Data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "JacFtIix3fyQ" | |
| }, | |
| "source": [ | |
| "Lets look at the first image in the dataset" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "nbz07DzN3fyQ", | |
| "outputId": "2e135a00-2fa9-4569-b45d-94553c4f8367" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(50000, 32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_train_all.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "scrolled": true, | |
| "id": "6bSRvU0W3fyQ", | |
| "outputId": "403ea7e9-a19b-4293-c00d-7ef7cef83449" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[ 59, 62, 63],\n", | |
| " [ 43, 46, 45],\n", | |
| " [ 50, 48, 43],\n", | |
| " ...,\n", | |
| " [158, 132, 108],\n", | |
| " [152, 125, 102],\n", | |
| " [148, 124, 103]],\n", | |
| "\n", | |
| " [[ 16, 20, 20],\n", | |
| " [ 0, 0, 0],\n", | |
| " [ 18, 8, 0],\n", | |
| " ...,\n", | |
| " [123, 88, 55],\n", | |
| " [119, 83, 50],\n", | |
| " [122, 87, 57]],\n", | |
| "\n", | |
| " [[ 25, 24, 21],\n", | |
| " [ 16, 7, 0],\n", | |
| " [ 49, 27, 8],\n", | |
| " ...,\n", | |
| " [118, 84, 50],\n", | |
| " [120, 84, 50],\n", | |
| " [109, 73, 42]],\n", | |
| "\n", | |
| " ...,\n", | |
| "\n", | |
| " [[208, 170, 96],\n", | |
| " [201, 153, 34],\n", | |
| " [198, 161, 26],\n", | |
| " ...,\n", | |
| " [160, 133, 70],\n", | |
| " [ 56, 31, 7],\n", | |
| " [ 53, 34, 20]],\n", | |
| "\n", | |
| " [[180, 139, 96],\n", | |
| " [173, 123, 42],\n", | |
| " [186, 144, 30],\n", | |
| " ...,\n", | |
| " [184, 148, 94],\n", | |
| " [ 97, 62, 34],\n", | |
| " [ 83, 53, 34]],\n", | |
| "\n", | |
| " [[177, 144, 116],\n", | |
| " [168, 129, 94],\n", | |
| " [179, 142, 87],\n", | |
| " ...,\n", | |
| " [216, 184, 140],\n", | |
| " [151, 118, 84],\n", | |
| " [123, 92, 72]]], dtype=uint8)" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_train_all[0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "x4-jz8XF3fyR", | |
| "outputId": "3d958512-8b17-4e55-b5bb-6ce0e2511fa5" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_train_all[0].shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "xXwkG-LA3fyR" | |
| }, | |
| "source": [ | |
| "#### Using ipython to display the image" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "C9HU_mTh3fyR", | |
| "outputId": "ecde9077-4e2c-41f9-8e6c-ebfad4507544" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<PIL.Image.Image image mode=RGB size=32x32 at 0x14327C860>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# To use the ipython display to view an image\n", | |
| "\n", | |
| "pic = array_to_img(x_train_all[0])\n", | |
| "display(pic)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "42YHI9PF3fyR" | |
| }, | |
| "source": [ | |
| "#### Using Matplotlib to view the image" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "jmQ3w9gd3fyR", | |
| "outputId": "81712f11-a49b-44c1-adca-65fa460c9840" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.image.AxesImage at 0x15007a908>" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.imshow(x_train_all[0])\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "CUI-QtO83fyR", | |
| "outputId": "7db6d560-43f1-451e-bc6e-1124ae2a1cbb" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(50000, 1)" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# To check the label\n", | |
| "y_train_all.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "AswWMYrT3fyR", | |
| "outputId": "f0c33deb-6a40-41e3-9444-23a4abc1b8d2" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "6" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Note that in the image above the index 1 corresponds to \"Automobile\"\n", | |
| "# we have a 2 dimension numpy array; that is why we also include \" [0] \"\n", | |
| "\n", | |
| "y_train_all[0][0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "KhZRk7-e3fyR", | |
| "outputId": "651f1a4c-d85f-43a5-bda6-c87dca3a62b6" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'frog'" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Using the lable names to get the actual names of classes\n", | |
| "\n", | |
| "LABEL_NAMES[y_train_all[0][0]]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "4bvVmeIx3fyR" | |
| }, | |
| "source": [ | |
| "### The shape of the image\n", | |
| " * 32, 32 is the weight and the height\n", | |
| " * 3 is the number of channels (These are the number of colors): Red, Green & Blue (RGB)\n", | |
| " \n", | |
| " * x_train_all.shape >>> (50000, 32, 32, 3)\n", | |
| " * this means we have 50,000 entries | then 32x32 weight and height| 3 colors (RGB)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "P-4huRHh3fyS", | |
| "outputId": "f985b775-8e8d-4130-897e-5a25503a5325" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(50000, 32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_train_all.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "KpJWBI1-3fyS", | |
| "outputId": "3f81ce57-fc31-4190-9913-6d755e95b67c" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Number of images = 50000 \t| width = 32 \t| height = 32 \t| channels = 3\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "number_of_images, x, y, c = x_train_all.shape\n", | |
| "print(f'Number of images = {number_of_images} \\t| width = {x} \\t| height = {y} \\t| channels = {c}')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "scrolled": true, | |
| "id": "1RaiSztg3fyS", | |
| "outputId": "51ee6354-450a-490c-dc62-e499c23cec7b" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(10000, 32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_test.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "IS6mos7q3fyS" | |
| }, | |
| "source": [ | |
| "# Preprocess Data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "ujgFfGac3fyS" | |
| }, | |
| "source": [ | |
| "#### * We need to preprocess our data so that it is easier to feed it to our neural network.\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "-AzWqGXw3fyS" | |
| }, | |
| "source": [ | |
| "### Scalling both x_train and test\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "KyzLsHmB3fyS" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "x_train_all =x_train_all / 255.0" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "TXphL_Yl3fyS" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "x_test = x_test / 255.0" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "FQ6FGyj93fyS", | |
| "outputId": "0986eae7-e27f-49a2-ffb1-f74c74fa8b70" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[3],\n", | |
| " [8],\n", | |
| " [8],\n", | |
| " ...,\n", | |
| " [5],\n", | |
| " [1],\n", | |
| " [7]], dtype=uint8)" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "y_test" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "ERdOmjok3fyS" | |
| }, | |
| "source": [ | |
| "### Creating categorical encoding for the \"y \" data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "_DYw3fPS3fyS" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# 10 >>> simply means we have 10 classes like we already know (creating the encoding for 10 classes)\n", | |
| "y_cat_train_all = to_categorical(y_train_all,10)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "j0PZc-Rh3fyS" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# 10 >>> simply means we have 10 classes like we already know (creating the encoding for 10 classes)\n", | |
| "y_cat_test = to_categorical(y_test,10)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "0ddBacIo3fyS", | |
| "outputId": "d5b6b279-fe0a-463e-9ff4-095f08946c80" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0., 0., 0., ..., 0., 0., 0.],\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " ...,\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " [0., 1., 0., ..., 0., 0., 0.],\n", | |
| " [0., 1., 0., ..., 0., 0., 0.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "y_cat_train_all" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "3GYQhTy63fyT" | |
| }, | |
| "source": [ | |
| "# Creating the Validation dataset" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "Tls-okd63fyT" | |
| }, | |
| "source": [ | |
| "For small data we usually go with:\n", | |
| " * 60% for Training\n", | |
| " * 20% Validation\n", | |
| " * 20% Testing\n", | |
| " \n", | |
| "Only the final selected model gets to see the testing data. This helps us to ensure that we have close to real data in real-world when the model is deployed. Only our best model gets to see our testing dataset. Because it will give us a realistic impression of how our model will do in the real world\n", | |
| "___\n", | |
| "\n", | |
| "However, if the dataset is enormous.:\n", | |
| " * 1% for is used for validation\n", | |
| " * 1% for is used for testing" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "daioqHdD3fyT" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "VALIDATION_SIZE = 10000" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "qiRwiGyJ3fyT", | |
| "outputId": "e3e00edf-a4cb-4406-f6b9-94064396e983" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(10000, 32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# VALIDATION_SIZE = 10,000 as defined above\n", | |
| "\n", | |
| "x_val = x_train_all[:VALIDATION_SIZE]\n", | |
| "y_val_cat = y_cat_train_all[:VALIDATION_SIZE]\n", | |
| "x_val.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "PxR_iosv3fyU", | |
| "outputId": "dbf87be7-3d38-4d35-c822-39e404bc1763" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0., 0., 0., ..., 0., 0., 0.],\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " ...,\n", | |
| " [0., 1., 0., ..., 0., 0., 0.],\n", | |
| " [0., 1., 0., ..., 0., 0., 0.],\n", | |
| " [0., 0., 0., ..., 0., 0., 0.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "y_val_cat" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "ShOg3KA03fyU" | |
| }, | |
| "source": [ | |
| "<b>NEXT:</b>\n", | |
| "* We Create two NumPy arrays x_train and y_train that have the shape(40000, 3072) and (40000,1) respectively.\n", | |
| "* They will contain the last 40000 values from x_train_all and y_train_all respectively" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "V76KQFuW3fyU" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "x_train = x_train_all[VALIDATION_SIZE:]\n", | |
| "y_cat_train= y_cat_train_all[VALIDATION_SIZE:]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "kU19-rkA3fyU", | |
| "outputId": "44a14583-9f23-4f54-a0ba-7bf2217923c1" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(40000, 32, 32, 3)" | |
| ] | |
| }, | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x_train.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "RYjOboCi3fyU", | |
| "outputId": "30f4ea9e-0a5b-45cd-a6a0-b7302e2d5964" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0., 1., 0., ..., 0., 0., 0.],\n", | |
| " [0., 0., 0., ..., 0., 0., 0.],\n", | |
| " [0., 0., 0., ..., 0., 0., 0.],\n", | |
| " ...,\n", | |
| " [0., 0., 0., ..., 0., 0., 1.],\n", | |
| " [0., 1., 0., ..., 0., 0., 0.],\n", | |
| " [0., 1., 0., ..., 0., 0., 0.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "y_cat_train" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "P7ZmmlmW3fyU" | |
| }, | |
| "source": [ | |
| "## NOTE:\n", | |
| " <h4>* <em>FILTERS: </em>\n", | |
| " Typical values for the number of filters can be determined by the data set's complexity. So essentially the larger the images, the more variety and the more classes you're trying to classify then the more filters you should have.</h4>\n", | |
| " <h4> * Most times people typically pick filter based on powers of 2, for example, 32. However, if you have more complex data like road signs etc. you should be starting with a higher filter value</h4>\n", | |
| " <h4>The default STRIDE value is 1 x 1 pixel</h4>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "6KLsdLNc3fyU" | |
| }, | |
| "source": [ | |
| "# BUILDING THE MODEL" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "TG5zEpb23fyU" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "model = Sequential()\n", | |
| "\n", | |
| "## ************* FIRST SET OF LAYERS *************************\n", | |
| "\n", | |
| "# CONVOLUTIONAL LAYER\n", | |
| "model.add(Conv2D(filters=32, kernel_size=(4,4),input_shape=(32, 32, 3), activation='relu',))\n", | |
| "# POOLING LAYER\n", | |
| "model.add(MaxPool2D(pool_size=(2, 2)))\n", | |
| "\n", | |
| "## *************** SECOND SET OF LAYERS ***********************\n", | |
| "#Since the shape of the data is 32 x 32 x 3 =3072 ...\n", | |
| "#We need to deal with this more complex structure by adding yet another convolutional layer\n", | |
| "\n", | |
| "# *************CONVOLUTIONAL LAYER\n", | |
| "model.add(Conv2D(filters=32, kernel_size=(4,4),input_shape=(32, 32, 3), activation='relu',))\n", | |
| "# POOLING LAYER\n", | |
| "model.add(MaxPool2D(pool_size=(2, 2)))\n", | |
| "\n", | |
| "# FLATTEN IMAGES FROM 32 x 32 x 3 =3072 BEFORE FINAL LAYER\n", | |
| "model.add(Flatten())\n", | |
| "\n", | |
| "# 256 NEURONS IN DENSE HIDDEN LAYER (YOU CAN CHANGE THIS NUMBER OF NEURONS)\n", | |
| "model.add(Dense(256, activation='relu'))\n", | |
| "\n", | |
| "# LAST LAYER IS THE CLASSIFIER, THUS 10 POSSIBLE CLASSES\n", | |
| "model.add(Dense(10, activation='softmax'))\n", | |
| "\n", | |
| "\n", | |
| "model.compile(loss='categorical_crossentropy',\n", | |
| " optimizer='adam',\n", | |
| " metrics=['accuracy'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "z7VtzO7C3fyU", | |
| "outputId": "9f726c19-3022-450b-b258-e8ca8afa29b9" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Model: \"sequential\"\n", | |
| "_________________________________________________________________\n", | |
| "Layer (type) Output Shape Param # \n", | |
| "=================================================================\n", | |
| "conv2d (Conv2D) (None, 29, 29, 32) 1568 \n", | |
| "_________________________________________________________________\n", | |
| "max_pooling2d (MaxPooling2D) (None, 14, 14, 32) 0 \n", | |
| "_________________________________________________________________\n", | |
| "conv2d_1 (Conv2D) (None, 11, 11, 32) 16416 \n", | |
| "_________________________________________________________________\n", | |
| "max_pooling2d_1 (MaxPooling2 (None, 5, 5, 32) 0 \n", | |
| "_________________________________________________________________\n", | |
| "flatten (Flatten) (None, 800) 0 \n", | |
| "_________________________________________________________________\n", | |
| "dense (Dense) (None, 256) 205056 \n", | |
| "_________________________________________________________________\n", | |
| "dense_1 (Dense) (None, 10) 2570 \n", | |
| "=================================================================\n", | |
| "Total params: 225,610\n", | |
| "Trainable params: 225,610\n", | |
| "Non-trainable params: 0\n", | |
| "_________________________________________________________________\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "model.summary()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "9c6dEPiq3fyV" | |
| }, | |
| "source": [ | |
| "### Adding Early stopping" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "SxOUf2Zo3fyV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from tensorflow.keras.callbacks import EarlyStopping" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "8rhYa33E3fyV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "early_stop = EarlyStopping(monitor='val_loss',patience=2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "2fmURaQQ3fyV", | |
| "outputId": "daa2505d-3be3-41ff-84d2-28fbf10e4b87" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Epoch 1/25\n", | |
| "1250/1250 [==============================] - 41s 32ms/step - loss: 1.7493 - accuracy: 0.3581 - val_loss: 1.2798 - val_accuracy: 0.5376\n", | |
| "Epoch 2/25\n", | |
| "1250/1250 [==============================] - 38s 30ms/step - loss: 1.2367 - accuracy: 0.5585 - val_loss: 1.1360 - val_accuracy: 0.6018\n", | |
| "Epoch 3/25\n", | |
| "1250/1250 [==============================] - 39s 31ms/step - loss: 1.0621 - accuracy: 0.6307 - val_loss: 1.0527 - val_accuracy: 0.6311\n", | |
| "Epoch 4/25\n", | |
| "1250/1250 [==============================] - 39s 32ms/step - loss: 0.9311 - accuracy: 0.6739 - val_loss: 0.9894 - val_accuracy: 0.6599\n", | |
| "Epoch 5/25\n", | |
| "1250/1250 [==============================] - 47s 38ms/step - loss: 0.8240 - accuracy: 0.7102 - val_loss: 0.9883 - val_accuracy: 0.6654\n", | |
| "Epoch 6/25\n", | |
| "1250/1250 [==============================] - 69s 56ms/step - loss: 0.7418 - accuracy: 0.7413 - val_loss: 1.0176 - val_accuracy: 0.6583\n", | |
| "Epoch 7/25\n", | |
| "1250/1250 [==============================] - 73s 58ms/step - loss: 0.6539 - accuracy: 0.7739 - val_loss: 0.9540 - val_accuracy: 0.6797\n", | |
| "Epoch 8/25\n", | |
| "1250/1250 [==============================] - 70s 56ms/step - loss: 0.5754 - accuracy: 0.8014 - val_loss: 1.0089 - val_accuracy: 0.6770\n", | |
| "Epoch 9/25\n", | |
| "1250/1250 [==============================] - 39s 32ms/step - loss: 0.5003 - accuracy: 0.8269 - val_loss: 1.0495 - val_accuracy: 0.6785\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "history = model.fit(x_train,y_cat_train,epochs=25,validation_data=(x_val,y_val_cat),callbacks=[early_stop])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "YCT2twxT3fyV", | |
| "outputId": "33d57061-884a-4906-8b4d-fec754aba0e8" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "model.history.history.keys()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "SdmZA8843fyV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "metrics = pd.DataFrame(model.history.history)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "XsdEFgoA3fyV", | |
| "outputId": "0ffde532-19cf-4a4b-8871-a580d1b07b00" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style>\n", | |
| " .dataframe thead tr:only-child th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: left;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>accuracy</th>\n", | |
| " <th>loss</th>\n", | |
| " <th>val_accuracy</th>\n", | |
| " <th>val_loss</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0.443975</td>\n", | |
| " <td>1.536754</td>\n", | |
| " <td>0.5376</td>\n", | |
| " <td>1.279800</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>0.575075</td>\n", | |
| " <td>1.199655</td>\n", | |
| " <td>0.6018</td>\n", | |
| " <td>1.135980</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>0.634150</td>\n", | |
| " <td>1.051031</td>\n", | |
| " <td>0.6311</td>\n", | |
| " <td>1.052739</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>0.673350</td>\n", | |
| " <td>0.935059</td>\n", | |
| " <td>0.6599</td>\n", | |
| " <td>0.989369</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>0.710600</td>\n", | |
| " <td>0.828836</td>\n", | |
| " <td>0.6654</td>\n", | |
| " <td>0.988293</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>0.739175</td>\n", | |
| " <td>0.747640</td>\n", | |
| " <td>0.6583</td>\n", | |
| " <td>1.017581</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>0.767025</td>\n", | |
| " <td>0.668431</td>\n", | |
| " <td>0.6797</td>\n", | |
| " <td>0.953991</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>0.794350</td>\n", | |
| " <td>0.592010</td>\n", | |
| " <td>0.6770</td>\n", | |
| " <td>1.008880</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>0.817150</td>\n", | |
| " <td>0.520959</td>\n", | |
| " <td>0.6785</td>\n", | |
| " <td>1.049524</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " accuracy loss val_accuracy val_loss\n", | |
| "0 0.443975 1.536754 0.5376 1.279800\n", | |
| "1 0.575075 1.199655 0.6018 1.135980\n", | |
| "2 0.634150 1.051031 0.6311 1.052739\n", | |
| "3 0.673350 0.935059 0.6599 0.989369\n", | |
| "4 0.710600 0.828836 0.6654 0.988293\n", | |
| "5 0.739175 0.747640 0.6583 1.017581\n", | |
| "6 0.767025 0.668431 0.6797 0.953991\n", | |
| "7 0.794350 0.592010 0.6770 1.008880\n", | |
| "8 0.817150 0.520959 0.6785 1.049524" | |
| ] | |
| }, | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "metrics" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "xxtniMGd3fyV", | |
| "outputId": "99376993-b992-438f-b4a0-559a556863a8" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "metrics[['loss', 'val_loss']].plot()\n", | |
| "plt.title('Training Loss Vs Validation Loss', fontsize=16)\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "qXjrFOwm3fyV", | |
| "outputId": "e79fc939-2e8e-4480-dc6d-fb31661c5769" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "metrics[['accuracy', 'val_accuracy']].plot()\n", | |
| "plt.title('Training Accuracy Vs Validation Accuracy', fontsize=16)\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "tCd0yCrs3fyV" | |
| }, | |
| "source": [ | |
| "## Validating on Test Data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "MDX03eQH3fyW", | |
| "outputId": "00a1392f-5660-4d4a-b58f-2e49c72ec720" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "313/313 [==============================] - 2s 7ms/step - loss: 1.0768 - accuracy: 0.6703\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[1.0768086910247803, 0.6703000068664551]" | |
| ] | |
| }, | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "model.evaluate(x_test,y_cat_test)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "56S-JUFk3fyW" | |
| }, | |
| "source": [ | |
| "## Classification Report and Confusion Matrix" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "qkzyqrB-3fyW" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from sklearn.metrics import classification_report, confusion_matrix" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "LP5-xSVm3fyW", | |
| "outputId": "6cdc5da1-350d-4def-8080-dafc50347655" | |
| }, | |
| "outputs": [ | |
| { | |
| "ename": "NameError", | |
| "evalue": "name 'np' is not defined", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-5-22b748ca4dab>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#predictions = model.predict_classes(x_test)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpredictions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "#predictions = model.predict_classes(x_test)\n", | |
| "predictions = np.argmax(model.predict(x_test), axis=-1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Cf4aX7D23fyW", | |
| "outputId": "34d43b7e-e86a-4104-eca8-2dcd89b53405" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| " precision recall f1-score support\n", | |
| "\n", | |
| " 0 0.68 0.73 0.71 1000\n", | |
| " 1 0.79 0.78 0.79 1000\n", | |
| " 2 0.53 0.61 0.57 1000\n", | |
| " 3 0.47 0.53 0.49 1000\n", | |
| " 4 0.64 0.58 0.61 1000\n", | |
| " 5 0.63 0.48 0.54 1000\n", | |
| " 6 0.77 0.73 0.75 1000\n", | |
| " 7 0.67 0.78 0.72 1000\n", | |
| " 8 0.75 0.80 0.77 1000\n", | |
| " 9 0.84 0.68 0.75 1000\n", | |
| "\n", | |
| " accuracy 0.67 10000\n", | |
| " macro avg 0.68 0.67 0.67 10000\n", | |
| "weighted avg 0.68 0.67 0.67 10000\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(classification_report(y_test,predictions))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "hy5T87v73fyW", | |
| "outputId": "b7b21b65-ff6e-428d-ceaf-a81137957dc7" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[731, 22, 81, 12, 23, 5, 7, 13, 89, 17],\n", | |
| " [ 44, 781, 23, 17, 5, 4, 11, 9, 44, 62],\n", | |
| " [ 64, 6, 608, 82, 70, 47, 56, 48, 16, 3],\n", | |
| " [ 27, 15, 91, 528, 70, 119, 58, 57, 19, 16],\n", | |
| " [ 23, 6, 107, 72, 583, 34, 43, 115, 16, 1],\n", | |
| " [ 18, 7, 102, 239, 38, 479, 21, 79, 12, 5],\n", | |
| " [ 5, 9, 62, 88, 52, 16, 735, 17, 12, 4],\n", | |
| " [ 20, 3, 33, 51, 52, 34, 8, 784, 6, 9],\n", | |
| " [ 84, 34, 19, 16, 13, 7, 9, 7, 796, 15],\n", | |
| " [ 55, 100, 22, 29, 4, 17, 10, 37, 48, 678]])" | |
| ] | |
| }, | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "confusion_matrix(y_test,predictions)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "JTVPDIfp3fyW" | |
| }, | |
| "source": [ | |
| "# Predicting on single image" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "ylaUJm8p3fyW", | |
| "outputId": "e76ba59f-0181-4f40-ccfb-09af1b452967" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.image.AxesImage at 0x14d274c18>" | |
| ] | |
| }, | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.imshow(x_test[16])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "JDkZCBFZ3fyW" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "my_image = x_test[16]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "NhDOMBx13fyW", | |
| "outputId": "df4ee487-7e37-412d-83ed-28e3f95e37a8" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([5])" | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# SHAPE --> (num_images,width,height,color_channels)\n", | |
| "model.predict_classes(my_image.reshape(1,32,32,3))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "46Z-o_jb3fyW", | |
| "outputId": "00c4545f-ddab-4d2f-f8e5-c40c0ed67107" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'dog'" | |
| ] | |
| }, | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "LABEL_NAMES[y_test[16][0]]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "w9_sJybw3fyW" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.10.2" | |
| }, | |
| "colab": { | |
| "provenance": [], | |
| "include_colab_link": true | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment