{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using PyTorch version: 1.1.0  Device: cpu\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from torchvision import datasets, transforms\n",
    "import seaborn as sns\n",
    "sns.set()\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "if torch.cuda.is_available():\n",
    "    device = torch.device('cuda')\n",
    "else:\n",
    "    device = torch.device('cpu')\n",
    "    \n",
    "print('Using PyTorch version:', torch.__version__, ' Device:', device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "\n",
    "train_dataset = datasets.MNIST('./data', \n",
    "                               train=True, \n",
    "                               download=True, \n",
    "                               transform=transforms.ToTensor())\n",
    "\n",
    "validation_dataset = datasets.MNIST('./data', \n",
    "                                    train=False, \n",
    "                                    transform=transforms.ToTensor())\n",
    "\n",
    "train_loader = torch.utils.data.DataLoader(dataset=train_dataset, \n",
    "                                           batch_size=batch_size, \n",
    "                                           shuffle=True)\n",
    "\n",
    "validation_loader = torch.utils.data.DataLoader(dataset=validation_dataset, \n",
    "                                                batch_size=batch_size, \n",
    "                                                shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train: torch.Size([32, 1, 28, 28]) type: torch.FloatTensor\n",
      "y_train: torch.Size([32]) type: torch.LongTensor\n"
     ]
    }
   ],
   "source": [
    "for (X_train, y_train) in train_loader:\n",
    "    print('X_train:', X_train.size(), 'type:', X_train.type())\n",
    "    print('y_train:', y_train.size(), 'type:', y_train.type())\n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1301e2908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pltsize=1\n",
    "plt.figure(figsize=(10*pltsize, pltsize))\n",
    "\n",
    "for i in range(10):\n",
    "    plt.subplot(1,10,i+1)\n",
    "    plt.axis('off')\n",
    "    plt.imshow(X_train[i,:,:,:].numpy().reshape(28,28), cmap=\"gray\")\n",
    "    plt.title('Class: '+str(y_train[i].item()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Net(\n",
      "  (fc1): Linear(in_features=784, out_features=50, bias=True)\n",
      "  (fc1_drop): Dropout(p=0.2)\n",
      "  (fc2): Linear(in_features=50, out_features=50, bias=True)\n",
      "  (fc2_drop): Dropout(p=0.2)\n",
      "  (fc3): Linear(in_features=50, out_features=10, bias=True)\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "        self.fc1 = nn.Linear(28*28, 50)\n",
    "        self.fc1_drop = nn.Dropout(0.2)\n",
    "        self.fc2 = nn.Linear(50, 50)\n",
    "        self.fc2_drop = nn.Dropout(0.2)\n",
    "        self.fc3 = nn.Linear(50, 10)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = x.view(-1, 28*28)\n",
    "        x = F.relu(self.fc1(x))\n",
    "        x = self.fc1_drop(x)\n",
    "        x = F.relu(self.fc2(x))\n",
    "        x = self.fc2_drop(x)\n",
    "        return F.log_softmax(self.fc3(x), dim=1)\n",
    "\n",
    "model = Net().to(device)\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "\n",
    "print(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def train(epoch, log_interval=200):\n",
    "    model.train()\n",
    "    \n",
    "    for batch_idx, (data, target) in enumerate(train_loader):\n",
    "\n",
    "        data = data.to(device)\n",
    "        target = target.to(device)\n",
    "\n",
    "        optimizer.zero_grad() \n",
    "        \n",
    "        output = model(data)\n",
    "\n",
    "        loss = criterion(output, target)\n",
    "\n",
    "        loss.backward()\n",
    "        \n",
    "        optimizer.step()\n",
    "        \n",
    "        if batch_idx % log_interval == 0:\n",
    "            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n",
    "                epoch, batch_idx * len(data), len(train_loader.dataset),\n",
    "                100. * batch_idx / len(train_loader), loss.data.item()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def validate(loss_vector, accuracy_vector):\n",
    "    model.eval()\n",
    "    val_loss, correct = 0, 0\n",
    "    for data, target in validation_loader:\n",
    "        data = data.to(device)\n",
    "        target = target.to(device)\n",
    "        output = model(data)\n",
    "        val_loss += criterion(output, target).data.item()\n",
    "        pred = output.data.max(1)[1] \n",
    "        correct += pred.eq(target.data).cpu().sum()\n",
    "\n",
    "    val_loss /= len(validation_loader)\n",
    "    loss_vector.append(val_loss)\n",
    "\n",
    "    accuracy = 100. * correct.to(torch.float32) / len(validation_loader.dataset)\n",
    "    accuracy_vector.append(accuracy)\n",
    "    \n",
    "    print('\\nValidation set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
    "        val_loss, correct, len(validation_loader.dataset), accuracy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 1 [0/60000 (0%)]\tLoss: 2.323731\n",
      "Train Epoch: 1 [6400/60000 (11%)]\tLoss: 2.045702\n",
      "Train Epoch: 1 [12800/60000 (21%)]\tLoss: 1.198774\n",
      "Train Epoch: 1 [19200/60000 (32%)]\tLoss: 1.056133\n",
      "Train Epoch: 1 [25600/60000 (43%)]\tLoss: 0.619113\n",
      "Train Epoch: 1 [32000/60000 (53%)]\tLoss: 0.776581\n",
      "Train Epoch: 1 [38400/60000 (64%)]\tLoss: 0.809030\n",
      "Train Epoch: 1 [44800/60000 (75%)]\tLoss: 0.483947\n",
      "Train Epoch: 1 [51200/60000 (85%)]\tLoss: 0.797354\n",
      "Train Epoch: 1 [57600/60000 (96%)]\tLoss: 0.398720\n",
      "\n",
      "Validation set: Average loss: 0.3459, Accuracy: 8999/10000 (90%)\n",
      "\n",
      "Train Epoch: 2 [0/60000 (0%)]\tLoss: 0.749291\n",
      "Train Epoch: 2 [6400/60000 (11%)]\tLoss: 0.521450\n",
      "Train Epoch: 2 [12800/60000 (21%)]\tLoss: 0.558710\n",
      "Train Epoch: 2 [19200/60000 (32%)]\tLoss: 0.694403\n",
      "Train Epoch: 2 [25600/60000 (43%)]\tLoss: 0.362416\n",
      "Train Epoch: 2 [32000/60000 (53%)]\tLoss: 0.412588\n",
      "Train Epoch: 2 [38400/60000 (64%)]\tLoss: 0.500237\n",
      "Train Epoch: 2 [44800/60000 (75%)]\tLoss: 0.355419\n",
      "Train Epoch: 2 [51200/60000 (85%)]\tLoss: 0.225074\n",
      "Train Epoch: 2 [57600/60000 (96%)]\tLoss: 0.388776\n",
      "\n",
      "Validation set: Average loss: 0.2580, Accuracy: 9248/10000 (92%)\n",
      "\n",
      "Train Epoch: 3 [0/60000 (0%)]\tLoss: 0.311440\n",
      "Train Epoch: 3 [6400/60000 (11%)]\tLoss: 0.549645\n",
      "Train Epoch: 3 [12800/60000 (21%)]\tLoss: 0.220834\n",
      "Train Epoch: 3 [19200/60000 (32%)]\tLoss: 0.400417\n",
      "Train Epoch: 3 [25600/60000 (43%)]\tLoss: 0.326595\n",
      "Train Epoch: 3 [32000/60000 (53%)]\tLoss: 0.444815\n",
      "Train Epoch: 3 [38400/60000 (64%)]\tLoss: 0.232190\n",
      "Train Epoch: 3 [44800/60000 (75%)]\tLoss: 0.200449\n",
      "Train Epoch: 3 [51200/60000 (85%)]\tLoss: 0.185314\n",
      "Train Epoch: 3 [57600/60000 (96%)]\tLoss: 0.275974\n",
      "\n",
      "Validation set: Average loss: 0.2105, Accuracy: 9373/10000 (94%)\n",
      "\n",
      "Train Epoch: 4 [0/60000 (0%)]\tLoss: 0.241445\n",
      "Train Epoch: 4 [6400/60000 (11%)]\tLoss: 0.305077\n",
      "Train Epoch: 4 [12800/60000 (21%)]\tLoss: 0.179592\n",
      "Train Epoch: 4 [19200/60000 (32%)]\tLoss: 0.550496\n",
      "Train Epoch: 4 [25600/60000 (43%)]\tLoss: 0.244069\n",
      "Train Epoch: 4 [32000/60000 (53%)]\tLoss: 0.285348\n",
      "Train Epoch: 4 [38400/60000 (64%)]\tLoss: 0.327083\n",
      "Train Epoch: 4 [44800/60000 (75%)]\tLoss: 0.312845\n",
      "Train Epoch: 4 [51200/60000 (85%)]\tLoss: 0.203688\n",
      "Train Epoch: 4 [57600/60000 (96%)]\tLoss: 0.271827\n",
      "\n",
      "Validation set: Average loss: 0.1810, Accuracy: 9468/10000 (95%)\n",
      "\n",
      "Train Epoch: 5 [0/60000 (0%)]\tLoss: 0.229198\n",
      "Train Epoch: 5 [6400/60000 (11%)]\tLoss: 0.242941\n",
      "Train Epoch: 5 [12800/60000 (21%)]\tLoss: 0.446527\n",
      "Train Epoch: 5 [19200/60000 (32%)]\tLoss: 0.155835\n",
      "Train Epoch: 5 [25600/60000 (43%)]\tLoss: 0.143015\n",
      "Train Epoch: 5 [32000/60000 (53%)]\tLoss: 0.231068\n",
      "Train Epoch: 5 [38400/60000 (64%)]\tLoss: 0.186621\n",
      "Train Epoch: 5 [44800/60000 (75%)]\tLoss: 0.274174\n",
      "Train Epoch: 5 [51200/60000 (85%)]\tLoss: 0.057228\n",
      "Train Epoch: 5 [57600/60000 (96%)]\tLoss: 0.107216\n",
      "\n",
      "Validation set: Average loss: 0.1656, Accuracy: 9493/10000 (95%)\n",
      "\n",
      "CPU times: user 3min 24s, sys: 6min 33s, total: 9min 57s\n",
      "Wall time: 1min 26s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "epochs = 5\n",
    "\n",
    "lossv, accv = [], []\n",
    "for epoch in range(1, epochs + 1):\n",
    "    train(epoch)\n",
    "    validate(lossv, accv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1300d8dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x135df80b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5,3))\n",
    "plt.plot(np.arange(1,epochs+1), lossv)\n",
    "plt.title('validation loss')\n",
    "\n",
    "plt.figure(figsize=(5,3))\n",
    "plt.plot(np.arange(1,epochs+1), accv)\n",
    "plt.title('validation accuracy');"
   ]
  }
 ],
 "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.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
