{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 404 Autoencoder\n",
    "\n",
    "View more, visit my tutorial page: https://morvanzhou.github.io/tutorials/\n",
    "My Youtube Channel: https://www.youtube.com/user/MorvanZhou\n",
    "Dependencies:\n",
    "\n",
    "* torch: 0.1.11\n",
    "* matplotlib\n",
    "* numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch.autograd import Variable\n",
    "import torch.utils.data as Data\n",
    "import torchvision\n",
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "from matplotlib import cm\n",
    "import numpy as np\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f54e0186918>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.manual_seed(1)    # reproducible"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Hyper Parameters\n",
    "EPOCH = 10\n",
    "BATCH_SIZE = 64\n",
    "LR = 0.005         # learning rate\n",
    "DOWNLOAD_MNIST = False\n",
    "N_TEST_IMG = 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Mnist digits dataset\n",
    "train_data = torchvision.datasets.MNIST(\n",
    "    root='./mnist/',\n",
    "    train=True,                                     # this is training data\n",
    "    transform=torchvision.transforms.ToTensor(),    # Converts a PIL.Image or numpy.ndarray to\n",
    "                                                    # torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0]\n",
    "    download=DOWNLOAD_MNIST,                        # download it if you don't have it\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([60000, 28, 28])\n",
      "torch.Size([60000])\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nSbL9JUk/lfSLiPj+FPXFkn4aEX/Y4nkIP9Bl0w1/y91+N75C9SlJ+ycHvzgReMY3Je051yYB1Gc6\nZ/tvkvSfkt6U9Gmx+GFJ6yUtV2O3/4ik+4uTg2XPxcgPdFmlu/1VIfxA91W22w9gdiL8QFKEH0iK\n8ANJEX4gKcIPJEX4gaQIP5AU4QeSIvxAUoQfSIrwA0kRfiApwg8k1esput+TdHTS/UuLZf2oX3vr\n174kemtXlb1dMd0H9vTz/F94cXssIlbU1kCJfu2tX/uS6K1ddfXGbj+QFOEHkqo7/MM1v36Zfu2t\nX/uS6K1dtfRW6zE/gPrUPfIDqAnhB5KqJfy219g+YPtt2w/V0UMzto/YftP27rrnFyzmQDxhe8+k\nZQtsb7d9qPg95RyJNfX2iO2JYtvttr22pt4W2f4P2/ts77X97WJ5rduupK9atlvPj/ltnyfpoKRv\nSBqXNCppfUTs62kjTdg+ImlFRNT+hhDbN0v6UNIzZ6ZCs/2Pkt6PiEeLf5zzI+Jv+6S3R3SO07Z3\nqbdm08r/uWrcdlVOd1+FOkb+6yW9HRGHI+L3kn4saV0NffS9iHhF0vtnLV4naXNxe7Mafzw916S3\nvhARxyLi9eL2SUlnppWvdduV9FWLOsJ/uaRfT7o/rho3wBRC0i9t77I9VHczUxiYNC3au5IG6mxm\nCi2nbe+ls6aV75tt185091XjhN8X3RQRX5f0p5K+Veze9qVoHLP107XaH0r6mhpzOB6T9L06mymm\nld8q6TsR8dvJtTq33RR91bLd6gj/hKRFk+4vLJb1hYiYKH6fkDSixmFKPzl+Zobk4veJmvv5TEQc\nj4hPIuJTST9SjduumFZ+q6QtEfF8sbj2bTdVX3VttzrCPyppqe0ltudKulPSthr6+ALbFxYnYmT7\nQkmr1X9Tj2+TtKG4vUHSizX28jn9Mm17s2nlVfO267vp7iOi5z+S1qpxxv9Xkv6ujh6a9PUHkv67\n+Nlbd2+SnlNjN/B/1Tg3cq+kSyTtkHRI0r9LWtBHvf2LGlO5v6FG0AZr6u0mNXbp35C0u/hZW/e2\nK+mrlu3G23uBpDjhByRF+IGkCD+QFOEHkiL8QFKEH0iK8ANJ/R9QLBQCitUxsgAAAABJRU5ErkJg\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f548b738940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot one example\n",
    "print(train_data.train_data.size())     # (60000, 28, 28)\n",
    "print(train_data.train_labels.size())   # (60000)\n",
    "plt.imshow(train_data.train_data[2].numpy(), cmap='gray')\n",
    "plt.title('%i' % train_data.train_labels[2])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Data Loader for easy mini-batch return in training, the image batch shape will be (50, 1, 28, 28)\n",
    "train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class AutoEncoder(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(AutoEncoder, self).__init__()\n",
    "\n",
    "        self.encoder = nn.Sequential(\n",
    "            nn.Linear(28*28, 128),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(128, 64),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(64, 12),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(12, 3),   # compress to 3 features which can be visualized in plt\n",
    "        )\n",
    "        self.decoder = nn.Sequential(\n",
    "            nn.Linear(3, 12),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(12, 64),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(64, 128),\n",
    "            nn.Tanh(),\n",
    "            nn.Linear(128, 28*28),\n",
    "            nn.Sigmoid(),       # compress to a range (0, 1)\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        encoded = self.encoder(x)\n",
    "        decoded = self.decoder(encoded)\n",
    "        return encoded, decoded"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AutoEncoder (\n",
      "  (encoder): Sequential (\n",
      "    (0): Linear (784 -> 128)\n",
      "    (1): Tanh ()\n",
      "    (2): Linear (128 -> 64)\n",
      "    (3): Tanh ()\n",
      "    (4): Linear (64 -> 12)\n",
      "    (5): Tanh ()\n",
      "    (6): Linear (12 -> 3)\n",
      "  )\n",
      "  (decoder): Sequential (\n",
      "    (0): Linear (3 -> 12)\n",
      "    (1): Tanh ()\n",
      "    (2): Linear (12 -> 64)\n",
      "    (3): Tanh ()\n",
      "    (4): Linear (64 -> 128)\n",
      "    (5): Tanh ()\n",
      "    (6): Linear (128 -> 784)\n",
      "    (7): Sigmoid ()\n",
      "  )\n",
      ")\n",
      "Epoch:  0 | train loss: 0.2323\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c47d4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  0 | train loss: 0.0559\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c8bc898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  5 | train loss: 0.0374\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c21ee80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  5 | train loss: 0.0349\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c180630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  9 | train loss: 0.0367\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAACACAYAAACx1FRUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHtdJREFUeJztnXmQVcX5v587M8wMwyCggCwKwrAJyBYRNAYQMVKCKyZo\nRRBiqRUjplLRsrKWqSTkaxJTpQaXChU0gSSaRMSlDC4ogixhjyOoKARkkW3YZJvt/v44v0+fM2fu\nbMzdDr7PPxfmnntv9+k+3Z/37bffjsXjcQzDMKJATqYLYBiG0VhswDIMIzLYgGUYRmSwAcswjMhg\nA5ZhGJHBBizDMCKDDViGYUQGG7AMw4gMNmAZhhEZ8ppycSwWi3xYfDwej9X3/plQR2B/PB7vUN8F\nZ0I9G2pLsHpGicbU0xTWmcm2TBfAMFKBDViGYUQGG7AMw4gMNmAZhhEZbMAyDCMyNGmV0EgeX/nK\nVwC49957AZg6dSp//vOfAXj88ccBWLt2bWYKZxhZiikswzAiQ6wpGUdTEeuRm5sLQJs2bWq9J/VR\nVFRE3759Afjud78LwO9+9zsAbr31Vk6ePAnA//3f/wHw85//vM7fy3Qc1pAhQwBYtGgRAGeddVat\naw4fPgzAOeecc7o/syYej19c3wXZFLdz5ZVXAjBv3jxGjx4NwEcffdTg57I9PuknP/kJ4PfHnBxP\nH4wZM4bFixc3+nuyvZ7JojH1TItJ2K1bNwDy8/O57LLLALj88ssBaNu2LQCTJk2q9zt27NgBwGOP\nPQbAjTfeCMDRo0fZsGEDQJM6QSa45JJL+Ne//gX4A7QmjKNHj1JeXg74A9XIkSMBzzTUe+lg1KhR\nrhzz589P+e8NHz4cgFWrVqX8t9LFtGnTePDBBwGorq6u8Z6lJT99zCQ0DCMypFRhhc2fRGZfY6iu\nrnby+osvvgA88wFg9+7dHDx4EGicGZFOioqKABg2bBgAc+fOpXPnzgmv3bx5M7/5zW8A+Pvf/w7A\ne++9B3imxa9//etUF9cxZswYAHr37p1ShSUTqUePHgB0796dWKxBqyASdO/encLCwkwXo1mMGDEC\ngNtuu82Z6gMGDKhxzf3338+uXbsA32qaO3cuACtXrkx6mUxhGYYRGVKqsLZv3w7AgQMHgIYVlkbk\nQ4cOAXDFFVcAUF5ezl/+8pdUFTNlPP3004C3MNAQw4YNo7i4GPB9cVI6gwYNSk0B62Dq1KkALF++\nPKW/I7V55513At7M/OGHH6b0N1PNuHHjAJgxY4b7m+o0ceJEAPbs2ZP+gjWByZMnA/Doo48C0L59\ne6d833nnHQA6dPD21v/2t791n9M1eu+WW25JetlMYRmGERlSqrDKysoAeOCBBwBvhlm3bh3gr/aJ\n9evXc9VVVwFw7NgxwLeXv/e976WymElHQaETJkwAqOGXkXp6+eWXAT88Y9euXe7eyCc3duzYWp9P\nB/ItpZrZs2fX+P/mzZvT8rupQP6bOXPmADWtCamQbduyN4lGXl4eF1/sRcL88Y9/BHwf7Lvvvssv\nfvELAJYuXQpAQUEBAM8//zxf//rXa3zX6tWrU1fOlH1zgBdffBHwnO9Hjx4FYPDgwQDccccdgPfg\naqASH3zwAQB33XVXOoqZFIYMGcIbb7wB+DFWWsZ+7bXXnHkoJ6YWE2bPns2+ffsAXJiGlsMnTJjg\nHPepjH6X6Xnuueem7DeChF0Eum9R5PbbbwegS5cu7m8yn7SDIZu57bbbak0gao/Jkydz5MiRGu/J\nbAwOVgo9evbZZ1NWTjMJDcOIDGndSxgcpRXNLe68806ee+45oHagXRTo06cP4Jm/Ug779+8HvNAL\n8GYehWW8+uqrNV7ro2XLlvzgBz8A4Fvf+lZyCx7gmmuucb+XSqTgFM4gdu7cmdLfTQXt27cH4Nvf\n/jbg991Dhw7xy1/+MmPlaiwy9X70ox85S+CJJ54AfPUfVlcAP/7xj2v97b777gNwlkIqMIVlGEZk\nyFi2hoceegjwHdSjR492S8Kvv/56porVZOR8lPP8mmuucX46hQfICdkc5aLtTalE+zWFfIjJRvdK\nSuvjjz8GcPctKlxwwQVuq1WYxx9/nLfffjvNJWo8P/vZzwBPWYEXOrRw4UIAt6XoxIkT7noFwcpn\npf4Yi8WcklywYEHKy20KyzCMyJAxhaUVQQUNrl271i2namaSMpk1a1bWbhgdOnQo4Pt/AK6//nog\n+zdjN0QyNiNrpXT8+PGAtxoVXgaXH0UBw1Fh/PjxtYJ633rrLcAPusw2lGzgnnvuAfwV7IULF3LD\nDTck/EyvXr3cVjhZROKf//yn21KWDjKewO/TTz8FvN3timGZMmVKjddWrVq5pWE5sLOF3//+94Af\nK7V48eKkDVSKh8rUIsTZZ59d53uDBw92dZYpf9555wFeVg4tDqgOMi9WrlzJqVOnAC/2B2DNmjUp\nKH3q0IOtdEbgxycpvCG8qJQt5OfnA/5igbjvvvvo2LEjANOnTwfguuuuA2DgwIFuF4YGOL3OnTu3\nVjhSKjGT0DCMyJBxhSXmz5/vIp2lWpTYbebMmXTv3h2AX/3qV0Dml8C1L0wZKTTjvPTSS0n7DSmr\neDzO+vXrk/a9dSEVpLo89dRTzikbZtCgQU5hVVZWAnD8+HEANm7cyJ/+9CfAN+ulOvfs2eMCDLUI\nEZX9gxdccAFAQkf7li1bgOzfJ6i8ago90L6/rVu31ul22bVrlwtt0P5Phexox0a6MIVlGEZkyBqF\nBVBaWgrAN7/5TQCuvfZawNufdffddwNejibA7TvMFFIH8gns3bsXwAW/ng4KkVDIh1i0aBE//OEP\nT/t7G4scsdrzpuywidi+fbvbcrVp0yYAVqxY0eBv3HXXXW5WlyqJCnVlEIWa/qxsRgsb8sO98sor\ngOevlD9Z4QnPPPMM4O0JVo42KSz9P92YwjIMIzJklcISmgWUA2v27NluRUn5xpUrShtMM41Wvk53\nFbOgoMBthVB2C/l6HnnkEbelJx08/PDDKftu+SUhsS8oG5GfMhyOAb4aybZstw2h3HNSu/UxatQo\nt1lf6jJT6jirBizFtNx8882AfziBBivwHLrgpbzIJk7X2a6H4YEHHnA74PUQNHQwR9RJxwEXyUA7\nL9q1a1fj7ytWrGDatGkZKFF6admyZY0FIDCT0DAMo0EyrrC0f+3ee+/lpptuAqBTp061rquqqgJ8\nkyvTGR20pK9XOTEbm2zw+9//PgA//elPAS83lKKJtQfRyA507Fq4zz3xxBNpNdUzhfYYZgOmsAzD\niAxpV1hST8q8qdOdFZSXiNWrV7uA0WQGZjaH8BYF1euxxx5zQZM6fEMHok6ZMsVlWtU2Fh3UsXDh\nQpeH6ExHqlQ5xBoTDpEp5syZU2fK6GXLlqW5NJnh6quvznQRHKawDMOIDGlRWMp71L9/f/7whz8A\n0K9fvzqv15KrkvcvWLAg4z6rhsjNzQW84Eut7mk7g4Jdg2h2VmYK5Sf6MiBVmq7DLk4Hrd6OGzfO\n9T1ta5k1axaQ/dtwkkXPnj0zXQRHSgYs7fLXuXxq/PoqvmzZMh555BHAd/IFE4hlGzqzTylYFIIB\nvnkYPszhwIEDbjk4aicBpYJLL70U8COqswmlYQkuAGn/6v3335+RMmWKJUuWZDxziMjeKc4wDCNE\n0hTWiBEjAC8A8pJLLgGga9eudV6vnf06n3DmzJlpzavTXBSFrlAM7XVUtHoQJXN78skn+eSTT9JU\nwuwl3ecsGs2jtLTUZVKRlVRSUgKk9sCJRJjCMgwjMiRNYd144401XoNoO80rr7zicifJXxW1tLhh\nFMiqDAvhTAtGTV577TW+8Y1vZLoYDaIcXcuWLXOnOn+ZmTlzJuCf1q0woxkzZrjnOx2YwjIMIzLE\nmnK4QywWy86TIJpAPB6v14FyJtQRWBOPxy+u74IzoZ4NtSVYPZOFDhN5/vnnAT+P/wsvvOBywDfX\nB92oetqAVZMzoY7YgOWweiYXDVwyCb/zne+4LCvNNQ0bU08zCQ3DiAymsEKcCXXEFJbD6hkdTGEZ\nhnFG0dSwhv3AtlQUJE10b8Q1Ua8jfDnq2Zg6gtUzKjSqnk0yCQ3DMDKJmYSGYUQGG7AMw4gMNmAZ\nhhEZbMAyDCMy2IBlGEZksAHLMIzIYAOWYRiRwQYswzAigw1YhmFEhiZtzfkybLA8E+oI7I/H4x3q\nu+BMqKdtCvb5stTTFNaZSZT3lBlGnaT9qHqjJjpBJicnh/C+Tv3f9nsahocpLMMwIkNWK6zg+XVR\nVhn1ncOnE3VbtGhRq45VVVXuNcr1P9NQewbbJNzGid4Lfs7a8/QwhWUYRmRIi8IKzjC5ubkAFBQU\nAJ6yAE9p5Ofn13hPHDlyxKkNff7UqVPuVbNVdXU1kFk1Fpxp9W/VMT8/n+LiYgCGDRsG4E7JPn78\nOP/5z38A/zTdsrIyAA4ePMjJkydr/E6m6pioLfPyvG6kMyerq6sb1RaJlGemlUdjlFLw/1LIYRVV\nWFjIxRd7Wap1Vufq1asBmD9/vmtP3bNM1/t0icVidd6zVNTJFJZhGJEhpQoruAIG3qzTqlUrAM4+\n+2wAevXqBcDQoUPp2bMn4CslnXNWWlrKZ599BnhqCzzVAbBnzx5OnDgB+D4fzVrBv6UTKQ8pq9at\nWwPQv39/rrvuOgAGDBgA4OpcXl7u3nvvvfcAWLNmDQDr1q3j888/B3Azc0VFhfu9ZM9kai+9Bv8d\nVMhq3+PHjwO+0mrRooUrn8qrMsZisRqqOliXYD2yRXEE1UPwftT1t5YtWwIwcOBA7rnnHgAuu+wy\nAHr37g3A2rVr3cnS9Sm6TJGonmEFGfS9qj2F+kNFRUXS65OSAStsCun1rLPOolu3bgBccMEFgN+Y\nAwcOdO+1b9++xvft27ePDz74AIB33nkHgO3btwNQVFTk/q0bpUFKA186CZpKGqg0KE+fPp2xY8cC\n/vluKmNFRQXt2rUD4JxzzgGgQ4cO7trFixcDsHv3bnd9qsnLy3MdUxONypuXl+fKoPbVgFVUVOT6\ngK4JmvRFRUWAN0gDHDhwAPAmmkybuuGHtaGFH90PXSd3xqhRo1xbh90gwRCWTA9Qqm9eXl6t51Wv\nbdq04dxzzwXgvPPOA/yJ6NSpU05E7Nq1C/AFQyra00xCwzAiQ0oVlgiaSHI6yxTSzF1eXs6hQ4dq\nXB+c1TVqd+3aFfDV1ObNm+v8vXSag0FVef755wNw6aWXAnD99dcDMGLECGcyaOZRPY4fP+5mu7Zt\n2wI4p21ubq5zxOv6sBmcTLT4UVhY6MqrthAFBQVullUZpLDatm1bS32J6upq2rRpA/jqS69HjhxJ\naB6mg/DCjajPJKyurnbvq+59+/YFYNKkSa6vHz58GIBPPvkE8NwY9YW6JAqbSDaJfl/PTceOHQG/\nLsOGDXPKSq4csW/fPueuWL9+PQDLly8HPBWWbCvHFJZhGJEhLU53zRQ5OTkuHEGzs5znhw4dqmXr\ny4dTWFjIF198AfizudTYzp073XdmYnZWHaVKSkpKnO9i4sSJAFx00UWAp1KOHj0K+KELqtfnn3/u\nfF6azTRD9+nTxznk9bmg36e55ZeK0ndJTfXo0cP5GuUwVpvs27fPtZ3aRGEYrVu3dspKbSO/XLdu\n3Vw7f/rpp4CvFjdt2uS+K1M+nmBfhYad7rpebXXFFVcAXpurnuqrL7zwAuDdp7qUcSwWS2udpQxb\nt27NkCFDAJg8eTKA81uBr+y1+CUVVlJS4qwe9WUpyQMHDiRdLZrCMgwjMqRUYYVnpBMnTjhlpdUu\nvR48eNBdrxH78ssvB7xZZ8eOHQD873//A2DVqlWAN/LXtWk4HUhJSHmMGjWKm2++GfD9dJrFdu7c\nyebNmwHYsGED4K+UnTx50s1a+pt8CF27dnWqR/XeuHGj+1xz6huPx53CkbItLCwEYPDgwdxxxx2A\n77uQYtqyZYubbbdu3Qr47d2lSxe34qnrtfLbv39/py70Ozt37nTfKZWXiXCUIOFlfKjdn6uqqlzb\nKhBYoQz5+fnOd/Xiiy8CsGLFCve5MOnqs2GLQKp+5MiRruxqK62+L1++3LWRLATVt23btu471H/V\nj+rz050uSR+wgsv6crhpkIrFYm4JVI46ycicnBy6d/dOq5bTWjfg8OHDbNmyBYCVK1cC/hJqRUVF\nrY6UDnNCddSDqQa85ZZbGDRoEOB3cA3KixYtcuX+73//C/imXU5OjlvuF+o4wWVl/a25pmAi1NF6\n9OgBeI5jmafqfGq/HTt2uAFLpqDqu2/fPmciqTOrD5SXl7sJSXV4//33Ac9sDJv36XBAB0n0kGlQ\n0nsqd05Ojqvn1772NcBfMDl27JhzPj/11FOAf+/i8XhG4q9isZiriyYL9atbb72VLl26ALgYseee\new7w+mowxAF8Mzc/P9+5FNT++/fvB7zn38IaDMP40pJ0hRWPx2s5TkVOTo4bhTXjSpr27duXcePG\nAbgAUo3qS5YscaaQzI9g4KSUnL471bNVbm6um2n69esHwN133w3A8OHDXZ2knqQK33//faesZNoG\nnbxyTCtIVt9dUlLi1I+c38lUkfoOlXvo0KGAZ87JrBEyzZctW+bUopzvMmXbt2/vFgfCoRrB3Q76\nvf79+wOe6SE1Gi5bpsjNzXVqOhitr1ep6UmTJtW45rPPPuPRRx8FfGsgUV3C35nK+ga/W/deoTd9\n+/Z17ajgbCnEY8eO1dqhIgd9cXGxU5zq57KaUhG4bQrLMIzIkBKne1jxaIYqKipyKkJKQf6q8ePH\nOye17Gvtbi8tLXUzdth3E/QHpNpRG3RYaqa54YYbAH+mKioqckpDDvZFixYBXn3C4QzyKRQXFzvV\nGb6mqqrK+XZUf/2+rmlOnTTbjh49GvD9cV26dHFtKB/i22+/DXhOf83IcsQG94xu2+ZladbMrGtK\nSkqc/0N9QWq1bdu2TlWn23clEinX8PYbvbZp08YtsKgfq57PPvusC6RM5G/MRNhGMLuE7rl8lBUV\nFezduxfwrRg9T61bt3b+5Kuvvhqo6XT/6KOPANzngz5rYWENhmF86Ujp1hy9BhWWlIH8FiNHjgQ8\nf41meqmJ4CxUn3pK9yycl5fnQg40wwa3m2zatAmAZ555BsBtXD548KALIQjfo+rq6horaeCrqGCG\nAymqZK0SxuNx5w9ctmwZ4Ofo2rJli5uBFTgoX1qbNm3c6qDaTe189OhRVz6tGHXq1Anw7p3qpVeF\nhLRv394pzkyTqO9Jaam+Q4YMcb4rtZ2CJl9++WWnJOvzXaWToDWizfdqgxYtWri2Vftr1bqwsNBZ\nP1/96lcBfyU5JyfHKStlV9H9ysnJSXqOurQOWHl5ee5GaTlY15SVlbm/6QGSfB0wYIBzUid6YNNl\nPgRTaigaWA+bGmnPnj3Mnz8fgLfeegvwl/2DyQb1qnqUl5e7EABFlytkAvx7osUHDXzBTnG66PO6\ntxpg+/Tp4yYPmX8Kq7joooucuScTNphkUGa9yq3fKCsrcw9C0BEPXjuGB+JMmYaiqqqqlkmoNn/w\nwQddHfTQ/uMf/wC82LK6soZkciFBz6ImRbVvfn6+W2yReauBq6CgwE3Ieg1OTuHwlvBzH6S5fdVM\nQsMwIkNKFFZdked5eXluhJVTVjKyVatWbraSg09qbOzYsXz88ceAH4SpmQHSlwQtuJt98ODBNd5T\nUODGjRtdAj79LZgGN7yMre9s2bKlU1ZXXXUV4DusKysr2bNnD+Dft1Tk/JJqU+hFMIOGVJBCTnr3\n7u0UsZy0CnkoLy93ZdfndG2wnRVwKHN369attdwBmSYY/KjyTps2DfDMI7Wjdh68/vrrgHcvw8os\nE/nZwkhZ6Tl69913AS8fndpFbafnsLKy0ilI1UHqf9u2bW7Xhp5lXVNZWVkrz5gpLMMwvjSkZGtO\neEbRDFpcXOz2JGnJX76RWCzmRngFYSof1IUXXujsa4U6KKAxeARWumblHj16OGelZiypkxUrVrhl\nXjmqdR+Cs4vuiWbtTp06ce211wK4YETNYmVlZW4Wk9IMKsxkofJJzeXm5rpZU+VVMGzHjh1dGYJZ\nSMGrt5zt4WykJ0+edMpZ6lK+s7179yYMW0knibbmyMmu7BvqnwUFBS7jhLaxaP9dMFdWNigrIWWu\n50fBoTk5OS4zrtpMbXjw4EH3txkzZgB+nVatWuX6pPp70KIIb2dqLqawDMOIDElTWEFbNRz8p1Wh\no0ePullZKwrBMH4pCimUYLaG4BFS+h1I72qhFEH37t2dGlR5NLuUlpbWCpwLlid8MIWWiydMmMD4\n8eMBfxVKambp0qW88cYbgB+YmIpZW7Ovyr1r1y7XTlKCCiAtKCioESgKvs/u5MmTTlGFjwA7cuRI\nraVuzfbBzBvZ4sPKzc11S/jTp08Hairfv/3tbwCufaS0g+2TLXWB2plV5aN88803XViLFGXwABH5\nbLVZWn0k0QEpwTZM9ib9pA1YwSV/dW51ZP3/2LFjboAKO+hatGjhIp8Vs6OH+9ChQy62SSZYsBPU\nla0h2ShOpWXLlu43wodBtGvXrlYS/2AdtSNeSf2mTJkCeOmTZWZKii9ZsgSAefPmuR30+r1UZGsI\nU1VVVeMElCDBRHPBsAR9LmxaBdPo6KEO7wg4duxYnYdBpNKsCtYlvB+1oKCAqVOnAt4+0eA1Gzdu\ndCEsMqMbu9si0+EaIphRRe0hgntMlY1C/VeunTVr1ji3TjrOWDST0DCMyJB0kzA3N9dJSjlX9d6J\nEyfc6CvzStcWFRU5Z7Pkp5TZhg0b3HJ+OBAxnSllgwdNaFZRIJ2W7ceMGeNMOQW76nOdO3fmpptu\nAvxUukE1KdWpPWhPP/004KUSDi4yQGpnsaBKCC9H6zWoojSzBlVDXSciV1ZWukBTKVCZFPn5+bUU\nSroS+YXLKVP2wgsv5MorrwR8hS0zedasWQmzhzT03YnyYYlU9+VwWI1IdFp38OgypegOuwZ2796d\n1tTkprAMw4gMSVdYwYyjmpEUbBiLxVwYv2bZzp07A56qktNZjmgpjn//+99u+Tjs+4L0+QGCQa/y\nWcjvJP/bxIkTXTiGAinlpG3ZsqVTVFqI0H0rLy9n6dKlADz00EMAzm+XiuOS6iNRpoKwgggGwYav\nDRLO2LFjxw7n/xBaiCkuLk6o5FJNUPGoTgqavP32292/Vc4333wT8EJYGpMtI5GaCt+7TPu0Ev2u\nytSzZ09KSkoA37GurB1HjhxJa5lNYRmGERmarbASBcdJPSh3t1bEgvmVpJQ0e/Xr18+pFfm1Fi5c\nCHgKSz6cZO/+bgqaYTds2OA2IWszsEIRioqK3DK41JRWXwoKCpzqlHLQiuBLL73Ek08+CfjBoeFV\nm0xQV5hBogDh4DVhVaF279Chg/ODqH7aktSqVSu3zF7X9ySTRN+tFU+F1AwZMsSpQ2UOXbBgAeAF\nVIb9U4kOr0iknjIdvpEoe2oY+RiHDx9eK1/72rVrgZqB2+kg6ZHulZWVrtH79OkD+Kl+hw8f7gYo\nDUp6gMvLy525qP1NSt6/f//+hNHi6UZm0fbt25kzZw7gx90o7cagQYNqdVA9oBUVFW4JX/v1tCy+\ncuVKt7+rPgdutpDIJKwPTWI9e/Z0/9agrfsTNK9SEclfF8HBVxOQBqzOnTu7emoxRIdmVFZWOud8\neADKzc2tlViyvkEqUxH9icoUTvI3aNAg99zJzaFFsETmdCoxk9AwjMjQbIUVHqGrqqrczm6NwkpY\nX1lZ6WZTzbKaVdevX+/ObZPk1pLxqVOnsmI/lmbKU6dOuVlWDuTS0lLAO5dQJo6UksIbPvzwQ3fA\nhMw+hUccP348LSELTeF0Q0aCqXhlTgWPiQpm7wA/c8ChQ4dcf9D16VCbicqr/x8+fNipYqlhqb+g\nGRU2i4OJCBOZx5nuz/W1q+69XDmjR4929ZFJqHZKd181hWUYRmRImg8ruEdJo68Uk4Iqy8rKnCNd\nwXdSHNu2bXM73eUXCgeJZgtVVVU1MowC/PWvfwW8jJPBbUrg35uKiopah0mIhpy0mSAYACoa2xbh\nLTbB06+VRlhL5Oov559/vusPcsin0uke7LMqp9rz4YcfBrywFZVPAcHB/a91tVFFRUWjwj4yRaJy\n6x4o4FuhDK1atXJbtNatWwf4i2ZN9WU2F1NYhmFEhqQrrOCGWb3OmzcP8FRI+FBKEfSXZJsvpz40\na0oRlJeX18pl3ZhQjHSvtjSW01EFwVk3mDUVvPANZZxQ8LDUVzCHfbIyVDa2vOFN5fK/yv/YEImU\naDa1Y2PQir0Ultpu+/btrk/LrxxUWOkk1pQfjMVi0WqBBMTj8XptjGTUMbzjPwMdd008Hr+4vguS\nUc/6BljdA7kD1OGrq6vd7gYtkct0Dp620xgaasv/X8Ym1fN0020nOgUpWaSinonQxKFdG0qB1KtX\nL/e3V199FaBWvFwyaEw9zSQ0DCMymMIKcSbUkTQprMYQVmF5eXlORTU3dCFdyiPTWD19TGEZhhEZ\nmup03w9sS0VB0kT3RlwT9TpCFtUzrOCDPqpmBoU2po4Q/fa0egZokkloGIaRScwkNAwjMtiAZRhG\nZLAByzCMyGADlmEYkcEGLMMwIoMNWIZhRAYbsAzDiAw2YBmGERlswDIMIzL8PwS06f8aV8s4AAAA\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c45fac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  9 | train loss: 0.0351\n"
     ]
    },
    {
     "data": {
      "image/png": "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\njU64AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c253208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "autoencoder = AutoEncoder()\n",
    "print(autoencoder)\n",
    "\n",
    "optimizer = torch.optim.Adam(autoencoder.parameters(), lr=LR)\n",
    "loss_func = nn.MSELoss()\n",
    "\n",
    "# original data (first row) for viewing\n",
    "view_data = Variable(train_data.train_data[:N_TEST_IMG].view(-1, 28*28).type(torch.FloatTensor)/255.)\n",
    "\n",
    "for epoch in range(EPOCH):\n",
    "    for step, (x, y) in enumerate(train_loader):\n",
    "        b_x = Variable(x.view(-1, 28*28))   # batch x, shape (batch, 28*28)\n",
    "        b_y = Variable(x.view(-1, 28*28))   # batch y, shape (batch, 28*28)\n",
    "        b_label = Variable(y)               # batch label\n",
    "\n",
    "        encoded, decoded = autoencoder(b_x)\n",
    "\n",
    "        loss = loss_func(decoded, b_y)      # mean square error\n",
    "        optimizer.zero_grad()               # clear gradients for this training step\n",
    "        loss.backward()                     # backpropagation, compute gradients\n",
    "        optimizer.step()                    # apply gradients\n",
    "\n",
    "        if step % 500 == 0 and epoch in [0, 5, EPOCH-1]:\n",
    "            print('Epoch: ', epoch, '| train loss: %.4f' % loss.data[0])\n",
    "\n",
    "            # plotting decoded image (second row)\n",
    "            _, decoded_data = autoencoder(view_data)\n",
    "            \n",
    "            # initialize figure\n",
    "            f, a = plt.subplots(2, N_TEST_IMG, figsize=(5, 2))\n",
    "            \n",
    "            for i in range(N_TEST_IMG):\n",
    "                a[0][i].imshow(np.reshape(view_data.data.numpy()[i], (28, 28)), cmap='gray'); a[0][i].set_xticks(()); a[0][i].set_yticks(())\n",
    "    \n",
    "            for i in range(N_TEST_IMG):\n",
    "                a[1][i].clear()\n",
    "                a[1][i].imshow(np.reshape(decoded_data.data.numpy()[i], (28, 28)), cmap='gray')\n",
    "                a[1][i].set_xticks(()); a[1][i].set_yticks(())\n",
    "            plt.show(); plt.pause(0.05)\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nUYr8fEEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f547c4ed7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize in 3D plot\n",
    "view_data = Variable(train_data.train_data[:200].view(-1, 28*28).type(torch.FloatTensor)/255.)\n",
    "encoded_data, _ = autoencoder(view_data)\n",
    "fig = plt.figure(2); ax = Axes3D(fig)\n",
    "X, Y, Z = encoded_data.data[:, 0].numpy(), encoded_data.data[:, 1].numpy(), encoded_data.data[:, 2].numpy()\n",
    "values = train_data.train_labels[:200].numpy()\n",
    "for x, y, z, s in zip(X, Y, Z, values):\n",
    "    c = cm.rainbow(int(255*s/9)); ax.text(x, y, z, s, backgroundcolor=c)\n",
    "ax.set_xlim(X.min(), X.max()); ax.set_ylim(Y.min(), Y.max()); ax.set_zlim(Z.min(), Z.max())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "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.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
