PyTorch/fashion-mnist-with-pytorch-93-accuracy.ipynb

998 lines
168 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### This is the tutorial of deep learning on FashionMNIST dataset using Pytorch. We will build a Convolutional Neural Network for predicting the classes of Dataset. I am assuming you know the basics of deep leanrning like layer architecture... convolution concepts. Without further ado... Lets start the tutorial."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "1rm65OztSCpF"
},
"source": [
"# **Importing Important Libraries**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "-1_8VZgpEtea"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import torch\n",
"import torch.nn as nn\n",
"from torch.autograd import Variable\n",
"\n",
"import torchvision\n",
"import torchvision.transforms as transforms\n",
"from torch.utils.data import Dataset, DataLoader\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "s6bjL6wESfoV"
},
"source": [
"### If the GPU is available use it for the computation otherwise use the CPU."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "q6btjJ9YTXXw"
},
"outputs": [],
"source": [
"device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "CGIhqokgSv1W"
},
"source": [
"There are 2 ways to load the Fashion MNIST dataset. \n",
"\n",
"\n",
" 1. Load csv and then inherite Pytorch Dataset class .\n",
" 2. Use Pytorch module torchvision.datasets. It has many popular datasets like MNIST, FashionMNIST, CIFAR10 e.t.c.\n",
" \n",
" \n",
"\n",
"* We use DataLoader class from torch.utils.data to load data in batches in both method.\n",
"* Comment out the code of a method which you are not using. \n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "4jJh32jCT_J0"
},
"source": [
"### 1. Using a Dataset class.\n",
" \n",
" * First load the data from the disk using pandas read_csv() method.\n",
"\n",
" * Now inherit Dataset class in your own class that you are building, lets say FashionData.\n",
"\n",
" * It has 2 methods: __get_item__( ) and __len__().\n",
" * __get_item__( ) return the images and labels and __len__( ) returns the number of items in a dataset."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 413
},
"colab_type": "code",
"id": "PV2g1_8qUDvA",
"outputId": "b429a123-7574-413d-d15a-92f0481e6753"
},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: '../input/fashion-mnist_train.csv'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_45959/798855398.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrain_csv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"../input/fashion-mnist_train.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mtest_csv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"../input/fashion-mnist_test.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 309\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstacklevel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 310\u001b[0m )\n\u001b[0;32m--> 311\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 312\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 313\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[1;32m 584\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 585\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 586\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 587\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 588\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 481\u001b[0m \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 482\u001b[0;31m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 483\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 484\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 811\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 812\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 813\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, engine)\u001b[0m\n\u001b[1;32m 1038\u001b[0m )\n\u001b[1;32m 1039\u001b[0m \u001b[0;31m# error: Too many arguments for \"ParserBase\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1040\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmapping\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[call-arg]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1041\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1042\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_failover_to_python\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/c_parser_wrapper.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, src, **kwds)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;31m# open handles\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_open_handles\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 52\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandles\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/parsers/base_parser.py\u001b[0m in \u001b[0;36m_open_handles\u001b[0;34m(self, src, kwds)\u001b[0m\n\u001b[1;32m 220\u001b[0m \u001b[0mLet\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mreaders\u001b[0m \u001b[0mopen\u001b[0m \u001b[0mIOHandles\u001b[0m \u001b[0mafter\u001b[0m \u001b[0mthey\u001b[0m \u001b[0mare\u001b[0m \u001b[0mdone\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtheir\u001b[0m \u001b[0mpotential\u001b[0m \u001b[0mraises\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 221\u001b[0m \"\"\"\n\u001b[0;32m--> 222\u001b[0;31m self.handles = get_handle(\n\u001b[0m\u001b[1;32m 223\u001b[0m \u001b[0msrc\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 224\u001b[0m \u001b[0;34m\"r\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/pandas/io/common.py\u001b[0m in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 699\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0;31m# Encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 701\u001b[0;31m handle = open(\n\u001b[0m\u001b[1;32m 702\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 703\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../input/fashion-mnist_train.csv'"
]
}
],
"source": [
"train_csv = pd.read_csv(\"../input/fashion-mnist_train.csv\")\n",
"test_csv = pd.read_csv(\"../input/fashion-mnist_test.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "3Q36xjPfeo0a"
},
"outputs": [],
"source": [
"class FashionDataset(Dataset):\n",
" \"\"\"User defined class to build a datset using Pytorch class Dataset.\"\"\"\n",
" \n",
" def __init__(self, data, transform = None):\n",
" \"\"\"Method to initilaize variables.\"\"\" \n",
" self.fashion_MNIST = list(data.values)\n",
" self.transform = transform\n",
" \n",
" label = []\n",
" image = []\n",
" \n",
" for i in self.fashion_MNIST:\n",
" # first column is of labels.\n",
" label.append(i[0])\n",
" image.append(i[1:])\n",
" self.labels = np.asarray(label)\n",
" # Dimension of Images = 28 * 28 * 1. where height = width = 28 and color_channels = 1.\n",
" self.images = np.asarray(image).reshape(-1, 28, 28, 1).astype('float32')\n",
"\n",
" def __getitem__(self, index):\n",
" label = self.labels[index]\n",
" image = self.images[index]\n",
" \n",
" if self.transform is not None:\n",
" image = self.transform(image)\n",
"\n",
" return image, label\n",
"\n",
" def __len__(self):\n",
" return len(self.images)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "uLeNwQWJkFkQ"
},
"outputs": [],
"source": [
"# Transform data into Tensor that has a range from 0 to 1\n",
"train_set = FashionDataset(train_csv, transform=transforms.Compose([transforms.ToTensor()]))\n",
"test_set = FashionDataset(test_csv, transform=transforms.Compose([transforms.ToTensor()]))\n",
"\n",
"train_loader = DataLoader(train_set, batch_size=100)\n",
"test_loader = DataLoader(train_set, batch_size=100)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "VePPK186m6iS"
},
"source": [
"### 2. Using FashionMNIST class from torchvision module.\n",
"\n",
"\n",
"* It will download the dataset first time.\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "zM618_wYGM0n"
},
"outputs": [],
"source": [
"\n",
"train_set = torchvision.datasets.FashionMNIST(\"./data\", download=True, transform=\n",
" transforms.Compose([transforms.ToTensor()]))\n",
"test_set = torchvision.datasets.FashionMNIST(\"./data\", download=True, train=False, transform=\n",
" transforms.Compose([transforms.ToTensor()])) \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "8s2uhlGJZOOP"
},
"outputs": [],
"source": [
"\n",
"train_loader = torch.utils.data.DataLoader(train_set, \n",
" batch_size=100)\n",
"test_loader = torch.utils.data.DataLoader(test_set,\n",
" batch_size=100)\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "4SfsxOX4peHU"
},
"source": [
"### We have 10 types of clothes in FashionMNIST dataset.\n",
"\n",
"\n",
"> Making a method that return the name of class for the label number.\n",
"ex. if the label is 5, we return Sandal.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "uWIE3hVqOlMi"
},
"outputs": [],
"source": [
"def output_label(label):\n",
" output_mapping = {\n",
" 0: \"T-shirt/Top\",\n",
" 1: \"Trouser\",\n",
" 2: \"Pullover\",\n",
" 3: \"Dress\",\n",
" 4: \"Coat\", \n",
" 5: \"Sandal\", \n",
" 6: \"Shirt\",\n",
" 7: \"Sneaker\",\n",
" 8: \"Bag\",\n",
" 9: \"Ankle Boot\"\n",
" }\n",
" input = (label.item() if type(label) == torch.Tensor else label)\n",
" return output_mapping[input]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "yDH7i5UFo7w3"
},
"source": [
"### Playing with data and displaying some images using matplotlib imshow() method.\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "RB9jenaDYZmt",
"outputId": "3d8212d3-3cbf-4e30-b369-e6ede4ad6350"
},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([100, 1, 28, 28])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = next(iter(train_loader))\n",
"a[0].size()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "D-PnIoRpjuZW",
"outputId": "cff25b7c-a4c6-42ea-81d1-43a4789959bc"
},
"outputs": [
{
"data": {
"text/plain": [
"60000"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(train_set)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 287
},
"colab_type": "code",
"id": "2kC6CrJrlbf_",
"outputId": "2eefede6-0e54-4512-b6a8-1c17eb42286a"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9\n"
]
},
{
"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": [
"image, label = next(iter(train_set))\n",
"plt.imshow(image.squeeze(), cmap=\"gray\")\n",
"print(label)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
},
"colab_type": "code",
"id": "sgpYsgh0PY09",
"outputId": "4d00bf1d-fb85-4e2a-bb21-067e75360637"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'torch.Tensor'> <class 'torch.Tensor'>\n",
"torch.Size([10, 1, 28, 28]) torch.Size([10])\n"
]
}
],
"source": [
"demo_loader = torch.utils.data.DataLoader(train_set, batch_size=10)\n",
"\n",
"batch = next(iter(demo_loader))\n",
"images, labels = batch\n",
"print(type(images), type(labels))\n",
"print(images.shape, labels.shape)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 158
},
"colab_type": "code",
"id": "2Z0D4BgQRW8e",
"outputId": "c33042d3-017f-4dcb-8bf9-244910e2b49e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"labels: Ankle Boot, T-shirt/Top, T-shirt/Top, Dress, T-shirt/Top, Pullover, Sneaker, Pullover, Sandal, Sandal, "
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x1440 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"grid = torchvision.utils.make_grid(images, nrow=10)\n",
"\n",
"plt.figure(figsize=(15, 20))\n",
"plt.imshow(np.transpose(grid, (1, 2, 0)))\n",
"print(\"labels: \", end=\" \")\n",
"for i, label in enumerate(labels):\n",
" print(output_label(label), end=\", \")\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "YM2u0Riup9mx"
},
"source": [
"## Building a CNN \n",
"\n",
"\n",
"* Make a model class (FashionCNN in our case)\n",
" * It inherit nn.Module class that is a super class for all the neural networks in Pytorch.\n",
"* Our Neural Net has following layers:\n",
" * Two Sequential layers each consists of following layers-\n",
" * Convolution layer that has kernel size of 3 * 3, padding = 1 (zero_padding) in 1st layer and padding = 0 in second one. Stride of 1 in both layer.\n",
" * Batch Normalization layer.\n",
" * Acitvation function: ReLU.\n",
" * Max Pooling layer with kernel size of 2 * 2 and stride 2.\n",
" * Flatten out the output for dense layer(a.k.a. fully connected layer).\n",
" * 3 Fully connected layer with different in/out features.\n",
" * 1 Dropout layer that has class probability p = 0.25.\n",
" \n",
" * All the functionaltiy is given in forward method that defines the forward pass of CNN.\n",
" * Our input image is changing in a following way:\n",
" * First Convulation layer : input: 28 \\* 28 \\* 3, output: 28 \\* 28 \\* 32\n",
" * First Max Pooling layer : input: 28 \\* 28 \\* 32, output: 14 \\* 14 \\* 32\n",
" * Second Conv layer : input : 14 \\* 14 \\* 32, output: 12 \\* 12 \\* 64\n",
" * Second Max Pooling layer : 12 \\* 12 \\* 64, output: 6 \\* 6 \\* 64\n",
" * Final fully connected layer has 10 output features for 10 types of clothes.\n",
"\n",
"> Lets implementing the network...\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "hyCH0Q4hSgFB"
},
"outputs": [],
"source": [
"class FashionCNN(nn.Module):\n",
" \n",
" def __init__(self):\n",
" super(FashionCNN, self).__init__()\n",
" \n",
" self.layer1 = nn.Sequential(\n",
" nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1),\n",
" nn.BatchNorm2d(32),\n",
" nn.ReLU(),\n",
" nn.MaxPool2d(kernel_size=2, stride=2)\n",
" )\n",
" \n",
" self.layer2 = nn.Sequential(\n",
" nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3),\n",
" nn.BatchNorm2d(64),\n",
" nn.ReLU(),\n",
" nn.MaxPool2d(2)\n",
" )\n",
" \n",
" self.fc1 = nn.Linear(in_features=64*6*6, out_features=600)\n",
" self.drop = nn.Dropout2d(0.25)\n",
" self.fc2 = nn.Linear(in_features=600, out_features=120)\n",
" self.fc3 = nn.Linear(in_features=120, out_features=10)\n",
" \n",
" def forward(self, x):\n",
" out = self.layer1(x)\n",
" out = self.layer2(out)\n",
" out = out.view(out.size(0), -1)\n",
" out = self.fc1(out)\n",
" out = self.drop(out)\n",
" out = self.fc2(out)\n",
" out = self.fc3(out)\n",
" \n",
" return out\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "0mMVaW_PvCC2"
},
"source": [
"### Making a model of our CNN class\n",
"\n",
"* Creating a object(model in the code)\n",
"* Transfering it into GPU if available.\n",
"* Defining a Loss function. we're using CrossEntropyLoss() here.\n",
"* Using Adam algorithm for optimization purpose.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 345
},
"colab_type": "code",
"id": "NILDHzNgQ1Gt",
"outputId": "d16327ae-e7d2-4c46-bffe-e9724272c51d"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"FashionCNN(\n",
" (layer1): Sequential(\n",
" (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
" (2): ReLU()\n",
" (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" )\n",
" (layer2): Sequential(\n",
" (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))\n",
" (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
" (2): ReLU()\n",
" (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" )\n",
" (fc1): Linear(in_features=2304, out_features=600, bias=True)\n",
" (drop): Dropout2d(p=0.25, inplace=False)\n",
" (fc2): Linear(in_features=600, out_features=120, bias=True)\n",
" (fc3): Linear(in_features=120, out_features=10, bias=True)\n",
")\n"
]
}
],
"source": [
"model = FashionCNN()\n",
"model.to(device)\n",
"\n",
"error = nn.CrossEntropyLoss()\n",
"\n",
"learning_rate = 0.001\n",
"optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
"print(model)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "im58ZlvMvkty"
},
"source": [
"## Training a network and Testing it on test dataset"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 126
},
"colab_type": "code",
"id": "SYh_6HtpUlNl",
"outputId": "b92aa41b-4cbf-4ceb-c63c-7d2a3999df87"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 500, Loss: 0.19216448068618774, Accuracy: 90.94000244140625%\n",
"Iteration: 1000, Loss: 0.2398412674665451, Accuracy: 90.38999938964844%\n",
"Iteration: 1500, Loss: 0.14675875008106232, Accuracy: 89.44999694824219%\n",
"Iteration: 2000, Loss: 0.2056727409362793, Accuracy: 90.43000030517578%\n",
"Iteration: 2500, Loss: 0.08225765824317932, Accuracy: 90.12999725341797%\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_190212/1265142370.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# Forward pass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1049\u001b[0m if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m 1050\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1051\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1052\u001b[0m \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1053\u001b[0m \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/tmp/ipykernel_190212/2706098268.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mview\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\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[1;32m 29\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc3\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1049\u001b[0m if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m 1050\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1051\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1052\u001b[0m \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1053\u001b[0m \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/torch/nn/modules/dropout.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 100\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropout2d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minplace\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 101\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/git/PyTorch/.venv/lib/python3.9/site-packages/torch/nn/functional.py\u001b[0m in \u001b[0;36mdropout2d\u001b[0;34m(input, p, training, inplace)\u001b[0m\n\u001b[1;32m 1200\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0.0\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1201\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"dropout probability has to be between 0 and 1, \"\u001b[0m \u001b[0;34m\"but got {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1202\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_VF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_dropout_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minplace\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0m_VF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_dropout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1203\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1204\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"num_epochs = 5\n",
"count = 0\n",
"# Lists for visualization of loss and accuracy \n",
"loss_list = []\n",
"iteration_list = []\n",
"accuracy_list = []\n",
"\n",
"# Lists for knowing classwise accuracy\n",
"predictions_list = []\n",
"labels_list = []\n",
"\n",
"for epoch in range(num_epochs):\n",
" for images, labels in train_loader:\n",
" # Transfering images and labels to GPU if available\n",
" images, labels = images.to(device), labels.to(device)\n",
" \n",
" train = Variable(images.view(100, 1, 28, 28))\n",
" labels = Variable(labels)\n",
" \n",
" # Forward pass \n",
" outputs = model(train)\n",
" loss = error(outputs, labels)\n",
" \n",
" # Initializing a gradient as 0 so there is no mixing of gradient among the batches\n",
" optimizer.zero_grad()\n",
" \n",
" #Propagating the error backward\n",
" loss.backward()\n",
" \n",
" # Optimizing the parameters\n",
" optimizer.step()\n",
" \n",
" count += 1\n",
" \n",
" # Testing the model\n",
" \n",
" if not (count % 50): # It's same as \"if count % 50 == 0\"\n",
" total = 0\n",
" correct = 0\n",
" \n",
" for images, labels in test_loader:\n",
" images, labels = images.to(device), labels.to(device)\n",
" labels_list.append(labels)\n",
" \n",
" test = Variable(images.view(100, 1, 28, 28))\n",
" \n",
" outputs = model(test)\n",
" \n",
" predictions = torch.max(outputs, 1)[1].to(device)\n",
" predictions_list.append(predictions)\n",
" correct += (predictions == labels).sum()\n",
" \n",
" total += len(labels)\n",
" \n",
" accuracy = correct * 100 / total\n",
" loss_list.append(loss.data)\n",
" iteration_list.append(count)\n",
" accuracy_list.append(accuracy)\n",
" \n",
" if not (count % 500):\n",
" print(\"Iteration: {}, Loss: {}, Accuracy: {}%\".format(count, loss.data, accuracy))\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "1xm9MZ6O0irC"
},
"source": [
"### Visualizing the Loss and Accuracy with Iterations\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"colab_type": "code",
"id": "4s4cGX4Hanyz",
"outputId": "4f19caa4-327f-4cca-bd9f-726774b9ddfd"
},
"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": [
"plt.plot(iteration_list, loss_list)\n",
"plt.xlabel(\"No. of Iteration\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.title(\"Iterations vs Loss\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"colab_type": "code",
"id": "TtsjkmY8qo_t",
"outputId": "18a10340-f465-4c80-db26-cdce0201e347"
},
"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": [
"plt.plot(iteration_list, accuracy_list)\n",
"plt.xlabel(\"No. of Iteration\")\n",
"plt.ylabel(\"Accuracy\")\n",
"plt.title(\"Iterations vs Accuracy\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "mZTkzUKn0vq3"
},
"source": [
"### Looking the Accuracy in each class of FashionMNIST dataset"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 199
},
"colab_type": "code",
"id": "Mq9_qes8Qg6h",
"outputId": "fd7e3194-d5ab-4c3d-8693-ced0369df983"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy of T-shirt/Top: 83.60%\n",
"Accuracy of Trouser: 98.70%\n",
"Accuracy of Pullover: 87.40%\n",
"Accuracy of Dress: 92.00%\n",
"Accuracy of Coat: 78.70%\n",
"Accuracy of Sandal: 97.20%\n",
"Accuracy of Shirt: 79.30%\n",
"Accuracy of Sneaker: 98.40%\n",
"Accuracy of Bag: 97.60%\n",
"Accuracy of Ankle Boot: 94.50%\n"
]
}
],
"source": [
"class_correct = [0. for _ in range(10)]\n",
"total_correct = [0. for _ in range(10)]\n",
"\n",
"with torch.no_grad():\n",
" for images, labels in test_loader:\n",
" images, labels = images.to(device), labels.to(device)\n",
" test = Variable(images)\n",
" outputs = model(test)\n",
" predicted = torch.max(outputs, 1)[1]\n",
" c = (predicted == labels).squeeze()\n",
" \n",
" for i in range(100):\n",
" label = labels[i]\n",
" class_correct[label] += c[i].item()\n",
" total_correct[label] += 1\n",
" \n",
"for i in range(10):\n",
" print(\"Accuracy of {}: {:.2f}%\".format(output_label(i), class_correct[i] * 100 / total_correct[i]))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ZxZhix0v0_KZ"
},
"source": [
"### Printing the Confusion Matrix "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "GXme4c22cii2"
},
"outputs": [],
"source": [
"from itertools import chain \n",
"\n",
"predictions_l = [predictions_list[i].tolist() for i in range(len(predictions_list))]\n",
"labels_l = [labels_list[i].tolist() for i in range(len(labels_list))]\n",
"predictions_l = list(chain.from_iterable(predictions_l))\n",
"labels_l = list(chain.from_iterable(labels_l))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 363
},
"colab_type": "code",
"id": "ft-Qlbb5bl0A",
"outputId": "5665491d-d6ee-4891-95ff-2749de05a110"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification report for CNN :\n",
" precision recall f1-score support\n",
"\n",
" 0 0.86 0.83 0.84 55000\n",
" 1 0.99 0.98 0.98 55000\n",
" 2 0.86 0.86 0.86 55000\n",
" 3 0.91 0.89 0.90 55000\n",
" 4 0.82 0.89 0.85 55000\n",
" 5 0.98 0.97 0.97 55000\n",
" 6 0.74 0.72 0.73 55000\n",
" 7 0.94 0.96 0.95 55000\n",
" 8 0.97 0.98 0.97 55000\n",
" 9 0.96 0.96 0.96 55000\n",
"\n",
" accuracy 0.90 550000\n",
" macro avg 0.90 0.90 0.90 550000\n",
"weighted avg 0.90 0.90 0.90 550000\n",
"\n",
"\n"
]
}
],
"source": [
"import sklearn.metrics as metrics\n",
"\n",
"confusion_matrix(labels_l, predictions_l)\n",
"print(\"Classification report for CNN :\\n%s\\n\"\n",
" % (metrics.classification_report(labels_l, predictions_l)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "4Y9pGNv64UYl"
},
"source": [
"### This is my implementation of deep learning in FashionMNIST dataset using Pytorch. I've achieved 93% test accuracy. Change those layer architecture or parameters to make it better. \n",
"***I hope you like it. Give your feedback. It helps me to a lot. Thank you. :)***"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "fashion_MNIST.ipynb",
"provenance": [],
"version": "0.3.2"
},
"kernelspec": {
"display_name": "PyTorch",
"language": "python",
"name": "pytorch"
},
"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.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}