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": [ - "\"Open" - ] - }, - { - "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": [ - "
" - ] - }, - "metadata": { - "tags": [], - "needs_background": "light" - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yZr6xOr8kdL6" - }, - "source": [ - "Displays the plot of accuracies." - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "JwlnRsXVOPR_", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 295 - }, - "outputId": "969cf685-e407-4856-eb82-27203bc51d84" - }, - "source": [ - "plt.plot(epochs, accu_train, color='lightseagreen', label='Training Accuracy')\n", - "plt.plot(epochs, accu_valid, color='crimson', label='Validation Accuracy')\n", - "plt.title('Training and Validation Accuracy')\n", - "plt.xlabel('Epochs')\n", - "plt.ylabel('Accuracy')\n", - "plt.legend()\n", - "plt.show()" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "display_data", - "data": { - "image/png": "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5pv61y699FK++eYb1q9fz+DBg3nhhRc4/fTTufjii3n88cdZt24dffv2rV++traWWbNmsXDhQjZu3IjH46mvwwOQlpbGmjVruOWWW5rsTqor33zJJZfwwQcf1NfjqSvfvH79etasWcPQoUPryzd/8sknrF+/nqeeeuq479uaNWt46qmn2L59O+Av37x69Wqys7N5+umnKS4uprCwkBtuuIG3336b9evX8+abbx5RvhlotfLNnbrF79CSzKoTa65lHkx13T3Tp0/n9ddf54UXXgDgjTfeYN68eXg8HvLz89m8eTMjRoxodBufffYZl1xyCTExMYC/Zk2dTZs28cADD1BWVkZlZSXf//73m41n27Zt9O7dmwEDBgAwc+ZMnn32WWbPng34v0gAxowZw7///e9j1g/F8s2dOvEfHnZRW/xKtZbp06dzxx13sGbNGqqrqxkzZgx79uzhiSee4JtvviE5OZlZs2Y1W5K4ObNmzeKdd95h5MiRvPTSSyxfvvw7xVtX2rmpss6hWL65U3f11I2+Fa9X9SjVauLi4jjzzDO57rrr6k/qOhwOYmNjSUxMpKCgoL4rqClTpkzhnXfeoaamhoqKCt5777361yoqKujatStut/uIJBcfH09FRcUx2xo4cCA5OTns3LkTgPnz5zN16tSAjycUyzd38sTvJs5uxx7WqQ9TqTY3Y8YM1q9fX5/4R44cyejRoxk0aBA/+tGPmDRpUrPrn3rqqVx11VWMHDmS888/n3HjxtW/9sgjjzBhwgQmTZp0xInYq6++mscff5zRo0eza9eu+vlRUVH885//5IorrmD48OGEhYVx8803B3QcoVq+uVMXaXt9727Wlhbz/0aNO/7CSnUAWqQtNAVSvrklRdo6dR//1af04epT+rR3GEopdcIee+wx5s6d26pDMwatD0REBorIugYPh4jMFpEUEflYRHZYf5ODFYNSSnV099xzD3v37mXy5Mmtts2gJX5jzDZjzChjzChgDFANLALuAZYZY/oDy6xppVSAOkL3rGpbLf1MtNVZz7OBXcaYvcB04GVr/svAD9soBqU6vKioKIqLizX5q3rGGIqLi4mKigp4nbbq478aWGA9zzTG5FvPDwKZja0gIjcCNwL06tUr6AEq1RH06NGD3NxcCgsL2zsUdRKJioqiR48eAS8f9Kt6RCQCyAOGGmMKRKTM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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [], - "needs_background": "light" - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "79tLi914knRs" - }, - "source": [ - "\n", - "It shows that our model has training set accuracy of around 97.5% and validation set accuracy of around 93.5%. Hence it is overfitting by around 4%. I don't have enough time to work on it, hence leaving it as is.\n", - "References and Acknowledgements:\n", - "1. Deeplizard YouTube channel's playlist on Neural Networks was a great help: https://www.youtube.com/playlist?list=PLZbbT5o_s2xq7LwI2y8_QtvuXZedL6tQU\n", - "2. Mark Jay's YouTube videos also assisted: https://www.youtube.com/playlist?list=PLX-LrBk6h3wR27xylD3Rsx4bbA15jlcYC\n", - "3. For getting a hang of layers, I studied from this model: https://colab.research.google.com/github/timlovescoding/FASHION-MNIST/blob/master/Tim_Fashion_MNIST.ipynb\n", - "4. Obviously, Keras: https://keras.io/\n", - "5. For plotting the output, I studied from this site: https://www.pluralsight.com/guides/data-visualization-deep-learning-model-using-matplotlib\n", - "6. My friends helped me greatly during this assignment. Sincere thanks to Yatish Goel, Atharv Singh Patlan, Shiven Tripathi and Ananya Gupta among others." - ] - } - ] -}