From bc3240d0b7d8b374de8231e335b36149c5fda06d Mon Sep 17 00:00:00 2001
From: Devansh Parmar <65076402+DevanshParmar@users.noreply.github.com>
Date: Mon, 28 Jun 2021 20:18:43 +0530
Subject: [PATCH] Delete 190273_DevanshParmar.ipynb
---
Final-Project/190273_DevanshParmar.ipynb | 521 -----------------------
1 file changed, 521 deletions(-)
delete mode 100644 Final-Project/190273_DevanshParmar.ipynb
diff --git a/Final-Project/190273_DevanshParmar.ipynb b/Final-Project/190273_DevanshParmar.ipynb
deleted file mode 100644
index 5f926bd..0000000
--- a/Final-Project/190273_DevanshParmar.ipynb
+++ /dev/null
@@ -1,521 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "name": "190273_DevanshParmar.ipynb",
- "provenance": [],
- "authorship_tag": "ABX9TyPqXqrHLEZGkhI6DW+F9WD7",
- "include_colab_link": true
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- },
- "accelerator": "GPU"
- },
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "axHuQltGjE9K"
- },
- "source": [
- "This is a CNN Sequential Model implementation on the Fashion MNIST dataset. The code blocks which I played with and weren't effective have been deleted, and also the error-detection code sections, such as print(), type() etc. Hence the code has shortened to effectively about 100 lines."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "WYseDL6rjKay"
- },
- "source": [
- "Importing various libraries, models, layers and the dataset:"
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "q6hAfkeBhiEM"
- },
- "source": [
- "import numpy as np\n",
- "import pandas as pd\n",
- "import tensorflow as tf\n",
- "import matplotlib.pyplot as plt\n",
- "import keras\n",
- "\n",
- "from sklearn.model_selection import train_test_split\n",
- "\n",
- "from keras.models import Sequential\n",
- "from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout, Activation, BatchNormalization\n",
- "from keras.optimizers import Adam\n",
- "from keras.datasets import fashion_mnist"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "GbjAiOxgjNA7"
- },
- "source": [
- "Loading data onto our variables."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "oFG00EDDhvpO"
- },
- "source": [
- "(X_train, Y_train), (X_test, Y_test) = fashion_mnist.load_data()\n",
- "assert X_train.shape == (60000, 28, 28)\n",
- "assert X_test.shape == (10000, 28, 28)\n",
- "assert Y_train.shape == (60000,)\n",
- "assert Y_test.shape == (10000,)"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "SSFO4jTHjd9y"
- },
- "source": [
- "Splitting training data into training and validation datasets."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "CXHEuirjsLcJ",
- "outputId": "faec7d86-1f70-4a7c-9b36-57f9df2edd88"
- },
- "source": [
- "X_train, X_validate, Y_train, Y_validate = train_test_split(X_train, Y_train, test_size = 0.2, random_state=12345)\n",
- "X_train.shape[0]"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "48000"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 23
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "mQ-ohjrzj61D"
- },
- "source": [
- "\n",
- "Defining shapes, batch size and number of epochs, and reshaping dataset."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "IVGQ17tw_hWG"
- },
- "source": [
- "im_rows = 28\n",
- "im_cols = 28\n",
- "n_batch_size = 500\n",
- "n_epochs = 50\n",
- "im_shape = (im_rows, im_cols, 1)\n",
- "\n",
- "X_train = X_train.reshape(X_train.shape[0], *im_shape)\n",
- "X_test = X_test.reshape(X_test.shape[0], *im_shape)\n",
- "X_validate = X_validate.reshape(X_validate.shape[0], *im_shape)"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "SvupvSz2kNK3"
- },
- "source": [
- "Defining our Sequential CNN model using Conv2D, MaxPooling2D, and Dense layers, while also applying BatchNormalization and Dropout layers."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "Zy7yUppUIMPF"
- },
- "source": [
- "cnn_model = Sequential([\n",
- " Conv2D(filters=128, kernel_size=3, input_shape=im_shape, activation='relu'),\n",
- " BatchNormalization(),\n",
- " Conv2D(filters=64, kernel_size=3, activation='relu'),\n",
- " BatchNormalization(),\n",
- " MaxPooling2D(pool_size=4),\n",
- " Dropout(0.3),\n",
- "\n",
- " Flatten(),\n",
- " Dense(512, activation='relu'),\n",
- " BatchNormalization(),\n",
- " Dropout(0.5),\n",
- " Dense(128, activation='relu'),\n",
- " BatchNormalization(),\n",
- " Dropout(0.4),\n",
- " Dense(32, activation='relu'),\n",
- " BatchNormalization(),\n",
- " Dropout(0.3),\n",
- " Dense(10, activation='softmax')\n",
- "])"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "FDsFJyVWj8X5"
- },
- "source": [
- "Compiling and running our model."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "2EkNauy5dnmY",
- "outputId": "b7982577-b2ed-42df-cc5b-2bb64b354187"
- },
- "source": [
- "cnn_model.compile(\n",
- " optimizer=Adam(learning_rate=0.0008),\n",
- " loss='sparse_categorical_crossentropy',\n",
- " metrics=['accuracy']\n",
- ")\n",
- "\n",
- "cnnm = cnn_model.fit(\n",
- " X_train, Y_train, batch_size=n_batch_size,\n",
- " epochs=n_epochs, verbose=1,\n",
- " validation_data = (X_validate, Y_validate),\n",
- ")"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Epoch 1/50\n",
- "96/96 [==============================] - 9s 65ms/step - loss: 1.2851 - accuracy: 0.5854 - val_loss: 0.4522 - val_accuracy: 0.8454\n",
- "Epoch 2/50\n",
- "96/96 [==============================] - 6s 60ms/step - loss: 0.5612 - accuracy: 0.8246 - val_loss: 0.3434 - val_accuracy: 0.8851\n",
- "Epoch 3/50\n",
- "96/96 [==============================] - 6s 61ms/step - loss: 0.4356 - accuracy: 0.8616 - val_loss: 0.3096 - val_accuracy: 0.8955\n",
- "Epoch 4/50\n",
- "96/96 [==============================] - 6s 60ms/step - loss: 0.3741 - accuracy: 0.8774 - val_loss: 0.2748 - val_accuracy: 0.9070\n",
- "Epoch 5/50\n",
- "96/96 [==============================] - 6s 60ms/step - loss: 0.3381 - accuracy: 0.8895 - val_loss: 0.2460 - val_accuracy: 0.9158\n",
- "Epoch 6/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.3077 - accuracy: 0.8965 - val_loss: 0.2524 - val_accuracy: 0.9141\n",
- "Epoch 7/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2884 - accuracy: 0.9040 - val_loss: 0.2644 - val_accuracy: 0.9082\n",
- "Epoch 8/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2694 - accuracy: 0.9094 - val_loss: 0.2328 - val_accuracy: 0.9203\n",
- "Epoch 9/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.2649 - accuracy: 0.9112 - val_loss: 0.2408 - val_accuracy: 0.9186\n",
- "Epoch 10/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2514 - accuracy: 0.9142 - val_loss: 0.2301 - val_accuracy: 0.9196\n",
- "Epoch 11/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.2410 - accuracy: 0.9198 - val_loss: 0.2352 - val_accuracy: 0.9218\n",
- "Epoch 12/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2356 - accuracy: 0.9193 - val_loss: 0.2262 - val_accuracy: 0.9228\n",
- "Epoch 13/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2191 - accuracy: 0.9255 - val_loss: 0.2100 - val_accuracy: 0.9269\n",
- "Epoch 14/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.2069 - accuracy: 0.9307 - val_loss: 0.2132 - val_accuracy: 0.9267\n",
- "Epoch 15/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1997 - accuracy: 0.9323 - val_loss: 0.2190 - val_accuracy: 0.9265\n",
- "Epoch 16/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1935 - accuracy: 0.9342 - val_loss: 0.2117 - val_accuracy: 0.9298\n",
- "Epoch 17/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1856 - accuracy: 0.9369 - val_loss: 0.2176 - val_accuracy: 0.9258\n",
- "Epoch 18/50\n",
- "96/96 [==============================] - 6s 60ms/step - loss: 0.1795 - accuracy: 0.9391 - val_loss: 0.2639 - val_accuracy: 0.9141\n",
- "Epoch 19/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1747 - accuracy: 0.9402 - val_loss: 0.2136 - val_accuracy: 0.9272\n",
- "Epoch 20/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1691 - accuracy: 0.9419 - val_loss: 0.2183 - val_accuracy: 0.9302\n",
- "Epoch 21/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1597 - accuracy: 0.9469 - val_loss: 0.2158 - val_accuracy: 0.9294\n",
- "Epoch 22/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1608 - accuracy: 0.9436 - val_loss: 0.2172 - val_accuracy: 0.9283\n",
- "Epoch 23/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1443 - accuracy: 0.9517 - val_loss: 0.2096 - val_accuracy: 0.9307\n",
- "Epoch 24/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1468 - accuracy: 0.9514 - val_loss: 0.2107 - val_accuracy: 0.9323\n",
- "Epoch 25/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1347 - accuracy: 0.9540 - val_loss: 0.2234 - val_accuracy: 0.9281\n",
- "Epoch 26/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1306 - accuracy: 0.9551 - val_loss: 0.2040 - val_accuracy: 0.9349\n",
- "Epoch 27/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1285 - accuracy: 0.9574 - val_loss: 0.2137 - val_accuracy: 0.9318\n",
- "Epoch 28/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1299 - accuracy: 0.9545 - val_loss: 0.2127 - val_accuracy: 0.9311\n",
- "Epoch 29/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1176 - accuracy: 0.9600 - val_loss: 0.2306 - val_accuracy: 0.9265\n",
- "Epoch 30/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1246 - accuracy: 0.9571 - val_loss: 0.2165 - val_accuracy: 0.9338\n",
- "Epoch 31/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1180 - accuracy: 0.9592 - val_loss: 0.2065 - val_accuracy: 0.9330\n",
- "Epoch 32/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.1098 - accuracy: 0.9622 - val_loss: 0.2385 - val_accuracy: 0.9322\n",
- "Epoch 33/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1105 - accuracy: 0.9631 - val_loss: 0.2197 - val_accuracy: 0.9316\n",
- "Epoch 34/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1063 - accuracy: 0.9654 - val_loss: 0.2366 - val_accuracy: 0.9301\n",
- "Epoch 35/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.1008 - accuracy: 0.9658 - val_loss: 0.2211 - val_accuracy: 0.9331\n",
- "Epoch 36/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.1017 - accuracy: 0.9657 - val_loss: 0.2578 - val_accuracy: 0.9289\n",
- "Epoch 37/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.0973 - accuracy: 0.9667 - val_loss: 0.2353 - val_accuracy: 0.9322\n",
- "Epoch 38/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.0974 - accuracy: 0.9666 - val_loss: 0.2261 - val_accuracy: 0.9348\n",
- "Epoch 39/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.0903 - accuracy: 0.9693 - val_loss: 0.2430 - val_accuracy: 0.9298\n",
- "Epoch 40/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.0866 - accuracy: 0.9712 - val_loss: 0.2209 - val_accuracy: 0.9327\n",
- "Epoch 41/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.0860 - accuracy: 0.9709 - val_loss: 0.2498 - val_accuracy: 0.9305\n",
- "Epoch 42/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.0903 - accuracy: 0.9699 - val_loss: 0.2301 - val_accuracy: 0.9327\n",
- "Epoch 43/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.0791 - accuracy: 0.9740 - val_loss: 0.2519 - val_accuracy: 0.9310\n",
- "Epoch 44/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.0795 - accuracy: 0.9735 - val_loss: 0.2322 - val_accuracy: 0.9350\n",
- "Epoch 45/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.0750 - accuracy: 0.9739 - val_loss: 0.2518 - val_accuracy: 0.9338\n",
- "Epoch 46/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.0732 - accuracy: 0.9749 - val_loss: 0.2353 - val_accuracy: 0.9367\n",
- "Epoch 47/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.0748 - accuracy: 0.9741 - val_loss: 0.2322 - val_accuracy: 0.9353\n",
- "Epoch 48/50\n",
- "96/96 [==============================] - 5s 56ms/step - loss: 0.0696 - accuracy: 0.9758 - val_loss: 0.2476 - val_accuracy: 0.9361\n",
- "Epoch 49/50\n",
- "96/96 [==============================] - 5s 57ms/step - loss: 0.0740 - accuracy: 0.9748 - val_loss: 0.2472 - val_accuracy: 0.9338\n",
- "Epoch 50/50\n",
- "96/96 [==============================] - 6s 59ms/step - loss: 0.0708 - accuracy: 0.9758 - val_loss: 0.2473 - val_accuracy: 0.9348\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "YSeIu9Ycj_eb"
- },
- "source": [
- "Defining lists of various outputs, and turning accuracy into percentage. Defines the range of epochs to be plotted."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "ZWxS2lDIxaZs",
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "outputId": "d380d266-ba8a-4c2e-82d2-03d80d840ac3"
- },
- "source": [
- "loss_train = cnnm.history['loss']\n",
- "loss_valid = cnnm.history['val_loss']\n",
- "accu_train = [100*i for i in cnnm.history['accuracy']]\n",
- "accu_valid = [100*i for i in cnnm.history['val_accuracy']]\n",
- "\n",
- "epochs = range(1, 1+n_epochs)"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- " Training Loss is 0.0714\n",
- " Validation Loss is 0.2473\n",
- " \n",
- " Training Accuracy is 97.59%\n",
- " Validation Accuracy is 93.48%\n",
- " \n",
- " Maximum Training Accuracy is 97.59%\n",
- "Maximum Validation Accuracy is 93.67%\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "Wib6eUSEkQhG"
- },
- "source": [
- "Displays various output values."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "fnQNrU_-kWvo"
- },
- "source": [
- "print(' Training Loss is {:.4f}'.format(loss_train[-1]))\n",
- "print(' Validation Loss is {:.4f}'.format(loss_valid[-1]))\n",
- "print(' ')\n",
- "print(' Training Accuracy is {:.2f}%'.format(accu_train[-1]))\n",
- "print(' Validation Accuracy is {:.2f}%'.format(accu_valid[-1]))\n",
- "print(' ')\n",
- "print(' Maximum Training Accuracy is {:.2f}%'.format(max(accu_train)))\n",
- "print('Maximum Validation Accuracy is {:.2f}%'.format(max(accu_valid)))"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "MtKwC3EbkZoi"
- },
- "source": [
- "Displays the plot of losses."
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "Nl_mIFOLKuOz",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 295
- },
- "outputId": "3a09c60d-3c76-4028-cae8-70e547a9f290"
- },
- "source": [
- "plt.plot(epochs, loss_train, color='lightseagreen', label='Training Loss')\n",
- "plt.plot(epochs, loss_valid, color='crimson', label='Validation Loss')\n",
- "plt.title('Training and Validation Loss')\n",
- "plt.xlabel('Epochs')\n",
- "plt.ylabel('Loss')\n",
- "plt.legend()\n",
- "plt.show()"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "