├── README.md └── Tensorflow Examples ├── Convolutional Neural Network using MNIST data.ipynb ├── Logistic Regression.ipynb ├── Multilayer Perceptron using MNIST data.ipynb ├── Nearest Neighbour Classifier.ipynb └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Deep-Learning 2 | This repository contains Deep Learning examples. This repository will be useful for Deep Learning starters who find difficulty in understanding the example codes. 3 | -------------------------------------------------------------------------------- /Tensorflow Examples/Convolutional Neural Network using MNIST data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Extracting MNIST/data/train-images-idx3-ubyte.gz\n", 13 | "Extracting MNIST/data/train-labels-idx1-ubyte.gz\n", 14 | "Extracting MNIST/data/t10k-images-idx3-ubyte.gz\n", 15 | "Extracting MNIST/data/t10k-labels-idx1-ubyte.gz\n" 16 | ] 17 | } 18 | ], 19 | "source": [ 20 | "import tensorflow as tf #imports tensorflow as tf. Tensorflow is an n-dimensional matrix, just like a 1-D vector, 2-D array, 3-D array etc.\n", 21 | "import numpy as np #imports numpy as np. Numpy is used for basic matrix multiplication, addition.\n", 22 | "from tensorflow.examples.tutorials.mnist import input_data #imports mnist input data from tensorflow examples. \n", 23 | "#Mnist data set consists of images of numbers from 0-9, each image is a 28*28 dimensional. There are total 60k training images and 10k test images.\n", 24 | "mnist = input_data.read_data_sets(\"MNIST/data\", one_hot = True) #using input data call read data sets from a folder MNIST/data and store in mnist.\n", 25 | "#one hot vector is used which means at once only one class will be true. Since our images have labels 0-9 that means out of all 10 classes only 1 class will be true at a time rest all will be zero." 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 5, 31 | "metadata": { 32 | "collapsed": true 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "from matplotlib import pyplot as plt\n", 37 | "%matplotlib inline" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 6, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "data": { 47 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQQAAAEMCAYAAAAiW8hnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFgdJREFUeJzt3Xu4XfOdx/H3x/2SyA2RuCRVQmNoaKo6Y8jUpaIUYx4t\nHk3RJ26Z6oWHyTMdKTW0o62Ztkg6qLpN05JKVJVSxcxoiyFEGpREE7mJpIiKhu/8sdb52Y5zfvvs\ns/c5e5/k83qe82Sf9V2X7157n8/+rbVX9lZEYGYGsEGzGzCz1uFAMLPEgWBmiQPBzBIHgpklDgQz\nSxwI3SRpiqQbenmbP5c0odHz1tjD30qa1+j19gRJp0m6vLw9UlJI2qgLy42TtLCb2+z2sh2say9J\n/9OIdXVVnwqE8kG9Q9JKSUskfbftAZY0StJtkpZLelnSLyTtVrHsZyW9Jem1ip9xFfUxkh6Q9CdJ\nCyV9paJW94NcPhl3qWcdETE+Iq5r9Lw19vBAROxWfc7mkrQJ8M/AvzW7l5zc8y4iZgOrJB3ZW/30\nqUAArgCWAcOAMcCBwJllbSAwE9gNGAr8Frit3fL/GxH9Kn7uq6jdBNwPDG5br6RP9tQdaa8rr1xW\nk6OA30fEomY3UkW1592NwGm91UxfC4T3AdMj4o2IWALcCewBEBG/jYirI+LliPgL8G1gN0lDurju\nkcCNEfFWRPwBeBDYQ9KWwM+B4RUji+HlMptI+qGkVyXNkTS2oxVLur+8+Xi5/KfaRh2SzpO0BLhW\n0iBJt5ejnJXl7R0q1nOfpM+Vtz8r6UFJl5XzPi9pfDfnfZ+k+8v78UtJ3+vscKj9aEnSfEnnSpot\nabWkqyUNLQ9Z2tY3qGL+H5ejuz+V29yjojZE0ixJr0j6naSvSXqwor67pLvLEeA8ScdlHs/xwK87\nK0o6WdLcssfnJL3nj07SZEkvlffxxIrpm5b78gVJSyVdJWnzTC85I+ngeVdRvw84SNKm3Vx/Tfpa\nIFwOfFrSFpK2p3jQ7+xk3gOAJRGxomLa3uUD/LSkr7R7Vb4c+IykjctDjY8Cv4yI1eV2XqwYWbxY\nLvNJ4L94Z3Ty3Y4aiYgDypsfLJf/Ufn7dhSvDCOAiRSPx7Xl7zsBf+5snaWPAPOArYFvAFdLUjfm\nvYliRDUEmAKclNlmR44FDgFGAUdSBOhkYJvyPn2+Yt6fA7sC2wKPUrwCtvkesJpiv0wofwAog/nu\nstdtgU8DV0ga3UlPe5b3tzPLgCOArYCTgW9L2qeivh3Fvtq+7GOa3jkEvbS8r2OAXcp5/qWjjUi6\nQtIVmT46fN61FcsRzl8oRr49LyL6zA/wAeARYC0QwA8AdTDfDsAi4PiKaTtTjDA2oHiyPAX8U0X9\nr4FnK9b91YraOGBhu21MoQiMtt9HA3/O9B7ALu3W+SawWWaZMcDKit/vAz5X3v4s8GxFbYtyG9vV\nMi9F8KwFtqio3wDc0ElP79oXwHzgxIrfbwGurPj9H4GfdrKugWUfA4ANKZ/4FfWvAQ+Wtz8FPNBu\n+anABZ2s+xngsIrfR5bb2qiT+X8KnF1xH9cCW1bUpwNfAUQRWu+vqH0UeL6z50qV53Snz7uKeRYB\nB/TG31ifGSFI2oBiNHArsCVFeg8Cvt5uvm2Au4ArIuLmtukR8VxEPB8Rb0fEE8CFwD+Uywwu130h\nsBmwI/BxSWeSt6Ti9uvAZjWeC1geEW9U9L6FpKmSFkh6heLYcqCkDattPyJeL2/2q3He4cDLFdMA\n/ljDfQBYWnH7zx383g9A0oaSLpX0h/L+zS/n2ZpiNLFRu21X3h4BfETSqrYf4ESKUOvISqB/Zw1L\nGi/pofLwYxVweNlHWj6K0WGbBRT7ahuKQH2koo87y+k1qeF51x9YVev6u6PPBALF0Hon4LsRsSaK\nQ4FrKR5IAMpj1buAmRFxcZX1BUXaQzF6eCsifhgRayNiIcWhwOEV8/aE9uv9MsXQ8CMRsRXFYQ8V\nffaExcBgSVtUTNuxh7Z1AsXJvoMpRgUjy+kCllO8Su5QMX9lH38Efh0RAyt++kXEGZ1sazbFsP49\nyuPxW4DLgKERMRC4g3fv50HlYUqbnYAXgZcoQm6Pij4GRERnQZxT7XlHeWi8CfnDn4bpM4EQES8B\nzwNnSNpI0kCKY7vZAJK2An4B/HdEnN9++fIVYWh5e3eK4V/buxBPF5N1gqQNJG1HMUSdXdaXAkMk\nDajjLiyleALk9Kd4sq0qXz0uqGN7XRIRC4CHgSmSNpH0UYrzAD2hP7AGWEHxKvuvFX28RTH6m1KO\nlHYHPlOx7O3AKEknlcfbG0v6sKQPdLKtOyjO2ndkE2BTyhAqT7Ae2sF8Xy33yd9SnG/4cUS8DXyf\n4pzDtlD80Ur6eJf2wLtVe95R3od7I2JNN9Zfsz4TCKW/Bw6jeCCfpTjm/GJZOwb4MHCy3n2twU5l\n/SBgtqTVFE+WWymfkBHxSrnuL1IMNR8DnqQ4hiUifg/cDDxXDhPb3mWoxRTgunL5zs6OXw5sTvEq\n9BCdnzBttBMpjoNXUNznH1H84TbaDymG3osozuE81K4+iWLksAS4nmKfrwGIiFcp/mg/TfFKvYTi\ncLGzs++zgN07eqzKdX2e4rzASoqRy8x2sy0pay9SnPg8vXweAJxH8fx7qDz0+SWdnPQr34G4qqNa\ntedd6USgw+V7RG+cqOjgJMlhFEOgZ4Hzm9FDlf7mA0+UD9DDLdDPNRRnxZ+smDaY4qz7M+W/gxq4\nvR/RwcmtGvubQvGH/1j5c3g3+vg6cF0d92MiRcjuCPyKIoTm8M7Jwx7bhzX22Vl/V1IEYrf3Yc29\nNOHObwj8gWL4vAnwODC6GQ9Epsf5wNbN7qOinwOAfdr9wX2jLUyB84Gv17H+DwPvpxgxHga8Aexd\nZ39TgHNq7GN3YC+KY/l9KUZKRzdg/w0D9ilv96cYqo9u5D7sof5q3of1/jTjkGFfirfAnouINylO\nohzVhD76jIi4H3i53eSjgLZLk68Djq5jE9tRvE35GvAfwBkR8X919tcd/SkO5VZTjFK+yXuvNq1Z\nRCyOiEfL268CcymuHWjkPuyJ/npdMwJhe979dtJCmnTnMwK4S9IjkiY2u5lODI2IxeXtJRSXa3dL\nRMyKiB0jYouIGBUR1zamRSapuILxGlVcrZjp43cRsUvZx/si4pIoXzYbRdJIYG/gNzRwHzZKu/6g\nxn1Yr752UrG37B8R+1BcoXiWpAOqLdBM5R9Nq31a7pUUhyFjKN7a/GZz2wFJ/SjebvxCFCf0klbY\nhx301+v7sBmBsIh3v7/cdlVhy4jyP8RExDJgBsVhTqtZKmkYQPnvsib38y4RsTSK6/Pb3qZr6j6U\ntDHFH9uNEXFrObll9mFH/TVjHzYjEH4H7KriP9RsQvE2Uvu3fJpG0paS+rfdpnir68nmdtWhmbxz\nrf8EGnCs3Uhtf2ilY2jiPiz/z8bVwNyI+FZFqSX2YWf9NWMfqsGHaF3bqHQ4xdtBGwLXRPWrCnuN\npJ0pRgVQXEp7U7P7k3QzxTXyW1Nc4HQBxbX30ymuoFsAHBcRjTix16j+xlEMdYPiXZvTKo7Xe7u/\n/YEHKN5KfrucPJniOL3p+zDT3/H08j5sSiCYWWvySUUzSxwIZpY4EMwscSCYWeJAMLOkqYHQwpcF\nA+6vXq3cXyv3Bs3rr9kjhJZ+UHB/9Wrl/lq5N2hSf80OBDNrIXVdmCTpMODfKa44/M+IuLTK/L4K\nyqxJIqLqZ3N2OxDKTwJ+muLz+BdS/B+F4yPiqcwyDgSzJulKINRzyOAPOjFbx9QTCH3hg07MrAY9\n/gWj5dsnrX5G18yoLxC69EEnETENmAY+h2DW6uo5ZGjpDzoxs9p1e4QQEWslTaL4tqS2DzqZ07DO\nzKzX9eoHpPiQwax5evptRzNbxzgQzCxxIJhZ4kAws8SBYGaJA8HMEgeCmSUOBDNLHAhmljgQzCxx\nIJhZ4kAws8SBYGaJA8HMEgeCmSUOBDNLHAhmljgQzCxxIJhZ4kAws8SBYGaJA8HMEgeCmSUOBDNL\nHAhmljgQzCxxIJhZ4kAws8SBYGaJA8HMko2a3YB1Xb9+/bL1yZMnZ+tHHHFEtr7HHnvU3FOlDTbI\nv77cdttt2fp5552Xrc+bN6/mnqw2dQWCpPnAq8BbwNqIGNuIpsysORoxQvi7iHipAesxsybzOQQz\nS+oNhADukvSIpImNaMjMmqfeQ4b9I2KRpG2BuyX9PiLur5yhDAqHhVkfUNcIISIWlf8uA2YA+3Yw\nz7SIGOsTjmatr9uBIGlLSf3bbgOHAk82qjEz632KiO4tKO1MMSqA4tDjpoi4uMoy3dvYemLAgAHZ\n+g033JCtjx8/vpHt1ExStl7tufbCCy9k64ceemi2/uyzz2br67uIyD9A1HEOISKeAz7Y3eXNrPX4\nbUczSxwIZpY4EMwscSCYWeJAMLPEgWBmSbevQ+jWxnwdQtapp56arU+dOrWXOumeeq9DqGbu3LnZ\n+p577lnX+td1XbkOwSMEM0scCGaWOBDMLHEgmFniQDCzxIFgZokDwcwSfy9DC/nYxz5W1/LV3udf\nuXJltj548OC6tr9s2bJs/YorrsjWjzvuuGx9yJAhNfdktfEIwcwSB4KZJQ4EM0scCGaWOBDMLHEg\nmFniQDCzxNchrEMmTsx/Y96MGTOy9TPOOCNbX7FiRbY+bdq0bP2cc87J1ocPH56tr1mzJlu3+nmE\nYGaJA8HMEgeCmSUOBDNLHAhmljgQzCxxIJhZ4usQetF+++2XrR9yyCF1rf/222/P1letWpWtX3LJ\nJXVtv5p+/fpl6wMGDMjWH3zwwUa2Yx2oOkKQdI2kZZKerJg2WNLdkp4p/x3Us22aWW/oyiHDD4DD\n2k07H7gnInYF7il/N7M+rmogRMT9wMvtJh8FXFfevg44usF9mVkTdPek4tCIWFzeXgIMbVA/ZtZE\ndZ9UjIjIfYmrpIlA/n/dmFlL6O4IYamkYQDlv51+3G5ETIuIsRExtpvbMrNe0t1AmAlMKG9PAG5r\nTDtm1kxVDxkk3QyMA7aWtBC4ALgUmC7pVGABkP9AfQPgE5/4RLZe7/ciNNsGG+RfXz70oQ/Vtf57\n7723ruWtuqqBEBHHd1I6qMG9mFmT+dJlM0scCGaWOBDMLHEgmFniQDCzxIFgZok/D8Ea5qabbsrW\nx48fX9f6zz333Gx9hx12yNanT5+erd93333Z+tq1a7P1dYFHCGaWOBDMLHEgmFniQDCzxIFgZokD\nwcwSB4KZJb4OYR2y8847Z+tr1qzJ1seNG5etT5gwIVs/+uj8Z+1GdPpJe12y+eabZ+unnHJKXfWz\nzjorW586dWq2vi7wCMHMEgeCmSUOBDNLHAhmljgQzCxxIJhZ4kAws8TXIfSiq666Kls/9thjs/VR\no0Zl63fccUe2vnr16mx9+PDh2XpPmzNnTrY+c+bMbP1nP/tZtn7LLbdk69U+T2F94BGCmSUOBDNL\nHAhmljgQzCxxIJhZ4kAws8SBYGaJr0PoRYsWLcrWTzjhhGz9Jz/5SbY+YsSIbH3gwIHZer1mz56d\nrV944YXZ+owZM+ra/mabbZatL126tK71rw+qjhAkXSNpmaQnK6ZNkbRI0mPlz+E926aZ9YauHDL8\nADisg+nfjogx5U/+Ejkz6xOqBkJE3A+83Au9mFmT1XNScZKk2eUhxaCGdWRmTdPdQLgSeD8wBlgM\nfLOzGSVNlPSwpIe7uS0z6yXdCoSIWBoRb0XE28D3gX0z806LiLERMba7TZpZ7+hWIEgaVvHrMcCT\nnc1rZn1H1esQJN0MjAO2lrQQuAAYJ2kMEMB84LQe7HG98dhjj2Xru+yyS7Z+6KGHZutf+tKXsvWD\nDz44W581a1a2fswxx2TrPe3II4/M1vfaa69sfX343oVqqgZCRBzfweSre6AXM2syX7psZokDwcwS\nB4KZJQ4EM0scCGaWOBDMLFFE9N7GpN7b2Hpo7Nj8xaB33nlntv7KK69k6+PHj8/W582bl63Xa8iQ\nIdn6008/na0PGDAgWx82bFi2vnz58my91UWEqs3jEYKZJQ4EM0scCGaWOBDMLHEgmFniQDCzxIFg\nZom/l2Edss0222Tr1b6XoX///tn6G2+8UXNPjfTmm29m69W+d2HBggXZ+urVq2vuaV3jEYKZJQ4E\nM0scCGaWOBDMLHEgmFniQDCzxIFgZomvQ1iHjBkzpq7lH3/88Wx9xYoVda2/XmeeeWa2PmrUqGz9\n5JNPztZff/31mnta13iEYGaJA8HMEgeCmSUOBDNLHAhmljgQzCxxIJhZ4usQLFm0aFG2/tprr/Xo\n9s8999xs/aKLLsrW58yZk63PmDGj5p7WN1VHCJJ2lPQrSU9JmiPp7HL6YEl3S3qm/HdQz7drZj2p\nK4cMa4EvR8RoYD/gLEmjgfOBeyJiV+Ce8ncz68OqBkJELI6IR8vbrwJzge2Bo4DrytmuA47uqSbN\nrHfUdFJR0khgb+A3wNCIWFyWlgBDG9qZmfW6Lp9UlNQPuAX4QkS8Ir3zvZEREZ19kaukicDEehs1\ns57XpRGCpI0pwuDGiLi1nLxU0rCyPgxY1tGyETEtIsZGRP6ric2s6bryLoOAq4G5EfGtitJMYEJ5\newJwW+PbM7Pe1JVDhr8BTgKekPRYOW0ycCkwXdKpwALguJ5p0fqKTTfdNFs/++yzs/Vq1xlUHqZ2\n5LLLLsvWe/o6inVB1UCIiAeBzh6Jgxrbjpk1ky9dNrPEgWBmiQPBzBIHgpklDgQzSxwIZpb48xAs\n2WqrrbL1k046KVuv9nkGo0ePrrmnSt/5zney9euvv76u9ZtHCGZWwYFgZokDwcwSB4KZJQ4EM0sc\nCGaWOBDMLPF1COuQ559/vq7lDzzwwLrq1T6vYPny5dn6pEmTsnV/r0LP8wjBzBIHgpklDgQzSxwI\nZpY4EMwscSCYWeJAMLPE1yGsQ6ZPn56tjxgxIlu/+OKL69r+rFmzsvXTTz89W1+yZEld27f6eYRg\nZokDwcwSB4KZJQ4EM0scCGaWOBDMLHEgmFmiiOi9jUm9tzEze5eIyH9gBV0YIUjaUdKvJD0laY6k\ns8vpUyQtkvRY+XN4I5o2s+apOkKQNAwYFhGPSuoPPAIcDRwHvBYRl3V5Yx4hmDVNV0YIVS9djojF\nwOLy9quS5gLb19+embWamk4qShoJ7A38ppw0SdJsSddIGtTJMhMlPSzp4bo6NbMe1+WTipL6Ab8G\nLo6IWyUNBV4CAriI4rDilCrr8CGDWZN05ZChS4EgaWPgduAXEfGtDuojgdsj4q+qrMeBYNYkjXqX\nQcDVwNzKMChPNrY5BniyO02aWevoyrsM+wMPAE8Ab5eTJwPHA2MoDhnmA6eVJyBz6/IIwaxJGnbI\n0CgOBLPmacghg5mtPxwIZpY4EMwscSCYWeJAMLPEgWBmiQPBzBIHgpklDgQzSxwIZpY4EMwscSCY\nWeJAMLPEgWBmSdUPWW2wl4AFFb9vXU5rVe6vPq3cXyv3Bo3vb0RXZurVz0N4z8alhyNibNMaqML9\n1aeV+2vl3qB5/fmQwcwSB4KZJc0OhGlN3n417q8+rdxfK/cGTeqvqecQzKy1NHuEYGYtxIFgZokD\nwcwSB4KZJQ4EM0v+H24DVDRzv/gUAAAAAElFTkSuQmCC\n", 48 | "text/plain": [ 49 | "" 50 | ] 51 | }, 52 | "metadata": {}, 53 | "output_type": "display_data" 54 | }, 55 | { 56 | "data": { 57 | "image/png": "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\n", 58 | "text/plain": [ 59 | "" 60 | ] 61 | }, 62 | "metadata": {}, 63 | "output_type": "display_data" 64 | }, 65 | { 66 | "data": { 67 | "image/png": "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\n", 68 | "text/plain": [ 69 | "" 70 | ] 71 | }, 72 | "metadata": {}, 73 | "output_type": "display_data" 74 | }, 75 | { 76 | "data": { 77 | "image/png": "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\nVjgQzKz4f4atOzaF64R2AAAAAElFTkSuQmCC\n", 78 | "text/plain": [ 79 | "" 80 | ] 81 | }, 82 | "metadata": {}, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "nsample = 4\n", 88 | "rand_idx = np.random.randint(mnist.train.images.shape[0], size=nsample)\n", 89 | "\n", 90 | "for i in rand_idx:\n", 91 | " curr_img = np.reshape(mnist.train.images[i, :], (28,28))\n", 92 | " curr_lbl = np.argmax(mnist.train.labels[i, :])\n", 93 | " plt.matshow(curr_img, cmap=plt.get_cmap('gray'))\n", 94 | " plt.title(\"\"+str(i)+\"th training image \"\n", 95 | " + \"(label: \" + str(curr_lbl) + \")\")\n", 96 | " plt.show()" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 2, 102 | "metadata": { 103 | "collapsed": true 104 | }, 105 | "outputs": [], 106 | "source": [ 107 | "# Parameters\n", 108 | "learning_rate = 0.001 #learning rate is used to reduce our cost/loss/cross entropy and helps in converging or reaching the local optima. The learning rate should neither be too high or too low it should be a balanced rate. \n", 109 | "training_iters = 200000 ##number of times we train our network, its like a loop which trains our network, calculates cost, optimizes it in every epoch, also in every epoch we take \n", 110 | "batch_size = 128 #this means that our training images will be divided in a fixed batch size and at every batch it will take a fixed number of images and train them. \n", 111 | "display_step = 10 #after how many epochs we want to output our desired results on screen\n", 112 | "\n", 113 | "\n", 114 | "# Network Parameters\n", 115 | "n_input = 784 # MNIST data input (img shape: 28*28)\n", 116 | "n_classes = 10 # MNIST total classes (0-9 digits)\n", 117 | "dropout = 0.75 # Dropout, probability to keep units, basically it helps in preventing overfitting our data\n", 118 | "\n", 119 | "# tf Graph input\n", 120 | "#placeholder is like a variable to which we will assign data later on. It will allow us to do operations and build our computation graph without feeding in data.\n", 121 | "#x will hold the training images in form of matrix,the dimensions of x will be in our case None*784, that is why we use None which allows us to vary the dimensionality of our rows.\n", 122 | "#we use float to define its type.\n", 123 | "x = tf.placeholder(\"float\", [None, n_input])\n", 124 | "#similarly y will hold the label of the training images in form matrix which will be a None*10 matrix. None will be replaced by the number of images we want to train on.\n", 125 | "y = tf.placeholder(\"float\", [None, n_classes])\n", 126 | "keep_prob = tf.placeholder(tf.float32) #dropout (keep probability), this drops some part of our network, so that it helps in backpropogation as computation increases and it also reduces vanishing gradient problem." 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "collapsed": true 134 | }, 135 | "outputs": [], 136 | "source": [ 137 | " #Input Image (28*28*1) -> Conv1(32 5*5*1) ->Conv1 (28*28*32)-> Maxpooling(2*2) -> Conv1 (14*14*32)\n", 138 | " \n", 139 | " #Conv1 (14*14*32) -> Conv2 (64 5*5*32) -> Conv2 (14*14*64) -> Maxpooling(2*2) -> Conv2 (7*7*64)\n", 140 | " \n", 141 | " #Conv2 (7*7*64) -> Fully Connected (1024 7*7*64) -> Output Layer (1024 * 10) -> Predict Class " 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 3, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "# Create some wrappers for simplicity\n", 153 | "#Note the strides are set to 1 in all dimensions.The first and last stride must always be 1,because the first is for the image-number and the last is for the input-channel.the last is for the input-channel.\n", 154 | "#For e.g. strides=[1, 2, 2, 1] would mean that the filter is moved 2 pixels across the x- and y-axis of the image.\n", 155 | "#The padding is set to 'SAME' which means the input image is padded with zeroes so the size of the output is the same.\n", 156 | "def conv2d(x, W, b, strides=1):\n", 157 | " # Conv2D wrapper, with bias and relu activation\n", 158 | " x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')\n", 159 | " x = tf.nn.bias_add(x, b)\n", 160 | " return tf.nn.relu(x) #apply relu to the image after doing the dot product with the filter and adding bias.\n", 161 | "\n", 162 | "#This is 2x2 max-pooling, which means that we consider 2x2 windows and select the largest value in each window. Then we move 2 pixels to the next window.\n", 163 | "def maxpool2d(x, k=2):\n", 164 | " # MaxPool2D wrapper\n", 165 | " return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],padding='SAME')\n", 166 | "\n", 167 | "\n", 168 | "# Create model\n", 169 | "def conv_net(x, weights, biases, dropout):\n", 170 | " # Reshape input picture\n", 171 | " #x will recieve a tensor of dimension (None, 784), 784 dimension after flattening the image. \n", 172 | " # 28,28 is the size of the image; the dimension will reduce. 1 is the number of channels in input image.\n", 173 | " # -1 squashes/flattens the 28*28 input image in to a 1*784 column vector.\n", 174 | " x = tf.reshape(x, shape=[-1, 28, 28, 1])\n", 175 | "\n", 176 | " # Convolution Layer\n", 177 | " # here we call the conv2d function we had defined above and pass the input image x, weights wc1 and bias bc1.\n", 178 | " conv1 = conv2d(x, weights['wc1'], biases['bc1'])\n", 179 | " # Max Pooling (down-sampling), this chooses the max value from a 2*2 matrix window and outputs a 14*14 matrix from a 28*28 matrix.\n", 180 | " conv1 = maxpool2d(conv1, k=2)\n", 181 | "\n", 182 | " # Convolution Layer\n", 183 | " # here we call the conv2d function we had defined above and pass the input image x, weights wc2 and bias bc2.\n", 184 | " conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])\n", 185 | " # Max Pooling (down-sampling), this chooses the max value from a 2*2 matrix window and outputs a 7*7 matrix from a 14*14 matrix.\n", 186 | " conv2 = maxpool2d(conv2, k=2)\n", 187 | "\n", 188 | " # Fully connected layer\n", 189 | " # Reshape conv2 output to fit fully connected layer input\n", 190 | " fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])\n", 191 | " fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])\n", 192 | " fc1 = tf.nn.relu(fc1)\n", 193 | " # Apply Dropout\n", 194 | " fc1 = tf.nn.dropout(fc1, dropout)\n", 195 | "\n", 196 | " # Output, class prediction\n", 197 | " # finally we multiply the fully connected layer with the weights and add a bias term, return the value and get a class prediction \n", 198 | " out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])\n", 199 | " return out" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 6, 205 | "metadata": { 206 | "collapsed": true 207 | }, 208 | "outputs": [], 209 | "source": [ 210 | "# Store layers weight & bias\n", 211 | "#We pass 32 5*5*1 filter through our input image which is wc1, then we pass another 64 5*5*32 filter after which we pass a 1024 7*7*64 fully connected layer and finally a output layer with 1024*10 dimensions. We use 10 because we have 0-9 10 different classes in our model.\n", 212 | "#Our input image has 1 channel since its a gray scale image and so our first filter has 5*5*1 dimensions, if it would have been a RGB color image then the filter dimension would have been 5*5*3.\n", 213 | "weights = {\n", 214 | " # 5x5 conv, 1 input, 32 outputs\n", 215 | " 'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),\n", 216 | " # 5x5 conv, 32 inputs, 64 outputs\n", 217 | " 'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),\n", 218 | " # fully connected, 7*7*64 inputs, 1024 outputs, since after max pooling on 28*28 we get 14*14 and then again pooling it to 7*7 we apply a fully connected layer with dimensions of 7*7*64.\n", 219 | " 'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),\n", 220 | " # 1024 inputs, 10 outputs (class prediction)\n", 221 | " 'out': tf.Variable(tf.random_normal([1024, n_classes]))\n", 222 | "}\n", 223 | "#similarly we have 2 bias for our filters, 1 for the fully connected layer and 1 for the output layer.\n", 224 | "biases = {\n", 225 | " 'bc1': tf.Variable(tf.random_normal([32])),\n", 226 | " 'bc2': tf.Variable(tf.random_normal([64])),\n", 227 | " 'bd1': tf.Variable(tf.random_normal([1024])),\n", 228 | " 'out': tf.Variable(tf.random_normal([n_classes]))\n", 229 | "}\n", 230 | "\n", 231 | "# Construct model and we call the conv_net function by passing in x, weights and biases and keep_probability.\n", 232 | "pred = conv_net(x, weights, biases, keep_prob)\n", 233 | "\n", 234 | "# Define loss and optimizer. We use softmax loss function which is known as cross entropy loss function.\n", 235 | "cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))\n", 236 | "#for optimization we use Adam optimizer, we can use Gradient Descent as well.\n", 237 | "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)\n", 238 | "\n", 239 | "\n", 240 | "# Evaluate model\n", 241 | "# Test model, here we check whether the index of the maximum value of the predicted image is equal to the actual labelled image and both will be a column vector.\n", 242 | "correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", 243 | "#calculate accuracy across the correct_prediction using reduce_mean. For eg: if we have 10 classes and out of which only 4 classes predicted result was true so we will get something like 4/10 as accuracy.\n", 244 | "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", 245 | "\n", 246 | "# Initializing the variables\n", 247 | "init = tf.global_variables_initializer()" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 7, 253 | "metadata": {}, 254 | "outputs": [ 255 | { 256 | "name": "stdout", 257 | "output_type": "stream", 258 | "text": [ 259 | "Iter 1280, Minibatch Loss= 31540.179688, Training Accuracy= 0.33594\n", 260 | "Iter 2560, Minibatch Loss= 10024.594727, Training Accuracy= 0.53906\n", 261 | "Iter 3840, Minibatch Loss= 7291.990234, Training Accuracy= 0.59375\n", 262 | "Iter 5120, Minibatch Loss= 5686.883789, Training Accuracy= 0.71875\n", 263 | "Iter 6400, Minibatch Loss= 6301.837891, Training Accuracy= 0.75000\n", 264 | "Iter 7680, Minibatch Loss= 2591.784668, Training Accuracy= 0.82812\n", 265 | "Iter 8960, Minibatch Loss= 3040.357910, Training Accuracy= 0.87500\n", 266 | "Iter 10240, Minibatch Loss= 2686.399170, Training Accuracy= 0.85156\n", 267 | "Iter 11520, Minibatch Loss= 2853.360840, Training Accuracy= 0.85156\n", 268 | "Iter 12800, Minibatch Loss= 2102.417236, Training Accuracy= 0.86719\n", 269 | "Iter 14080, Minibatch Loss= 2391.098633, Training Accuracy= 0.85938\n", 270 | "Iter 15360, Minibatch Loss= 1695.261963, Training Accuracy= 0.89844\n", 271 | "Iter 16640, Minibatch Loss= 1993.429565, Training Accuracy= 0.87500\n", 272 | "Iter 17920, Minibatch Loss= 1933.289307, Training Accuracy= 0.86719\n", 273 | "Iter 19200, Minibatch Loss= 2038.959229, Training Accuracy= 0.91406\n", 274 | "Iter 20480, Minibatch Loss= 2301.020264, Training Accuracy= 0.87500\n", 275 | "Iter 21760, Minibatch Loss= 1152.213135, Training Accuracy= 0.93750\n", 276 | "Iter 23040, Minibatch Loss= 1909.710815, Training Accuracy= 0.91406\n", 277 | "Iter 24320, Minibatch Loss= 3123.617920, Training Accuracy= 0.87500\n", 278 | "Iter 25600, Minibatch Loss= 1931.083496, Training Accuracy= 0.92188\n", 279 | "Iter 26880, Minibatch Loss= 1098.478271, Training Accuracy= 0.95312\n", 280 | "Iter 28160, Minibatch Loss= 1334.411011, Training Accuracy= 0.91406\n", 281 | "Iter 29440, Minibatch Loss= 1802.676880, Training Accuracy= 0.89844\n", 282 | "Iter 30720, Minibatch Loss= 656.918945, Training Accuracy= 0.92969\n", 283 | "Iter 32000, Minibatch Loss= 1127.556152, Training Accuracy= 0.92969\n", 284 | "Iter 33280, Minibatch Loss= 1085.382690, Training Accuracy= 0.91406\n", 285 | "Iter 34560, Minibatch Loss= 1083.996338, Training Accuracy= 0.92188\n", 286 | "Iter 35840, Minibatch Loss= 1406.930298, Training Accuracy= 0.93750\n", 287 | "Iter 37120, Minibatch Loss= 683.603760, Training Accuracy= 0.93750\n", 288 | "Iter 38400, Minibatch Loss= 1392.308960, Training Accuracy= 0.90625\n", 289 | "Iter 39680, Minibatch Loss= 1372.543091, Training Accuracy= 0.91406\n", 290 | "Iter 40960, Minibatch Loss= 535.370117, Training Accuracy= 0.94531\n", 291 | "Iter 42240, Minibatch Loss= 1408.181641, Training Accuracy= 0.91406\n", 292 | "Iter 43520, Minibatch Loss= 1092.865234, Training Accuracy= 0.95312\n", 293 | "Iter 44800, Minibatch Loss= 646.227417, Training Accuracy= 0.94531\n", 294 | "Iter 46080, Minibatch Loss= 1022.309998, Training Accuracy= 0.91406\n", 295 | "Iter 47360, Minibatch Loss= 736.623901, Training Accuracy= 0.94531\n", 296 | "Iter 48640, Minibatch Loss= 914.813232, Training Accuracy= 0.92969\n", 297 | "Iter 49920, Minibatch Loss= 836.482849, Training Accuracy= 0.93750\n", 298 | "Iter 51200, Minibatch Loss= 143.315353, Training Accuracy= 0.97656\n", 299 | "Iter 52480, Minibatch Loss= 359.074951, Training Accuracy= 0.94531\n", 300 | "Iter 53760, Minibatch Loss= 540.182495, Training Accuracy= 0.96094\n", 301 | "Iter 55040, Minibatch Loss= 184.435913, Training Accuracy= 0.98438\n", 302 | "Iter 56320, Minibatch Loss= 283.548706, Training Accuracy= 0.96875\n", 303 | "Iter 57600, Minibatch Loss= 784.775818, Training Accuracy= 0.92188\n", 304 | "Iter 58880, Minibatch Loss= 533.455139, Training Accuracy= 0.95312\n", 305 | "Iter 60160, Minibatch Loss= 1076.420898, Training Accuracy= 0.94531\n", 306 | "Iter 61440, Minibatch Loss= 419.556030, Training Accuracy= 0.94531\n", 307 | "Iter 62720, Minibatch Loss= 500.569641, Training Accuracy= 0.95312\n", 308 | "Iter 64000, Minibatch Loss= 533.521301, Training Accuracy= 0.93750\n", 309 | "Iter 65280, Minibatch Loss= 309.480591, Training Accuracy= 0.96094\n", 310 | "Iter 66560, Minibatch Loss= 441.446838, Training Accuracy= 0.93750\n", 311 | "Iter 67840, Minibatch Loss= 565.569824, Training Accuracy= 0.95312\n", 312 | "Iter 69120, Minibatch Loss= 319.299896, Training Accuracy= 0.96875\n", 313 | "Iter 70400, Minibatch Loss= 572.854370, Training Accuracy= 0.96094\n", 314 | "Iter 71680, Minibatch Loss= 368.369446, Training Accuracy= 0.96094\n", 315 | "Iter 72960, Minibatch Loss= 580.041260, Training Accuracy= 0.96875\n", 316 | "Iter 74240, Minibatch Loss= 487.809052, Training Accuracy= 0.96094\n", 317 | "Iter 75520, Minibatch Loss= 451.643250, Training Accuracy= 0.96094\n", 318 | "Iter 76800, Minibatch Loss= 50.068649, Training Accuracy= 0.98438\n", 319 | "Iter 78080, Minibatch Loss= 401.764160, Training Accuracy= 0.94531\n", 320 | "Iter 79360, Minibatch Loss= 0.000000, Training Accuracy= 1.00000\n", 321 | "Iter 80640, Minibatch Loss= 643.459961, Training Accuracy= 0.95312\n", 322 | "Iter 81920, Minibatch Loss= 700.643433, Training Accuracy= 0.95312\n", 323 | "Iter 83200, Minibatch Loss= 585.430847, Training Accuracy= 0.96094\n", 324 | "Iter 84480, Minibatch Loss= 816.522217, Training Accuracy= 0.96875\n", 325 | "Iter 85760, Minibatch Loss= 357.611572, Training Accuracy= 0.96094\n", 326 | "Iter 87040, Minibatch Loss= 324.462280, Training Accuracy= 0.96875\n", 327 | "Iter 88320, Minibatch Loss= 181.259247, Training Accuracy= 0.96094\n", 328 | "Iter 89600, Minibatch Loss= 486.246704, Training Accuracy= 0.94531\n", 329 | "Iter 90880, Minibatch Loss= 595.817017, Training Accuracy= 0.92969\n", 330 | "Iter 92160, Minibatch Loss= 503.650818, Training Accuracy= 0.94531\n", 331 | "Iter 93440, Minibatch Loss= 486.948395, Training Accuracy= 0.96875\n", 332 | "Iter 94720, Minibatch Loss= 648.636047, Training Accuracy= 0.96875\n", 333 | "Iter 96000, Minibatch Loss= 257.890717, Training Accuracy= 0.96875\n", 334 | "Iter 97280, Minibatch Loss= 613.068359, Training Accuracy= 0.95312\n", 335 | "Iter 98560, Minibatch Loss= 500.759766, Training Accuracy= 0.96094\n", 336 | "Iter 99840, Minibatch Loss= 318.451141, Training Accuracy= 0.93750\n", 337 | "Iter 101120, Minibatch Loss= 533.584473, Training Accuracy= 0.96094\n", 338 | "Iter 102400, Minibatch Loss= 163.934921, Training Accuracy= 0.97656\n", 339 | "Iter 103680, Minibatch Loss= 133.708313, Training Accuracy= 0.97656\n", 340 | "Iter 104960, Minibatch Loss= 291.945129, Training Accuracy= 0.95312\n", 341 | "Iter 106240, Minibatch Loss= 392.741577, Training Accuracy= 0.92188\n", 342 | "Iter 107520, Minibatch Loss= 573.417114, Training Accuracy= 0.97656\n", 343 | "Iter 108800, Minibatch Loss= 302.843567, Training Accuracy= 0.96094\n", 344 | "Iter 110080, Minibatch Loss= 184.546951, Training Accuracy= 0.97656\n", 345 | "Iter 111360, Minibatch Loss= 158.656128, Training Accuracy= 0.98438\n", 346 | "Iter 112640, Minibatch Loss= 440.818359, Training Accuracy= 0.92969\n", 347 | "Iter 113920, Minibatch Loss= 108.167740, Training Accuracy= 0.98438\n", 348 | "Iter 115200, Minibatch Loss= 247.794922, Training Accuracy= 0.96094\n", 349 | "Iter 116480, Minibatch Loss= 274.271271, Training Accuracy= 0.96094\n", 350 | "Iter 117760, Minibatch Loss= 164.571487, Training Accuracy= 0.96875\n", 351 | "Iter 119040, Minibatch Loss= 99.337303, Training Accuracy= 0.99219\n", 352 | "Iter 120320, Minibatch Loss= 162.401581, Training Accuracy= 0.95312\n", 353 | "Iter 121600, Minibatch Loss= 137.631790, Training Accuracy= 0.96875\n", 354 | "Iter 122880, Minibatch Loss= 311.191223, Training Accuracy= 0.95312\n", 355 | "Iter 124160, Minibatch Loss= 133.738205, Training Accuracy= 0.96875\n", 356 | "Iter 125440, Minibatch Loss= 364.166687, Training Accuracy= 0.95312\n", 357 | "Iter 126720, Minibatch Loss= 292.839966, Training Accuracy= 0.96094\n", 358 | "Iter 128000, Minibatch Loss= 132.429840, Training Accuracy= 0.96094\n", 359 | "Iter 129280, Minibatch Loss= 310.926392, Training Accuracy= 0.95312\n", 360 | "Iter 130560, Minibatch Loss= 307.123993, Training Accuracy= 0.97656\n", 361 | "Iter 131840, Minibatch Loss= 45.111160, Training Accuracy= 0.98438\n", 362 | "Iter 133120, Minibatch Loss= 227.258179, Training Accuracy= 0.97656\n", 363 | "Iter 134400, Minibatch Loss= 42.990753, Training Accuracy= 0.98438\n", 364 | "Iter 135680, Minibatch Loss= 281.738708, Training Accuracy= 0.96875\n", 365 | "Iter 136960, Minibatch Loss= 77.213531, Training Accuracy= 0.97656\n", 366 | "Iter 138240, Minibatch Loss= 247.707855, Training Accuracy= 0.97656\n", 367 | "Iter 139520, Minibatch Loss= 447.767548, Training Accuracy= 0.94531\n", 368 | "Iter 140800, Minibatch Loss= 79.416969, Training Accuracy= 0.96875\n", 369 | "Iter 142080, Minibatch Loss= 180.866104, Training Accuracy= 0.95312\n", 370 | "Iter 143360, Minibatch Loss= 188.863800, Training Accuracy= 0.98438\n", 371 | "Iter 144640, Minibatch Loss= 94.145889, Training Accuracy= 0.97656\n", 372 | "Iter 145920, Minibatch Loss= 119.133713, Training Accuracy= 0.98438\n", 373 | "Iter 147200, Minibatch Loss= 332.276947, Training Accuracy= 0.96094\n", 374 | "Iter 148480, Minibatch Loss= 124.882492, Training Accuracy= 0.96875\n", 375 | "Iter 149760, Minibatch Loss= 228.463150, Training Accuracy= 0.98438\n", 376 | "Iter 151040, Minibatch Loss= 547.978882, Training Accuracy= 0.93750\n", 377 | "Iter 152320, Minibatch Loss= 248.812286, Training Accuracy= 0.96094\n", 378 | "Iter 153600, Minibatch Loss= 129.168655, Training Accuracy= 0.96094\n", 379 | "Iter 154880, Minibatch Loss= 315.828125, Training Accuracy= 0.96875\n", 380 | "Iter 156160, Minibatch Loss= 257.262695, Training Accuracy= 0.97656\n" 381 | ] 382 | }, 383 | { 384 | "name": "stdout", 385 | "output_type": "stream", 386 | "text": [ 387 | "Iter 157440, Minibatch Loss= 123.597115, Training Accuracy= 0.97656\n", 388 | "Iter 158720, Minibatch Loss= 51.359531, Training Accuracy= 0.97656\n", 389 | "Iter 160000, Minibatch Loss= 42.420990, Training Accuracy= 0.99219\n", 390 | "Iter 161280, Minibatch Loss= 140.845337, Training Accuracy= 0.98438\n", 391 | "Iter 162560, Minibatch Loss= 307.216980, Training Accuracy= 0.96875\n", 392 | "Iter 163840, Minibatch Loss= 67.892838, Training Accuracy= 0.98438\n", 393 | "Iter 165120, Minibatch Loss= 28.960442, Training Accuracy= 0.99219\n", 394 | "Iter 166400, Minibatch Loss= 130.503799, Training Accuracy= 0.96094\n", 395 | "Iter 167680, Minibatch Loss= 6.974297, Training Accuracy= 0.99219\n", 396 | "Iter 168960, Minibatch Loss= 123.338348, Training Accuracy= 0.96875\n", 397 | "Iter 170240, Minibatch Loss= 116.928535, Training Accuracy= 0.98438\n", 398 | "Iter 171520, Minibatch Loss= 517.482605, Training Accuracy= 0.96094\n", 399 | "Iter 172800, Minibatch Loss= 332.341858, Training Accuracy= 0.99219\n", 400 | "Iter 174080, Minibatch Loss= 203.065445, Training Accuracy= 0.95312\n", 401 | "Iter 175360, Minibatch Loss= 162.362946, Training Accuracy= 0.97656\n", 402 | "Iter 176640, Minibatch Loss= 361.192261, Training Accuracy= 0.96875\n", 403 | "Iter 177920, Minibatch Loss= 96.489235, Training Accuracy= 0.96875\n", 404 | "Iter 179200, Minibatch Loss= 142.502197, Training Accuracy= 0.97656\n", 405 | "Iter 180480, Minibatch Loss= 7.850983, Training Accuracy= 0.99219\n", 406 | "Iter 181760, Minibatch Loss= 157.779831, Training Accuracy= 0.98438\n", 407 | "Iter 183040, Minibatch Loss= 431.841034, Training Accuracy= 0.94531\n", 408 | "Iter 184320, Minibatch Loss= 70.724617, Training Accuracy= 0.99219\n", 409 | "Iter 185600, Minibatch Loss= 27.284670, Training Accuracy= 0.98438\n", 410 | "Iter 186880, Minibatch Loss= 33.038658, Training Accuracy= 0.99219\n", 411 | "Iter 188160, Minibatch Loss= 225.488297, Training Accuracy= 0.96875\n", 412 | "Iter 189440, Minibatch Loss= 266.069397, Training Accuracy= 0.95312\n", 413 | "Iter 190720, Minibatch Loss= 6.994904, Training Accuracy= 0.99219\n", 414 | "Iter 192000, Minibatch Loss= 163.728180, Training Accuracy= 0.97656\n", 415 | "Iter 193280, Minibatch Loss= 197.818680, Training Accuracy= 0.96875\n", 416 | "Iter 194560, Minibatch Loss= 205.734833, Training Accuracy= 0.96875\n", 417 | "Iter 195840, Minibatch Loss= 168.608612, Training Accuracy= 0.97656\n", 418 | "Iter 197120, Minibatch Loss= 35.664322, Training Accuracy= 0.97656\n", 419 | "Iter 198400, Minibatch Loss= 168.571609, Training Accuracy= 0.96094\n", 420 | "Iter 199680, Minibatch Loss= 32.822113, Training Accuracy= 0.99219\n", 421 | "Optimization Finished!\n", 422 | "('Testing Accuracy:', 0.97600001)\n" 423 | ] 424 | } 425 | ], 426 | "source": [ 427 | "# Launch the graph. #this is a class that runs all the tensorflow operations and launches the graph in a session. All the operations have to be within the indentation. \n", 428 | "with tf.Session() as sess:\n", 429 | " sess.run(init) #sess.run(init), runs the variables that were initialised in the previous step and evaluates the tensor \n", 430 | "\n", 431 | "#instead of using for loop we use while loop and intialize step = 1 and at every time step we increment step = step + 1.\n", 432 | "#since our batch size is 128 and display step is 10 so we display our output for only those Iterations where the Step after dividing by the display_Step leaves a remainder zero.\n", 433 | "#we then input the images in batch_x and their respective labels in batch_y and run an optimizer by feeding in x, y, and dropout. Here are placeholders x,y,and keep_prob gets their value.\n", 434 | "#after that we display the Iteration number, the Minibatch loss and the training accuracy by calling the cost and the accuracy function.\n", 435 | " step = 1\n", 436 | " # Keep training until reach max iterations\n", 437 | " while step * batch_size < training_iters:\n", 438 | " batch_x, batch_y = mnist.train.next_batch(batch_size)\n", 439 | " # Run optimization op (backprop), we use keep_prob to drop some part of the network and as dropout is 0.75, so it will keep 75% of the network and drop the 25%, which helps in reducing the computational complexity and vanishing gradient problem while backpropogating through the network.\n", 440 | " sess.run(optimizer, feed_dict={x: batch_x, y: batch_y,\n", 441 | " keep_prob: dropout})\n", 442 | " if step % display_step == 0:\n", 443 | " # Calculate batch loss and accuracy\n", 444 | " loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x,\n", 445 | " y: batch_y,\n", 446 | " keep_prob: 1.})\n", 447 | " print(\"Iter \" + str(step*batch_size) + \", Minibatch Loss= \" + \\\n", 448 | " \"{:.6f}\".format(loss) + \", Training Accuracy= \" + \\\n", 449 | " \"{:.5f}\".format(acc))\n", 450 | " step += 1\n", 451 | " print(\"Optimization Finished!\")\n", 452 | "\n", 453 | " # Calculate accuracy for 250 mnist test images\n", 454 | " print(\"Testing Accuracy:\", sess.run(accuracy, feed_dict={x: mnist.test.images[:250],y : mnist.test.labels[:250],keep_prob: 1.})) " 455 | ] 456 | }, 457 | { 458 | "cell_type": "code", 459 | "execution_count": null, 460 | "metadata": { 461 | "collapsed": true 462 | }, 463 | "outputs": [], 464 | "source": [] 465 | } 466 | ], 467 | "metadata": { 468 | "kernelspec": { 469 | "display_name": "Python 2", 470 | "language": "python", 471 | "name": "python2" 472 | }, 473 | "language_info": { 474 | "codemirror_mode": { 475 | "name": "ipython", 476 | "version": 2 477 | }, 478 | "file_extension": ".py", 479 | "mimetype": "text/x-python", 480 | "name": "python", 481 | "nbconvert_exporter": "python", 482 | "pygments_lexer": "ipython2", 483 | "version": "2.7.12" 484 | } 485 | }, 486 | "nbformat": 4, 487 | "nbformat_minor": 2 488 | } 489 | -------------------------------------------------------------------------------- /Tensorflow Examples/Logistic Regression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np #imports numpy as np. Numpy is used for basic matrix multiplication, addition, subtraction etc.\n", 12 | "import tensorflow as tf #imports tensorflow as tf. Tensorflow is an n-dimensional matrix, just like a 1-D vector, 2-D array, 3-D array etc.\n", 13 | "from matplotlib import pyplot as plt\n", 14 | "%matplotlib inline" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Extracting MNIST/data/train-images-idx3-ubyte.gz\n", 27 | "Extracting MNIST/data/train-labels-idx1-ubyte.gz\n", 28 | "Extracting MNIST/data/t10k-images-idx3-ubyte.gz\n", 29 | "Extracting MNIST/data/t10k-labels-idx1-ubyte.gz\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "from tensorflow.examples.tutorials.mnist import input_data #imports mnist input data from tensorflow examples. \n", 35 | "#Mnist data set consists of images of numbers from 0-9, each image is a 28*28 dimensional. There are total 60k training images and 10k test images.\n", 36 | "mnist = input_data.read_data_sets(\"MNIST/data\", one_hot = True) #using input data call read data sets from a folder MNIST/data and store in mnist.\n", 37 | "#one hot vector is used which means at once only one class will be true. Since our images have labels 0-9 that means out of all 10 classes only 1 class will be true at a time rest all will be zero." 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 3, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "data": { 47 | "image/png": "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\n", 48 | "text/plain": [ 49 | "" 50 | ] 51 | }, 52 | "metadata": {}, 53 | "output_type": "display_data" 54 | }, 55 | { 56 | "data": { 57 | "image/png": "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\n", 58 | "text/plain": [ 59 | "" 60 | ] 61 | }, 62 | "metadata": {}, 63 | "output_type": "display_data" 64 | }, 65 | { 66 | "data": { 67 | "image/png": "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\n", 68 | "text/plain": [ 69 | "" 70 | ] 71 | }, 72 | "metadata": {}, 73 | "output_type": "display_data" 74 | }, 75 | { 76 | "data": { 77 | "image/png": "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\n", 78 | "text/plain": [ 79 | "" 80 | ] 81 | }, 82 | "metadata": {}, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "nsample = 4\n", 88 | "rand_idx = np.random.randint(mnist.train.images.shape[0], size=nsample)\n", 89 | "\n", 90 | "for i in rand_idx:\n", 91 | " curr_img = np.reshape(mnist.train.images[i, :], (28,28))\n", 92 | " curr_lbl = np.argmax(mnist.train.labels[i, :])\n", 93 | " plt.matshow(curr_img, cmap=plt.get_cmap('gray'))\n", 94 | " plt.title(\"\"+str(i)+\"th training image \"\n", 95 | " + \"(label: \" + str(curr_lbl) + \")\")\n", 96 | " plt.show()" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 30, 102 | "metadata": { 103 | "collapsed": true 104 | }, 105 | "outputs": [], 106 | "source": [ 107 | "#hyperparameters\n", 108 | "learning_rate = 0.01 #learning rate is used to reduce our cost/loss/cross entropy and helps in converging or reaching the local optima. The learning rate should neither be too high or too low it should be a balanced rate. \n", 109 | "training_epochs = 25 #number of times we train our network, its like a loop which trains our network, calculates cost, optimizes it in every epoch, also in every epoch we take \n", 110 | "display_step = 1 #after how many epochs we want to output our desired results on screen\n", 111 | "batch_size = 100 #this means that our training images will be divided in a fixed batch size and at every batch it will take a fixed number of images and train them. " 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 31, 117 | "metadata": { 118 | "collapsed": true 119 | }, 120 | "outputs": [], 121 | "source": [ 122 | "#placeholder is like a variable to which we will assign data later on. It will allow us to do operations and build our computation graph without feeding in data.\n", 123 | "#x will hold the training images in form of matrix,the dimensions of x will be in our case None*784, that is why we use None which allows us to vary the dimensionality of our rows.\n", 124 | "#we use float to define its type.\n", 125 | "x = tf.placeholder(\"float\",[None,784]) \n", 126 | "#similarly y will hold the label of the training images in form matrix which will be a None*10 matrix. None will be replaced by the number of images we want to train on.\n", 127 | "y = tf.placeholder(\"float\",[None,10])\n", 128 | "\n", 129 | "#hyperparameters\n", 130 | "W = tf.Variable(tf.zeros([784,10])) #we use variable instead of placeholder because a variable maintains state in the graph across calls to run(), we initially define Weights as all zeros which are then randomly changed in every epoch. The dimensions of W have to be in alignment with the dimensions of x as we have to multiply them in later stages.\n", 131 | "b = tf.Variable(tf.zeros([10])) #we use a 10-D column vector which we then add with the result we get from x * W.\n", 132 | "\n", 133 | "#here we do the prediction by using softmax classifier, we can also use ReLu, Sigmoid, Tan etc. We get a value between 0 and 1 which we then try to predict is for which particular class.\n", 134 | "pred = tf.nn.softmax(tf.matmul(x, W) + b)\n", 135 | "\n", 136 | "#here we calculate the loss, how far our predicted value is from the actual output class label, which we then try to minimize.\n", 137 | "cost = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred), reduction_indices = 1))\n", 138 | "\n", 139 | "#here we do the optimization where we try to minimize our cost function, by running GradientDescentOptimizer(backpropogate through the network) and use a learning rate which helps in achieving local optima.\n", 140 | "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) " 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 32, 146 | "metadata": { 147 | "collapsed": true 148 | }, 149 | "outputs": [], 150 | "source": [ 151 | "#here we initialise all the variables in our model.\n", 152 | "init = tf.global_variables_initializer()" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 33, 158 | "metadata": {}, 159 | "outputs": [ 160 | { 161 | "name": "stdout", 162 | "output_type": "stream", 163 | "text": [ 164 | "Epoch: 0001 cost= 1.184184278\n", 165 | "Epoch: 0002 cost= 0.665409036\n", 166 | "Epoch: 0003 cost= 0.552806490\n", 167 | "Epoch: 0004 cost= 0.498703455\n", 168 | "Epoch: 0005 cost= 0.465472227\n", 169 | "Epoch: 0006 cost= 0.442540389\n", 170 | "Epoch: 0007 cost= 0.425520185\n", 171 | "Epoch: 0008 cost= 0.412190600\n", 172 | "Epoch: 0009 cost= 0.401376767\n", 173 | "Epoch: 0010 cost= 0.392374381\n", 174 | "Epoch: 0011 cost= 0.384781689\n", 175 | "Epoch: 0012 cost= 0.378152853\n", 176 | "Epoch: 0013 cost= 0.372400416\n", 177 | "Epoch: 0014 cost= 0.367281650\n", 178 | "Epoch: 0015 cost= 0.362726723\n", 179 | "Epoch: 0016 cost= 0.358613340\n", 180 | "Epoch: 0017 cost= 0.354812526\n", 181 | "Epoch: 0018 cost= 0.351458141\n", 182 | "Epoch: 0019 cost= 0.348335585\n", 183 | "Epoch: 0020 cost= 0.345452889\n", 184 | "Epoch: 0021 cost= 0.342713490\n", 185 | "Epoch: 0022 cost= 0.340214653\n", 186 | "Epoch: 0023 cost= 0.337925483\n", 187 | "Epoch: 0024 cost= 0.335768323\n", 188 | "Epoch: 0025 cost= 0.333716870\n", 189 | "Optimization Finished!\n", 190 | "Accuracy: 0.888667\n" 191 | ] 192 | } 193 | ], 194 | "source": [ 195 | "# Launch the graph. #this is a class that runs all the tensorflow operations and launches the graph in a session. All the operations have to be within the indentation. \n", 196 | "with tf.Session() as sess:\n", 197 | " sess.run(init) ##sess.run(init), runs the variables that were initialised in the previous step and evaluates the tensor \n", 198 | "\n", 199 | " # Training cycle\n", 200 | " #we use for loop, to loop around all the 25 training_epochs.\n", 201 | "\n", 202 | " for epoch in range(training_epochs):\n", 203 | " avg_cost = 0. #initialize avg_cost to zero.\n", 204 | " total_batch = int(mnist.train.num_examples/batch_size) #here we input our batch size and we store the output in total_batch. For eg: we have used 100 as batch size so our total_batch will be 550. You can try printing the value to see how it varies based on the batch size.\n", 205 | " \n", 206 | " for i in range(total_batch): #now we iterate over each total_batch starting from 0-549\n", 207 | " batch_xs, batch_ys = mnist.train.next_batch(batch_size) #at each i we load 100 images and there labels in batch_xs and batch_ys, which are nothing but a matrix representation of images.\n", 208 | " \n", 209 | " # Fit training using batch data, think it as optimizer and cost being a root node and x and y their child or parent node.\n", 210 | " _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs, \n", 211 | " y: batch_ys})\n", 212 | " # Compute average loss \n", 213 | " avg_cost += c / total_batch #we calculate cost for 100 images once at a time and every time we get next 100 images and this keeps on going for 550 times.\n", 214 | " \n", 215 | " # Display logs per epoch step\n", 216 | " if (epoch+1) % display_step == 0:\n", 217 | " print \"Epoch:\", '%04d'%(epoch+1), \"cost=\", \"{:.9f}\".format(avg_cost)\n", 218 | "\n", 219 | " print \"Optimization Finished!\" \n", 220 | "\n", 221 | " # Test model, here we check whether the index of the maximum value of the predicted image is equal to the actual labelled image and both will be a column vector.\n", 222 | " correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", 223 | " #calculate accuracy across the correct_prediction using reduce_mean. For eg: if we have 10 classes and out of which only 4 classes predicted result was true so we will get something like 4/10 as accuracy.\n", 224 | " accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", 225 | " # Calculate accuracy for 3000 examples\n", 226 | " print \"Accuracy:\", accuracy.eval({x: mnist.test.images[:3000], y: mnist.test.labels[:3000]})" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": null, 232 | "metadata": { 233 | "collapsed": true 234 | }, 235 | "outputs": [], 236 | "source": [] 237 | } 238 | ], 239 | "metadata": { 240 | "kernelspec": { 241 | "display_name": "Python 2", 242 | "language": "python", 243 | "name": "python2" 244 | }, 245 | "language_info": { 246 | "codemirror_mode": { 247 | "name": "ipython", 248 | "version": 2 249 | }, 250 | "file_extension": ".py", 251 | "mimetype": "text/x-python", 252 | "name": "python", 253 | "nbconvert_exporter": "python", 254 | "pygments_lexer": "ipython2", 255 | "version": "2.7.12" 256 | } 257 | }, 258 | "nbformat": 4, 259 | "nbformat_minor": 2 260 | } 261 | -------------------------------------------------------------------------------- /Tensorflow Examples/Multilayer Perceptron using MNIST data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Extracting MNIST/data/train-images-idx3-ubyte.gz\n", 13 | "Extracting MNIST/data/train-labels-idx1-ubyte.gz\n", 14 | "Extracting MNIST/data/t10k-images-idx3-ubyte.gz\n", 15 | "Extracting MNIST/data/t10k-labels-idx1-ubyte.gz\n" 16 | ] 17 | } 18 | ], 19 | "source": [ 20 | "import tensorflow as tf #imports tensorflow as tf. Tensorflow is an n-dimensional matrix, just like a 1-D vector, 2-D array, 3-D array etc.\n", 21 | "import numpy as np #imports numpy as np. Numpy is used for basic matrix multiplication, addition, subtraction etc.\n", 22 | "from tensorflow.examples.tutorials.mnist import input_data #imports mnist input data from tensorflow examples. \n", 23 | "#Mnist data set consists of images of numbers from 0-9, each image is a 28*28 dimensional. There are total 60k training images and 10k test images.\n", 24 | "mnist = input_data.read_data_sets(\"MNIST/data\", one_hot = True) #using input data call read data sets from a folder MNIST/data and store in mnist.\n", 25 | "#one hot vector is used which means at once only one class will be true. Since our images have labels 0-9 that means out of all 10 classes only 1 class will be true at a time rest all will be zero.\n", 26 | "from matplotlib import pyplot as plt\n", 27 | "%matplotlib inline" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 5, 33 | "metadata": { 34 | "collapsed": true 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "#hyperparameters\n", 39 | "learning_rate = 0.01 #learning rate is used to reduce our cost/loss/cross entropy and helps in converging or reaching the local optima. The learning rate should neither be too high or too low it should be a balanced rate. \n", 40 | "training_epochs = 40 #number of times we train our network, its like a loop which trains our network, calculates cost, optimizes it in every epoch, also in every epoch we take \n", 41 | "display_step = 1 #after how many epochs we want to output our desired results on screen\n", 42 | "batch_size = 100 #this means that our training images will be divided in a fixed batch size and at every batch it will take a fixed number of images and train them. \n", 43 | "\n", 44 | "# Network Parameters\n", 45 | "n_hidden_1 = 256 # 1st layer number of features\n", 46 | "n_hidden_2 = 256 # 2nd layer number of features\n", 47 | "n_input = 784 # MNIST data input (img shape: 28*28)\n", 48 | "n_classes = 10 # MNIST total classes (0-9 digits)\n", 49 | "\n", 50 | "# tf Graph input\n", 51 | "#placeholder is like a variable to which we will assign data later on. It will allow us to do operations and build our computation graph without feeding in data.\n", 52 | "#x will hold the training images in form of matrix,the dimensions of x will be in our case None*784, that is why we use None which allows us to vary the dimensionality of our rows.\n", 53 | "#we use float to define its type.\n", 54 | "x = tf.placeholder(\"float\", [None, n_input])\n", 55 | "#similarly y will hold the label of the training images in form matrix which will be a None*10 matrix. None will be replaced by the number of images we want to train on.\n", 56 | "y = tf.placeholder(\"float\", [None, n_classes])" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 6, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQQAAAEMCAYAAAAiW8hnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFj1JREFUeJzt3XmUXHWZxvHvA8giIGENIQQCGkZWA0aGOUSJwmgCIqBH\nDoxRhlGDCwIjgojMgIwIcmQxCJEwYJgRUVQUUFCQIWyyOwEDCRAhCCEkRJYEyaDQ7/zxu/2z0nTd\n6q6lb4U8n3P6dFW9t+q+dav6qd9d+pYiAjMzgNWqbsDMuocDwcwyB4KZZQ4EM8scCGaWORDMLHMg\ntIGk0ZJC0hpDOM+PSbq+3dM20ceDkiZ04rHbSdKmkuZKWqe4PlPSpwZ43/mS9mlyvk3ft5/HulvS\nju14rHq6OhAkfV/SQklLJT1S+wJKWlPST4oFHn3flEq+KelPxc83Jammvr+k2ZJekvRbSTv0uf+2\nkn4haZmkJZLOrKm19CJLmiHp683eHyAiLouI97d72ib62DEiZnbisdvsBGBGRCyvupF6JK0l6buS\nFkl6TtI1kkbWTPIt4NRO9tDVgQCcDoyOiLcAHwK+LumdNfXbgMnAM/3cdwpwIPAOYBdgf+AIAElj\ngMuAzwDDgGuAq3s/4SWtCdwA/A+wObAl8P12P7l6hnKksSqQtBZwGEP4GjbpaOAfSO/XLYDngfNq\n6lcD75W0ecc6iIiV4gf4O2AhcHA/taeACX1u+y0wpeb6J4E7i8tHAr+sqa0GLAf2Lq5PAW6t08d/\nAz3F9C8BxwOjgSC96f4ILAG+Wuf+U4C/An8p7n9Ncft84MvAA8ArwBqkT7U/AMuAh4CDah7nn4Hb\naq4HKeAeBV4AzgfUxLSrA2cVz+HxYlkFsEad5zMf2Ke4fArwY9If3jLg98B2wFeAxcCTwPtr7ns4\nMKeY9jHgiD6PfXzxmj8NfKro421FbS3SJ+YfgUXAd4F16vT4HmBen9tmAp8qLr+VFP5/Kp73ZcCw\nPs/xK8Vr8DzwPWDtmvoHgVnFsvwtsEt/y2cA7/FpwJk11/cDHu4zzQ3AYZ36O+v2EQKSLpD0MjCX\n9Oa4doB33RG4v+b6/cVt+aH7XBawU3F9D2C+pOuK1YWZknYGiIiPk96E+0fEehFxZs3jjCcF197A\nv0vavm9TETGd9IY7s7j//jXlQ0lvgmER8SopDN4NbAB8Dfi+pBElz/mDwLtInzAHAx9oYtpPA5OA\nscBupFHWYOxPCs0Ngf8Ffk0K3JGk4e6FNdMuLvp4CykczpG0G4CkicAXgX2AtwET+sznDFLYjC3q\nI4F/r9PTzsDDJT2LNBrdAtgeGEUKt1ofIy2jtxbzPanoc1fgEtLoc+Pi+V1djEpWnIk0XtILJX1c\nDOwpaQtJby7meV2faeaQRr0d0fWBEBGfA9Yn/WFcSfr0HIj1gBdrrr8IrFdsR/gNsJekCcXqwYnA\nmsCbi2m3BA4BppLeJL8EriqmLfO1iFgeEfeTAmiwL9zUiHgyivXciPhxRDwdET0R8SPSJ/ruJfc/\nIyJeiIg/AjeR/lgGO+3BwLcj4qmIeJ70hzcYt0bEr4tA+zGwaTGvvwI/BEZLGlY8v19GxB8iuRm4\nnvQ69/bxvYh4MCJepuYPtHgNpwD/GhHPRcQy4Buk16w/w0ijkH5FxLyIuCEiXomIZ4Gzgb36TPad\n4rV5DjiNFN4UfVwYEXdFxGsRcSnpPbpHP/O5LSKG1euD9Po+CSwAlpLCqe82g2XF8+mIrg8EgGJB\n30b6Q/3sAO/2EumTp9dbgJeKN99c0vD+O6RRxyak4eBTxbTLSUPs6yLiL6Sh6cakF6hM7baMl0mh\nNBhP1l6R9AlJsyS9UHyy7FT02o7515t2iz59rNDTACyqubwcWBIRr9Vcp3dekiZJurPYgPYCsC9/\ne35lfWxKCu/7apbNr4rb+/M86UOlX5KGS/qhpAWSlpJWefou59r5P1H0B7A1cGxvH0Uvo2rqg3E+\naVVoY2Bd0gdg3xHC+qRVk45YKQKhxhqkIdtAPMiKn9DvKG4DICJ+EhE7RcTGwMmk7QD3FOUHSOur\n9bT6L6L17p9vl7Q1cBFpHX7j4pNlNiuu6nTCQlLw9hrViZkUQ+qfksJ2ePH8ruVvz6+sjyWkcNkx\nIoYVPxtERL0AfIA0zK/nG6Rlv3OkDdiTef1yrp3/VqTtGpCC4rSaPoZFxJsj4vKS+dUzlrQn5LmI\neIW0QXF3SbXhtD0rrgq3VdcGgqTNJB0iaT1Jq0v6AGmYdmPNNGtJWru4uqaktWt2Lf4X8EVJIyVt\nARwLzKi57zuLx90UmA5cXYwcIH1C7CFpH0mrA8eQ3oRzivoiYNsWnt5A7r8u6U36bNHv4fxtG0cn\nXQEcXSy3YaQNnZ2wJunT8FngVUmTgNpdo1cAh0vavlif/rfeQkT0kMLyHEmbART91ttmcjcwrM8u\nvFrrk0aULxbTHNfPNJ+XtKWkjYCvAj8qbr8I+Iykvy92da8raT9JdUckJe4BPiFpA0lvAj4HPB0R\nS4rnuDbwTtKGxY7o2kAg/TF8ljSMf570SXJMRFxdM83DpE+KkaSNV8tJQzhIG3euIW3pnk3aDlC7\nQevbpKHXw8XjfzrPOOJh0qfEd4vaAcCHitUHSBugTiqGiF9q4rldDOxQ3P/n/T75iIdIW/vvIAXI\nzsDtTcxrsC4ircs/QNooeC3wKvBa2Z0Gq1jvP4r0h/888E+k3Wq99etI23BuAuYBdxal3m1IX+69\nvRjm/4a0Qbe/ef2F9GEwuU47XyNtQH2R9D65sp9pfkBaLo+RNvZ+vXjse0nvne8Uz2Meaa/O60h6\nt6SX6vQA8CXg/0jbEp4lrUIdVFPfH5gZEU/3c9/26NTui7IfYCLpD3EecEIVPTTobz4pSGYB93ZB\nP5eQtsjPrrltI9InxaPF7w07NO9JwBNN9HcKaePYrOJn3xb72J4USv3u/mxw31GkY1ZeIW0rOnoo\nl+EA+7up6O3Bmv76LsO5wE4d7aWCJ786KWG3JQ0b7wd2qOKFKOlxPrBJ1X3U9PMe0idY7R/cmb1h\nSjpe4Zttmtc6pE+mNUgjrzuBc5vo7xTgSy32chBptWJD0ujh500+zghgt+Ly+sAjwA6dWoZt7K/l\nZTjYnypWGXYnHSTyWKSh3A9JQ3KrIyJuAZ7rc/MBwKXF5UsZ/PEC9Yg0hH6etMowh/r798v6a4cj\nSCOPP5BGBwPdw7SCiFgYEb8rLi8jPaeRdG4Ztqu/IVdFIIxkxV04T1HRky8RwPWS7pM0pepm6hge\nEQuLy88Aw9vxoBHxckS8KyLWj4jNIuLwiFja5MMdKekBSZdI2rCJXiZG2nuwUUQcVPN8myZpNLAr\ncBcdWoat6NMftLgMB6ubNypWaXxE7EZaf/68pPdU3VCZSGPNbjtb7jTSLuKxpF2IZ1XbDkhaj7Sr\n85i+IdcNy7Cf/oZ8GVYRCAtYcZ/ulsVtXSMiFhS/FwM/o/zowKos6j2Mufi9uOJ+VhARiyIdUNa7\ni7DSZVjsxvspcFlE9O5F6Jpl2F9/VSzDKgLhHmCMpG2KQ4EPoWZ3U9WK/cjr914m7RufXW1X/bqa\ndLQlxe+rKuzldfr8z8VBVLgMi2NTLgbmRMTZNaWuWIb1+qtiGfb+h9uQkrQvcC5pj8MlEXHakDdR\nh6RtSaMCSFvaf1B1f5IuJ/1zzyakYxJOBn5O2oe/FelQ2oMjHWffLf1NIA11g7TX5oh2bANosr/x\nwK2kXck9xc0nktbTK1+GJf0dyhAvw0oCwcy6kzcqmlnmQDCzzIFgZpkDwcwyB4KZZZUGQhcfFgy4\nv1Z1c3/d3BtU11/VI4SuflFwf63q5v66uTeoqL+qA8HMukhLByYVp8r+NumIw/+MiNIz9EryUVBm\nFYmIhufjbDoQinMNPgL8I+lfmO8BDo106q9693EgmFVkIIHQyiqDT3Ri9gbTSiCsDCc6MbNB6PiX\niha7T7p9i66Z0VogDOhEJ5G+y3A6eBuCWbdrZZWhq090YmaD1/QIISJelXQk6QtSek908mCDu5lZ\nFxvSE6R4lcGsOp3e7WhmbzAOBDPLHAhmljkQzCxzIJhZ5kAws8yBYGaZA8HMMgeCmWUOBDPLHAhm\nljkQzCxzIJhZ5kAws8yBYGaZA8HMMgeCmWUOBDPLHAhmljkQzCxzIJhZ5kAws8yBYGaZA8HMMgeC\nmWUOBDPLHAhmljkQzCxzIJhZ5kAws2yNqhsw67XddtuV1vfbb7+Ozv/ss88urff09JTWn3jiidL6\nxIkTS+uPPPJIaX0otBQIkuYDy4DXgFcjYlw7mjKzarRjhPDeiFjShscxs4p5G4KZZa0GQgDXS7pP\n0pR2NGRm1Wl1lWF8RCyQtBlwg6S5EXFL7QRFUDgszFYCLY0QImJB8Xsx8DNg936mmR4R47zB0az7\nNR0IktaVtH7vZeD9wOx2NWZmQ6+VVYbhwM8k9T7ODyLiV23pyiqx8cYbl9bf9773tfT4Z511Vml9\n7bXXLq1vtNFGLc2/kUbHGUREaX2rrbYqre+yyy6l9ZX6OISIeAx4Rxt7MbOKebejmWUOBDPLHAhm\nljkQzCxzIJhZ5kAws8znQ1iFHH744aX1Y445prS+4447tjT/4piVuhrt57fO8wjBzDIHgpllDgQz\nyxwIZpY5EMwscyCYWeZAMLPMxyGsRIYNG1Zanz59eml90qRJpfV11lln0D210wsvvFBab/T8q3b3\n3XeX1u+8884h6qR5HiGYWeZAMLPMgWBmmQPBzDIHgpllDgQzyxwIZpb5OISVyEknnVRa/8hHPlJa\nr/p8A8cee2xp/cUXXyytX3TRRe1sZ9BmzZpVWm+0/BcuXNjOdjrCIwQzyxwIZpY5EMwscyCYWeZA\nMLPMgWBmmQPBzDIfh7ASafS9BqutVp7vc+fOLa1PmzattD516tTSeqvOO++80nqj59+qc889t7R+\n6qmnltYbHUexMmg4QpB0iaTFkmbX3LaRpBskPVr83rCzbZrZUBjIKsMMYGKf204AboyIMcCNxXUz\nW8k1DISIuAV4rs/NBwCXFpcvBQ5sc19mVoFmNyoOj4jeA7OfAYa3qR8zq1DLGxUjIiTV/a8ZSVOA\nKa3Ox8w6r9kRwiJJIwCK34vrTRgR0yNiXESMa3JeZjZEmg2Eq4HDisuHAVe1px0zq1LDVQZJlwMT\ngE0kPQWcDJwBXCHpk8ATwMGdbNKS+++/v7Te09NTWl+yZElp/bLLLht0T4MxduzY0vrWW29dWm90\nPoc77rijtH7BBReU1i+//PLS+qqgYSBExKF1Snu3uRczq5gPXTazzIFgZpkDwcwyB4KZZQ4EM8sc\nCGaWaSjP1V92iPOqYKeddiqt77nnnqX1Rsch3H777aX1Rq91o/k3uv8555xTWh89enRpfenSpaX1\nzTffvLT+4Q9/uLR+0003ldbf6CKi4QklPEIws8yBYGaZA8HMMgeCmWUOBDPLHAhmljkQzCzzcQhD\naNKkSaX1a665pqXHb/S9BY1e60b76ceMGVNa33LLLUvrjfr785//XFo/6qijSuszZswora/qfByC\nmQ2KA8HMMgeCmWUOBDPLHAhmljkQzCxzIJhZ5uMQ2qjR9w40Os5gxIgRLc2/1eMQOq1Rf5MnTy6t\n+3sTWuPjEMxsUBwIZpY5EMwscyCYWeZAMLPMgWBmmQPBzLKGXwdv7bPaauX522g/fauP39PT09Lj\nt2r11VevdP7WWMMRgqRLJC2WNLvmtlMkLZA0q/jZt7NtmtlQGMgqwwxgYj+3nxMRY4ufa9vblplV\noWEgRMQtwHND0IuZVayVjYpHSnqgWKXYsG0dmVllmg2EacBbgbHAQuCsehNKmiLpXkn3NjkvMxsi\nTQVCRCyKiNcioge4CNi9ZNrpETEuIsY126SZDY2mAkFS7f/pHgTMrjetma08Gp4PQdLlwARgE2AR\ncHJxfSwQwHzgiIhY2HBmb/DzITSy6aabltY32GCD0vqFF15YWp8wYUJpverzITQ6n8GUKVNK68uX\nL29nO6ucgZwPoeGBSRFxaD83X9xUR2bW1XzospllDgQzyxwIZpY5EMwscyCYWeZAMLPM38vQRcaP\nH19anzlzZml9Zf9ehiOPPLK0Pm3atHa2s8rx9zKY2aA4EMwscyCYWeZAMLPMgWBmmQPBzDIHgpll\n/l6GIbTWWmuV1o8//viOzv/ll18urZ988skt3f/8888fdE+1RowYUVpvtPxeeeWVluZvHiGYWQ0H\ngpllDgQzyxwIZpY5EMwscyCYWeZAMLPM50MYQqeffnpp/bjjjmvp8Rudb2Dy5Mml9UbfmzBq1KjS\n+uOPP15ab/V8DXvuuWdp/a677iqtr+p8PgQzGxQHgpllDgQzyxwIZpY5EMwscyCYWeZAMLPM50MY\nQnvttVdpvdF++kbOPffc0nqj4wxa1aj/1VYr//zp6elp6fGtdQ1HCJJGSbpJ0kOSHpR0dHH7RpJu\nkPRo8XvDzrdrZp00kFWGV4FjI2IHYA/g85J2AE4AboyIMcCNxXUzW4k1DISIWBgRvysuLwPmACOB\nA4BLi8kuBQ7sVJNmNjQGtVFR0mhgV+AuYHhELCxKzwDD29qZmQ25AW9UlLQe8FPgmIhYWruBJyKi\n3j8uSZoCTGm1UTPrvAGNECS9iRQGl0XElcXNiySNKOojgMX93TcipkfEuIgY146GzaxzBrKXQcDF\nwJyIOLumdDVwWHH5MOCq9rdnZkNpIKsMewIfB34vaVZx24nAGcAVkj4JPAEc3JkW3zga/b9/q+em\nGDNmTGn9ox/9aGn9C1/4Qml9m222Ka036r/RcQadXj7WWMNAiIjbgHpHhOzd3nbMrEo+dNnMMgeC\nmWUOBDPLHAhmljkQzCxzIJhZ5vMhvIHst99+pfV99913iDqxlZVHCGaWORDMLHMgmFnmQDCzzIFg\nZpkDwcwyB4KZZT4OwYbMsmXLSuszZ84src+bN6+N3Vh/PEIws8yBYGaZA8HMMgeCmWUOBDPLHAhm\nljkQzCzTUJ7rvt7Xva0qDjnkkNL629/+9tL6SSedVFqv/Xq9/nT6tb7qqvLv6pk6dWpp/eabb25n\nO9ZHRJS/QfAIwcxqOBDMLHMgmFnmQDCzzIFgZpkDwcwyB4KZZT4OwWwV0ZbjECSNknSTpIckPSjp\n6OL2UyQtkDSr+PG3gJit5BqOECSNAEZExO8krQ/cBxwIHAy8FBHfGvDMPEIwq8xARggNT6EWEQuB\nhcXlZZLmACNbb8/Mus2gNipKGg3sCtxV3HSkpAckXSJpwzr3mSLpXkn3ttSpmXXcgDcqSloPuBk4\nLSKulDQcWAIE8B+k1Yp/afAYXmUwq8hAVhkGFAiS3gT8Avh1RJzdT3008IuI2KnB4zgQzCrSrr0M\nAi4G5tSGQbGxsddBwOxmmjSz7jGQvQzjgVuB3wM9xc0nAocCY0mrDPOBI4oNkGWP5RGCWUXatsrQ\nLg4Es+r4BClmNigOBDPLHAhmljkQzCxzIJhZ5kAws8yBYGaZA8HMMgeCmWUOBDPLHAhmljkQzCxz\nIJhZ5kAws6zhSVbbbAnwRM31TYrbupX7a00399fNvUH7+9t6IBMN6fkQXjdz6d6IGFdZAw24v9Z0\nc3/d3BtU159XGcwscyCYWVZ1IEyveP6NuL/WdHN/3dwbVNRfpdsQzKy7VD1CMLMu4kAws8yBYGaZ\nA8HMMgeCmWX/D0UIb2FgqWHyAAAAAElFTkSuQmCC\n", 67 | "text/plain": [ 68 | "" 69 | ] 70 | }, 71 | "metadata": {}, 72 | "output_type": "display_data" 73 | }, 74 | { 75 | "data": { 76 | "image/png": "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\n", 77 | "text/plain": [ 78 | "" 79 | ] 80 | }, 81 | "metadata": {}, 82 | "output_type": "display_data" 83 | }, 84 | { 85 | "data": { 86 | "image/png": "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\n", 87 | "text/plain": [ 88 | "" 89 | ] 90 | }, 91 | "metadata": {}, 92 | "output_type": "display_data" 93 | } 94 | ], 95 | "source": [ 96 | "nsample = 3\n", 97 | "rand_idx = np.random.randint(mnist.train.images.shape[0], size=nsample)\n", 98 | "\n", 99 | "for i in rand_idx:\n", 100 | " curr_img = np.reshape(mnist.train.images[i, :], (28,28))\n", 101 | " curr_lbl = np.argmax(mnist.train.labels[i, :])\n", 102 | " plt.matshow(curr_img, cmap=plt.get_cmap('gray'))\n", 103 | " plt.title(\"\"+str(i)+\"th training image \"\n", 104 | " + \"(label: \" + str(curr_lbl) + \")\")\n", 105 | " plt.show()" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 15, 111 | "metadata": { 112 | "collapsed": true 113 | }, 114 | "outputs": [], 115 | "source": [ 116 | "# Store layers weight & bias\n", 117 | "#here we define our weights since we our using a 2 layer perceptron so we will have 2 hidden layers and 1 ouput layer weight matrix. The first hidden layer will have dimension of 784*256 and the second hidden layer will have dimension of 256*256. The final output layer will have 256*10 dimensions.\n", 118 | "weights = {\n", 119 | " 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),\n", 120 | " 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),\n", 121 | " 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))\n", 122 | "}\n", 123 | "#similarly we have 2 bias for hidden layers and 1 for the output layer, with a dimensionality of 256,256,10 column vector.\n", 124 | "biases = {\n", 125 | " 'b1': tf.Variable(tf.random_normal([n_hidden_1])),\n", 126 | " 'b2': tf.Variable(tf.random_normal([n_hidden_2])),\n", 127 | " 'out': tf.Variable(tf.random_normal([n_classes]))\n", 128 | "}\n", 129 | "\n", 130 | "# We Create a model in which we pass our weights bias and input image x. Since our batch size is 100 so for each total batch we will have dimensionality of x as 100*784.\n", 131 | "#then we will multiply our weight matrix with x and add a bias. Finally apply a ReLU activation function, we can use any activation function we want to. But I tried using Sigmoid and it gave an accuracy 1-2% less than what I got from ReLU.\n", 132 | "#we do this for all layers and finally return the value of out_layer\n", 133 | "def multilayer_perceptron(x, weights, biases):\n", 134 | " # Hidden layer with RELU activation\n", 135 | " layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])\n", 136 | " layer_1 = tf.nn.relu(layer_1)\n", 137 | " # Hidden layer with RELU activation\n", 138 | " layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])\n", 139 | " layer_2 = tf.nn.relu(layer_2)\n", 140 | " # Output layer with linear activation\n", 141 | " out_layer = tf.matmul(layer_2, weights['out']) + biases['out']\n", 142 | " return out_layer\n", 143 | "\n", 144 | "# Construct model and we call the multilayer_perceptron function by passing in x, weights and biases.\n", 145 | "pred = multilayer_perceptron(x, weights, biases)\n", 146 | "\n", 147 | "# Define loss and optimizer. We use softmax loss function which is known as cross entropy loss function.\n", 148 | "cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))\n", 149 | "#for optimization we use Adam optimizer, we can use Gradient Descent as well.\n", 150 | "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)\n", 151 | "\n", 152 | "# Initializing the variables\n", 153 | "init = tf.global_variables_initializer()" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 16, 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "name": "stdout", 163 | "output_type": "stream", 164 | "text": [ 165 | "Epoch: 0001 cost= 50.021130770\n", 166 | "Epoch: 0002 cost= 8.828945014\n", 167 | "Epoch: 0003 cost= 4.602092031\n", 168 | "Epoch: 0004 cost= 3.018981964\n", 169 | "Epoch: 0005 cost= 2.542850296\n", 170 | "Epoch: 0006 cost= 2.112070576\n", 171 | "Epoch: 0007 cost= 2.008525742\n", 172 | "Epoch: 0008 cost= 1.854127340\n", 173 | "Epoch: 0009 cost= 1.538089088\n", 174 | "Epoch: 0010 cost= 1.423981933\n", 175 | "Epoch: 0011 cost= 0.984859574\n", 176 | "Epoch: 0012 cost= 0.997817939\n", 177 | "Epoch: 0013 cost= 0.909362126\n", 178 | "Epoch: 0014 cost= 1.017504340\n", 179 | "Epoch: 0015 cost= 0.765599993\n", 180 | "Epoch: 0016 cost= 0.855902533\n", 181 | "Epoch: 0017 cost= 0.500779682\n", 182 | "Epoch: 0018 cost= 0.646110838\n", 183 | "Epoch: 0019 cost= 0.490635695\n", 184 | "Epoch: 0020 cost= 0.498292135\n", 185 | "Epoch: 0021 cost= 0.474799784\n", 186 | "Epoch: 0022 cost= 0.428691944\n", 187 | "Epoch: 0023 cost= 0.371314076\n", 188 | "Epoch: 0024 cost= 0.391819412\n", 189 | "Epoch: 0025 cost= 0.391502575\n", 190 | "Epoch: 0026 cost= 0.286034459\n", 191 | "Epoch: 0027 cost= 0.293220083\n", 192 | "Epoch: 0028 cost= 0.343594716\n", 193 | "Epoch: 0029 cost= 0.259373586\n", 194 | "Epoch: 0030 cost= 0.228788215\n", 195 | "Epoch: 0031 cost= 0.210991009\n", 196 | "Epoch: 0032 cost= 0.217263833\n", 197 | "Epoch: 0033 cost= 0.199723549\n", 198 | "Epoch: 0034 cost= 0.261115963\n", 199 | "Epoch: 0035 cost= 0.184859019\n", 200 | "Epoch: 0036 cost= 0.173144383\n", 201 | "Epoch: 0037 cost= 0.166866363\n", 202 | "Epoch: 0038 cost= 0.126495447\n", 203 | "Epoch: 0039 cost= 0.162709907\n", 204 | "Epoch: 0040 cost= 0.184105923\n", 205 | "Optimization Finished!\n", 206 | "Accuracy: 0.9608\n" 207 | ] 208 | } 209 | ], 210 | "source": [ 211 | "# Launch the graph. #this is a class that runs all the tensorflow operations and launches the graph in a session. All the operations have to be within the indentation. \n", 212 | "with tf.Session() as sess:\n", 213 | " sess.run(init) ##sess.run(init), runs the variables that were initialised in the previous step and evaluates the tensor \n", 214 | "\n", 215 | " # Training cycle\n", 216 | " #we use for loop, to loop around all the 25 training_epochs.\n", 217 | "\n", 218 | " for epoch in range(training_epochs):\n", 219 | " avg_cost = 0. #initialize avg_cost to zero.\n", 220 | " total_batch = int(mnist.train.num_examples/batch_size) #here we input our batch size and we store the output in total_batch. For eg: we have used 100 as batch size so our total_batch will be 550. You can try printing the value to see how it varies based on the batch size.\n", 221 | " \n", 222 | " for i in range(total_batch): #now we iterate over each total_batch starting from 0-549\n", 223 | " batch_xs, batch_ys = mnist.train.next_batch(batch_size) #at each i we load 100 images and there labels in batch_xs and batch_ys, which are nothing but a matrix representation of images.\n", 224 | " \n", 225 | " # Fit training using batch data, think it as optimizer and cost being a root node and x and y their child or parent node.\n", 226 | " _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs, \n", 227 | " y: batch_ys})\n", 228 | " # Compute average loss \n", 229 | " avg_cost += c / total_batch #we calculate cost for 100 images once at a time and every time we get next 100 images and this keeps on going for 550 times.\n", 230 | " \n", 231 | " # Display logs per epoch step\n", 232 | " if (epoch+1) % display_step == 0:\n", 233 | " print \"Epoch:\", '%04d'%(epoch+1), \"cost=\", \"{:.9f}\".format(avg_cost)\n", 234 | "\n", 235 | " print \"Optimization Finished!\" \n", 236 | "\n", 237 | " # Test model, here we check whether the index of the maximum value of the predicted image is equal to the actual labelled image and both will be a column vector.\n", 238 | " correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", 239 | " #calculate accuracy across the correct_prediction using reduce_mean. For eg: if we have 10 classes and out of which only 4 classes predicted result was true so we will get something like 4/10 as accuracy.\n", 240 | " accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", 241 | " # Calculate accuracy for test image and their respective label examples\n", 242 | " print \"Accuracy:\", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})" 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": null, 248 | "metadata": { 249 | "collapsed": true 250 | }, 251 | "outputs": [], 252 | "source": [] 253 | } 254 | ], 255 | "metadata": { 256 | "kernelspec": { 257 | "display_name": "Python 2", 258 | "language": "python", 259 | "name": "python2" 260 | }, 261 | "language_info": { 262 | "codemirror_mode": { 263 | "name": "ipython", 264 | "version": 2 265 | }, 266 | "file_extension": ".py", 267 | "mimetype": "text/x-python", 268 | "name": "python", 269 | "nbconvert_exporter": "python", 270 | "pygments_lexer": "ipython2", 271 | "version": "2.7.12" 272 | } 273 | }, 274 | "nbformat": 4, 275 | "nbformat_minor": 2 276 | } 277 | -------------------------------------------------------------------------------- /Tensorflow Examples/Nearest Neighbour Classifier.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np #imports numpy as np. Numpy is used for basic matrix multiplication, addition.\n", 12 | "import tensorflow as tf #imports tensorflow as tf. Tensorflow is an n-dimensional matrix\n", 13 | "#just like a 1-D vector, 2-D array, 3-D array etc.\n", 14 | "from matplotlib import pyplot as plt\n", 15 | "%matplotlib inline" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 5, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "Extracting MNIST/data/train-images-idx3-ubyte.gz\n", 28 | "Extracting MNIST/data/train-labels-idx1-ubyte.gz\n", 29 | "Extracting MNIST/data/t10k-images-idx3-ubyte.gz\n", 30 | "Extracting MNIST/data/t10k-labels-idx1-ubyte.gz\n" 31 | ] 32 | } 33 | ], 34 | "source": [ 35 | "from tensorflow.examples.tutorials.mnist import input_data #imports mnist input data from tensorflow examples. \n", 36 | "#Mnist data set consists of images of numbers from 0-9, each image is a 28*28 dimensional. \n", 37 | "#There are total 60k training images and 10k test images.\n", 38 | "mnist = input_data.read_data_sets(\"MNIST/data/\", one_hot=True) #using input data call read data sets \n", 39 | "#from a folder MNIST/data and store in mnist. One hot vector is used which means at once only one class \n", 40 | "#will be true. Since our images have labels 0-9 that means out of all 10 classes only 1 class will be true \n", 41 | "#at a time rest all will be zero." 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 6, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "image/png": "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\n", 52 | "text/plain": [ 53 | "" 54 | ] 55 | }, 56 | "metadata": {}, 57 | "output_type": "display_data" 58 | }, 59 | { 60 | "data": { 61 | "image/png": "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\n", 62 | "text/plain": [ 63 | "" 64 | ] 65 | }, 66 | "metadata": {}, 67 | "output_type": "display_data" 68 | }, 69 | { 70 | "data": { 71 | "image/png": "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\n", 72 | "text/plain": [ 73 | "" 74 | ] 75 | }, 76 | "metadata": {}, 77 | "output_type": "display_data" 78 | } 79 | ], 80 | "source": [ 81 | "nsample = 3\n", 82 | "rand_idx = np.random.randint(mnist.train.images.shape[0], size=nsample)\n", 83 | "\n", 84 | "for i in rand_idx:\n", 85 | " curr_img = np.reshape(mnist.train.images[i, :], (28,28))\n", 86 | " curr_lbl = np.argmax(mnist.train.labels[i, :])\n", 87 | " plt.matshow(curr_img, cmap=plt.get_cmap('gray'))\n", 88 | " plt.title(\"\"+str(i)+\"th training image \"\n", 89 | " + \"(label: \" + str(curr_lbl) + \")\")\n", 90 | " plt.show()\n", 91 | "\n" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 5, 97 | "metadata": { 98 | "collapsed": true 99 | }, 100 | "outputs": [], 101 | "source": [ 102 | "Xtr , Ytr = mnist.train.next_batch(5000) #we use 5K training images and assign the images to Xtr \n", 103 | "#and respective labels of images to Ytr.\n", 104 | "Xte , Yte = mnist.test.next_batch(800) # we use 800 test images and assign the images to Xte \n", 105 | "#and respective test label of images to Yte.\n", 106 | "\n", 107 | "#placeholder is like a variable to which we will assign data later on.\n", 108 | "#It will allow us to do operations and build our computation graph without feeding in data.\n", 109 | "#xtr will hold the training images in form of matrix,the dimensions of xtr will be in our case 5000*784, \n", 110 | "#that is why we use None which allows us to vary the dimensionality of our rows.\n", 111 | "#we use float to define its type.\n", 112 | "xtr = tf.placeholder(\"float\",[None,784]) \n", 113 | "#similarly xte will hold the test images in form matrix which is squashed in to a 784-D column vector.\n", 114 | "xte = tf.placeholder(\"float\",[784])\n", 115 | "\n", 116 | "#nearest neighbour calculation and we use L1 manhattan distance to calculate. \n", 117 | "#In Knn we subtract all the training images with a single test image at a time \n", 118 | "#and calculate the minimum distance between them. The image which has minimum distance \n", 119 | "#we then predict its respective class.\n", 120 | "#reduction indices =1 will sum all the values in matrix across all columns.\n", 121 | "distance = tf.reduce_sum(tf.abs(tf.add(xtr, tf.negative(xte))),reduction_indices=1)\n", 122 | "\n", 123 | "#arg_min will return us the position of the value which is minimum in the matrix across all rows. \n", 124 | "pred = tf.arg_min(distance,0)\n", 125 | "\n", 126 | "#we initialise accuracy as zero.\n", 127 | "accuracy = 0.\n", 128 | "\n", 129 | "#here we initialise all the variables in our model.\n", 130 | "init = tf.global_variables_initializer()" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 6, 136 | "metadata": {}, 137 | "outputs": [ 138 | { 139 | "name": "stdout", 140 | "output_type": "stream", 141 | "text": [ 142 | "Test 0 Prediction 0 Ground Truth: 0\n", 143 | "Test 1 Prediction 8 Ground Truth: 8\n", 144 | "Test 2 Prediction 4 Ground Truth: 4\n", 145 | "Test 3 Prediction 9 Ground Truth: 9\n", 146 | "Test 4 Prediction 7 Ground Truth: 7\n", 147 | "Test 5 Prediction 5 Ground Truth: 5\n", 148 | "Test 6 Prediction 5 Ground Truth: 5\n", 149 | "Test 7 Prediction 2 Ground Truth: 2\n", 150 | "Test 8 Prediction 1 Ground Truth: 1\n", 151 | "Test 9 Prediction 7 Ground Truth: 7\n", 152 | "Test 10 Prediction 4 Ground Truth: 4\n", 153 | "Test 11 Prediction 0 Ground Truth: 0\n", 154 | "Test 12 Prediction 5 Ground Truth: 3\n", 155 | "Test 13 Prediction 8 Ground Truth: 8\n", 156 | "Test 14 Prediction 6 Ground Truth: 6\n", 157 | "Test 15 Prediction 3 Ground Truth: 3\n", 158 | "Test 16 Prediction 3 Ground Truth: 3\n", 159 | "Test 17 Prediction 3 Ground Truth: 3\n", 160 | "Test 18 Prediction 5 Ground Truth: 5\n", 161 | "Test 19 Prediction 1 Ground Truth: 1\n", 162 | "Test 20 Prediction 4 Ground Truth: 4\n", 163 | "Test 21 Prediction 3 Ground Truth: 8\n", 164 | "Test 22 Prediction 1 Ground Truth: 1\n", 165 | "Test 23 Prediction 5 Ground Truth: 8\n", 166 | "Test 24 Prediction 6 Ground Truth: 6\n", 167 | "Test 25 Prediction 1 Ground Truth: 1\n", 168 | "Test 26 Prediction 1 Ground Truth: 1\n", 169 | "Test 27 Prediction 0 Ground Truth: 0\n", 170 | "Test 28 Prediction 1 Ground Truth: 1\n", 171 | "Test 29 Prediction 1 Ground Truth: 1\n", 172 | "Test 30 Prediction 7 Ground Truth: 7\n", 173 | "Test 31 Prediction 6 Ground Truth: 6\n", 174 | "Test 32 Prediction 9 Ground Truth: 9\n", 175 | "Test 33 Prediction 9 Ground Truth: 9\n", 176 | "Test 34 Prediction 7 Ground Truth: 9\n", 177 | "Test 35 Prediction 3 Ground Truth: 3\n", 178 | "Test 36 Prediction 5 Ground Truth: 6\n", 179 | "Test 37 Prediction 9 Ground Truth: 9\n", 180 | "Test 38 Prediction 4 Ground Truth: 4\n", 181 | "Test 39 Prediction 6 Ground Truth: 6\n", 182 | "Test 40 Prediction 6 Ground Truth: 6\n", 183 | "Test 41 Prediction 8 Ground Truth: 8\n", 184 | "Test 42 Prediction 2 Ground Truth: 2\n", 185 | "Test 43 Prediction 7 Ground Truth: 7\n", 186 | "Test 44 Prediction 0 Ground Truth: 0\n", 187 | "Test 45 Prediction 3 Ground Truth: 3\n", 188 | "Test 46 Prediction 6 Ground Truth: 6\n", 189 | "Test 47 Prediction 0 Ground Truth: 0\n", 190 | "Test 48 Prediction 2 Ground Truth: 2\n", 191 | "Test 49 Prediction 3 Ground Truth: 3\n", 192 | "Test 50 Prediction 3 Ground Truth: 3\n", 193 | "Test 51 Prediction 2 Ground Truth: 2\n", 194 | "Test 52 Prediction 1 Ground Truth: 1\n", 195 | "Test 53 Prediction 1 Ground Truth: 1\n", 196 | "Test 54 Prediction 9 Ground Truth: 9\n", 197 | "Test 55 Prediction 9 Ground Truth: 9\n", 198 | "Test 56 Prediction 4 Ground Truth: 4\n", 199 | "Test 57 Prediction 9 Ground Truth: 9\n", 200 | "Test 58 Prediction 0 Ground Truth: 0\n", 201 | "Test 59 Prediction 4 Ground Truth: 4\n", 202 | "Test 60 Prediction 2 Ground Truth: 2\n", 203 | "Test 61 Prediction 5 Ground Truth: 5\n", 204 | "Test 62 Prediction 5 Ground Truth: 5\n", 205 | "Test 63 Prediction 3 Ground Truth: 3\n", 206 | "Test 64 Prediction 7 Ground Truth: 7\n", 207 | "Test 65 Prediction 6 Ground Truth: 6\n", 208 | "Test 66 Prediction 0 Ground Truth: 0\n", 209 | "Test 67 Prediction 7 Ground Truth: 7\n", 210 | "Test 68 Prediction 2 Ground Truth: 2\n", 211 | "Test 69 Prediction 2 Ground Truth: 2\n", 212 | "Test 70 Prediction 9 Ground Truth: 9\n", 213 | "Test 71 Prediction 1 Ground Truth: 1\n", 214 | "Test 72 Prediction 7 Ground Truth: 7\n", 215 | "Test 73 Prediction 7 Ground Truth: 7\n", 216 | "Test 74 Prediction 8 Ground Truth: 8\n", 217 | "Test 75 Prediction 0 Ground Truth: 0\n", 218 | "Test 76 Prediction 2 Ground Truth: 2\n", 219 | "Test 77 Prediction 4 Ground Truth: 4\n", 220 | "Test 78 Prediction 0 Ground Truth: 0\n", 221 | "Test 79 Prediction 0 Ground Truth: 0\n", 222 | "Test 80 Prediction 8 Ground Truth: 8\n", 223 | "Test 81 Prediction 9 Ground Truth: 9\n", 224 | "Test 82 Prediction 3 Ground Truth: 3\n", 225 | "Test 83 Prediction 5 Ground Truth: 5\n", 226 | "Test 84 Prediction 4 Ground Truth: 4\n", 227 | "Test 85 Prediction 4 Ground Truth: 4\n", 228 | "Test 86 Prediction 1 Ground Truth: 1\n", 229 | "Test 87 Prediction 8 Ground Truth: 8\n", 230 | "Test 88 Prediction 3 Ground Truth: 3\n", 231 | "Test 89 Prediction 9 Ground Truth: 9\n", 232 | "Test 90 Prediction 9 Ground Truth: 9\n", 233 | "Test 91 Prediction 0 Ground Truth: 0\n", 234 | "Test 92 Prediction 0 Ground Truth: 0\n", 235 | "Test 93 Prediction 0 Ground Truth: 0\n", 236 | "Test 94 Prediction 7 Ground Truth: 7\n", 237 | "Test 95 Prediction 5 Ground Truth: 5\n", 238 | "Test 96 Prediction 4 Ground Truth: 4\n", 239 | "Test 97 Prediction 9 Ground Truth: 9\n", 240 | "Test 98 Prediction 1 Ground Truth: 7\n", 241 | "Test 99 Prediction 7 Ground Truth: 7\n", 242 | "Test 100 Prediction 6 Ground Truth: 6\n", 243 | "Test 101 Prediction 5 Ground Truth: 5\n", 244 | "Test 102 Prediction 7 Ground Truth: 7\n", 245 | "Test 103 Prediction 8 Ground Truth: 8\n", 246 | "Test 104 Prediction 1 Ground Truth: 1\n", 247 | "Test 105 Prediction 7 Ground Truth: 2\n", 248 | "Test 106 Prediction 5 Ground Truth: 8\n", 249 | "Test 107 Prediction 1 Ground Truth: 1\n", 250 | "Test 108 Prediction 6 Ground Truth: 6\n", 251 | "Test 109 Prediction 6 Ground Truth: 6\n", 252 | "Test 110 Prediction 0 Ground Truth: 0\n", 253 | "Test 111 Prediction 1 Ground Truth: 1\n", 254 | "Test 112 Prediction 5 Ground Truth: 5\n", 255 | "Test 113 Prediction 6 Ground Truth: 6\n", 256 | "Test 114 Prediction 7 Ground Truth: 7\n", 257 | "Test 115 Prediction 2 Ground Truth: 2\n", 258 | "Test 116 Prediction 9 Ground Truth: 9\n", 259 | "Test 117 Prediction 2 Ground Truth: 2\n", 260 | "Test 118 Prediction 2 Ground Truth: 2\n", 261 | "Test 119 Prediction 3 Ground Truth: 3\n", 262 | "Test 120 Prediction 6 Ground Truth: 6\n", 263 | "Test 121 Prediction 4 Ground Truth: 4\n", 264 | "Test 122 Prediction 0 Ground Truth: 0\n", 265 | "Test 123 Prediction 6 Ground Truth: 6\n", 266 | "Test 124 Prediction 4 Ground Truth: 4\n", 267 | "Test 125 Prediction 5 Ground Truth: 5\n", 268 | "Test 126 Prediction 2 Ground Truth: 2\n", 269 | "Test 127 Prediction 5 Ground Truth: 5\n", 270 | "Test 128 Prediction 2 Ground Truth: 1\n", 271 | "Test 129 Prediction 0 Ground Truth: 0\n", 272 | "Test 130 Prediction 9 Ground Truth: 9\n", 273 | "Test 131 Prediction 1 Ground Truth: 1\n", 274 | "Test 132 Prediction 4 Ground Truth: 4\n", 275 | "Test 133 Prediction 5 Ground Truth: 5\n", 276 | "Test 134 Prediction 1 Ground Truth: 1\n", 277 | "Test 135 Prediction 7 Ground Truth: 7\n", 278 | "Test 136 Prediction 0 Ground Truth: 0\n", 279 | "Test 137 Prediction 9 Ground Truth: 9\n", 280 | "Test 138 Prediction 1 Ground Truth: 1\n", 281 | "Test 139 Prediction 7 Ground Truth: 7\n", 282 | "Test 140 Prediction 0 Ground Truth: 0\n", 283 | "Test 141 Prediction 5 Ground Truth: 8\n", 284 | "Test 142 Prediction 5 Ground Truth: 5\n", 285 | "Test 143 Prediction 7 Ground Truth: 7\n", 286 | "Test 144 Prediction 4 Ground Truth: 4\n", 287 | "Test 145 Prediction 7 Ground Truth: 7\n", 288 | "Test 146 Prediction 2 Ground Truth: 2\n", 289 | "Test 147 Prediction 0 Ground Truth: 8\n", 290 | "Test 148 Prediction 6 Ground Truth: 6\n", 291 | "Test 149 Prediction 2 Ground Truth: 2\n", 292 | "Test 150 Prediction 7 Ground Truth: 7\n", 293 | "Test 151 Prediction 5 Ground Truth: 5\n", 294 | "Test 152 Prediction 6 Ground Truth: 6\n", 295 | "Test 153 Prediction 2 Ground Truth: 2\n", 296 | "Test 154 Prediction 1 Ground Truth: 1\n", 297 | "Test 155 Prediction 4 Ground Truth: 4\n", 298 | "Test 156 Prediction 8 Ground Truth: 8\n", 299 | "Test 157 Prediction 0 Ground Truth: 0\n", 300 | "Test 158 Prediction 1 Ground Truth: 1\n", 301 | "Test 159 Prediction 5 Ground Truth: 5\n", 302 | "Test 160 Prediction 0 Ground Truth: 0\n", 303 | "Test 161 Prediction 7 Ground Truth: 7\n", 304 | "Test 162 Prediction 6 Ground Truth: 6\n", 305 | "Test 163 Prediction 9 Ground Truth: 9\n", 306 | "Test 164 Prediction 3 Ground Truth: 3\n", 307 | "Test 165 Prediction 4 Ground Truth: 4\n", 308 | "Test 166 Prediction 6 Ground Truth: 6\n", 309 | "Test 167 Prediction 6 Ground Truth: 6\n", 310 | "Test 168 Prediction 6 Ground Truth: 6\n", 311 | "Test 169 Prediction 3 Ground Truth: 3\n", 312 | "Test 170 Prediction 0 Ground Truth: 0\n", 313 | "Test 171 Prediction 6 Ground Truth: 6\n", 314 | "Test 172 Prediction 8 Ground Truth: 8\n", 315 | "Test 173 Prediction 3 Ground Truth: 3\n", 316 | "Test 174 Prediction 4 Ground Truth: 4\n", 317 | "Test 175 Prediction 4 Ground Truth: 4\n", 318 | "Test 176 Prediction 3 Ground Truth: 3\n", 319 | "Test 177 Prediction 3 Ground Truth: 3\n", 320 | "Test 178 Prediction 6 Ground Truth: 6\n", 321 | "Test 179 Prediction 9 Ground Truth: 9\n", 322 | "Test 180 Prediction 5 Ground Truth: 5\n", 323 | "Test 181 Prediction 2 Ground Truth: 2\n", 324 | "Test 182 Prediction 6 Ground Truth: 6\n", 325 | "Test 183 Prediction 1 Ground Truth: 1\n", 326 | "Test 184 Prediction 6 Ground Truth: 6\n", 327 | "Test 185 Prediction 2 Ground Truth: 2\n", 328 | "Test 186 Prediction 8 Ground Truth: 8\n", 329 | "Test 187 Prediction 8 Ground Truth: 8\n", 330 | "Test 188 Prediction 2 Ground Truth: 2\n", 331 | "Test 189 Prediction 5 Ground Truth: 5\n", 332 | "Test 190 Prediction 9 Ground Truth: 9\n", 333 | "Test 191 Prediction 5 Ground Truth: 5\n", 334 | "Test 192 Prediction 6 Ground Truth: 6\n", 335 | "Test 193 Prediction 8 Ground Truth: 8\n", 336 | "Test 194 Prediction 2 Ground Truth: 2\n", 337 | "Test 195 Prediction 5 Ground Truth: 5\n", 338 | "Test 196 Prediction 1 Ground Truth: 1\n", 339 | "Test 197 Prediction 3 Ground Truth: 3\n", 340 | "Test 198 Prediction 7 Ground Truth: 8\n", 341 | "Test 199 Prediction 8 Ground Truth: 8\n", 342 | "Test 200 Prediction 4 Ground Truth: 4\n", 343 | "Test 201 Prediction 9 Ground Truth: 9\n", 344 | "Test 202 Prediction 8 Ground Truth: 8\n", 345 | "Test 203 Prediction 4 Ground Truth: 4\n", 346 | "Test 204 Prediction 7 Ground Truth: 7\n", 347 | "Test 205 Prediction 1 Ground Truth: 1\n", 348 | "Test 206 Prediction 0 Ground Truth: 0\n", 349 | "Test 207 Prediction 1 Ground Truth: 1\n", 350 | "Test 208 Prediction 5 Ground Truth: 5\n", 351 | "Test 209 Prediction 9 Ground Truth: 9\n", 352 | "Test 210 Prediction 9 Ground Truth: 9\n", 353 | "Test 211 Prediction 3 Ground Truth: 3\n", 354 | "Test 212 Prediction 0 Ground Truth: 0\n", 355 | "Test 213 Prediction 8 Ground Truth: 8\n", 356 | "Test 214 Prediction 9 Ground Truth: 9\n", 357 | "Test 215 Prediction 1 Ground Truth: 1\n", 358 | "Test 216 Prediction 1 Ground Truth: 1\n", 359 | "Test 217 Prediction 9 Ground Truth: 9\n", 360 | "Test 218 Prediction 8 Ground Truth: 8\n", 361 | "Test 219 Prediction 4 Ground Truth: 4\n", 362 | "Test 220 Prediction 0 Ground Truth: 0\n", 363 | "Test 221 Prediction 2 Ground Truth: 2\n", 364 | "Test 222 Prediction 0 Ground Truth: 0\n", 365 | "Test 223 Prediction 2 Ground Truth: 2\n", 366 | "Test 224 Prediction 7 Ground Truth: 7\n", 367 | "Test 225 Prediction 8 Ground Truth: 8\n", 368 | "Test 226 Prediction 8 Ground Truth: 8\n", 369 | "Test 227 Prediction 4 Ground Truth: 4\n", 370 | "Test 228 Prediction 0 Ground Truth: 0\n", 371 | "Test 229 Prediction 4 Ground Truth: 4\n", 372 | "Test 230 Prediction 0 Ground Truth: 0\n", 373 | "Test 231 Prediction 8 Ground Truth: 8\n", 374 | "Test 232 Prediction 2 Ground Truth: 2\n", 375 | "Test 233 Prediction 7 Ground Truth: 5\n", 376 | "Test 234 Prediction 2 Ground Truth: 2\n", 377 | "Test 235 Prediction 9 Ground Truth: 9\n", 378 | "Test 236 Prediction 1 Ground Truth: 1\n", 379 | "Test 237 Prediction 5 Ground Truth: 5\n", 380 | "Test 238 Prediction 9 Ground Truth: 8\n", 381 | "Test 239 Prediction 1 Ground Truth: 6\n", 382 | "Test 240 Prediction 2 Ground Truth: 2\n", 383 | "Test 241 Prediction 1 Ground Truth: 1\n", 384 | "Test 242 Prediction 6 Ground Truth: 6\n", 385 | "Test 243 Prediction 1 Ground Truth: 1\n", 386 | "Test 244 Prediction 3 Ground Truth: 3\n", 387 | "Test 245 Prediction 7 Ground Truth: 7\n", 388 | "Test 246 Prediction 1 Ground Truth: 1\n", 389 | "Test 247 Prediction 0 Ground Truth: 0\n", 390 | "Test 248 Prediction 8 Ground Truth: 8\n", 391 | "Test 249 Prediction 9 Ground Truth: 9\n", 392 | "Test 250 Prediction 1 Ground Truth: 1\n", 393 | "Test 251 Prediction 6 Ground Truth: 6\n", 394 | "Test 252 Prediction 0 Ground Truth: 0\n", 395 | "Test 253 Prediction 2 Ground Truth: 2\n", 396 | "Test 254 Prediction 7 Ground Truth: 7\n", 397 | "Test 255 Prediction 3 Ground Truth: 3\n", 398 | "Test 256 Prediction 5 Ground Truth: 5\n" 399 | ] 400 | }, 401 | { 402 | "name": "stdout", 403 | "output_type": "stream", 404 | "text": [ 405 | "Test 257 Prediction 9 Ground Truth: 9\n", 406 | "Test 258 Prediction 6 Ground Truth: 6\n", 407 | "Test 259 Prediction 7 Ground Truth: 7\n", 408 | "Test 260 Prediction 9 Ground Truth: 9\n", 409 | "Test 261 Prediction 6 Ground Truth: 6\n", 410 | "Test 262 Prediction 7 Ground Truth: 7\n", 411 | "Test 263 Prediction 1 Ground Truth: 1\n", 412 | "Test 264 Prediction 8 Ground Truth: 8\n", 413 | "Test 265 Prediction 2 Ground Truth: 2\n", 414 | "Test 266 Prediction 7 Ground Truth: 7\n", 415 | "Test 267 Prediction 6 Ground Truth: 6\n", 416 | "Test 268 Prediction 1 Ground Truth: 1\n", 417 | "Test 269 Prediction 7 Ground Truth: 2\n", 418 | "Test 270 Prediction 0 Ground Truth: 0\n", 419 | "Test 271 Prediction 9 Ground Truth: 9\n", 420 | "Test 272 Prediction 5 Ground Truth: 5\n", 421 | "Test 273 Prediction 0 Ground Truth: 0\n", 422 | "Test 274 Prediction 6 Ground Truth: 6\n", 423 | "Test 275 Prediction 1 Ground Truth: 1\n", 424 | "Test 276 Prediction 0 Ground Truth: 0\n", 425 | "Test 277 Prediction 8 Ground Truth: 8\n", 426 | "Test 278 Prediction 1 Ground Truth: 1\n", 427 | "Test 279 Prediction 9 Ground Truth: 9\n", 428 | "Test 280 Prediction 3 Ground Truth: 3\n", 429 | "Test 281 Prediction 5 Ground Truth: 5\n", 430 | "Test 282 Prediction 0 Ground Truth: 0\n", 431 | "Test 283 Prediction 0 Ground Truth: 0\n", 432 | "Test 284 Prediction 5 Ground Truth: 5\n", 433 | "Test 285 Prediction 8 Ground Truth: 8\n", 434 | "Test 286 Prediction 8 Ground Truth: 8\n", 435 | "Test 287 Prediction 6 Ground Truth: 6\n", 436 | "Test 288 Prediction 9 Ground Truth: 9\n", 437 | "Test 289 Prediction 0 Ground Truth: 0\n", 438 | "Test 290 Prediction 1 Ground Truth: 1\n", 439 | "Test 291 Prediction 5 Ground Truth: 5\n", 440 | "Test 292 Prediction 4 Ground Truth: 4\n", 441 | "Test 293 Prediction 4 Ground Truth: 4\n", 442 | "Test 294 Prediction 7 Ground Truth: 7\n", 443 | "Test 295 Prediction 2 Ground Truth: 2\n", 444 | "Test 296 Prediction 6 Ground Truth: 6\n", 445 | "Test 297 Prediction 1 Ground Truth: 1\n", 446 | "Test 298 Prediction 1 Ground Truth: 1\n", 447 | "Test 299 Prediction 5 Ground Truth: 5\n", 448 | "Test 300 Prediction 2 Ground Truth: 2\n", 449 | "Test 301 Prediction 6 Ground Truth: 6\n", 450 | "Test 302 Prediction 5 Ground Truth: 5\n", 451 | "Test 303 Prediction 3 Ground Truth: 3\n", 452 | "Test 304 Prediction 6 Ground Truth: 6\n", 453 | "Test 305 Prediction 5 Ground Truth: 5\n", 454 | "Test 306 Prediction 1 Ground Truth: 1\n", 455 | "Test 307 Prediction 9 Ground Truth: 9\n", 456 | "Test 308 Prediction 4 Ground Truth: 4\n", 457 | "Test 309 Prediction 1 Ground Truth: 1\n", 458 | "Test 310 Prediction 3 Ground Truth: 3\n", 459 | "Test 311 Prediction 4 Ground Truth: 4\n", 460 | "Test 312 Prediction 3 Ground Truth: 3\n", 461 | "Test 313 Prediction 7 Ground Truth: 7\n", 462 | "Test 314 Prediction 2 Ground Truth: 2\n", 463 | "Test 315 Prediction 8 Ground Truth: 8\n", 464 | "Test 316 Prediction 0 Ground Truth: 0\n", 465 | "Test 317 Prediction 0 Ground Truth: 0\n", 466 | "Test 318 Prediction 5 Ground Truth: 5\n", 467 | "Test 319 Prediction 2 Ground Truth: 2\n", 468 | "Test 320 Prediction 6 Ground Truth: 6\n", 469 | "Test 321 Prediction 0 Ground Truth: 0\n", 470 | "Test 322 Prediction 9 Ground Truth: 9\n", 471 | "Test 323 Prediction 1 Ground Truth: 1\n", 472 | "Test 324 Prediction 8 Ground Truth: 8\n", 473 | "Test 325 Prediction 2 Ground Truth: 2\n", 474 | "Test 326 Prediction 5 Ground Truth: 5\n", 475 | "Test 327 Prediction 2 Ground Truth: 2\n", 476 | "Test 328 Prediction 7 Ground Truth: 7\n", 477 | "Test 329 Prediction 1 Ground Truth: 7\n", 478 | "Test 330 Prediction 3 Ground Truth: 3\n", 479 | "Test 331 Prediction 9 Ground Truth: 7\n", 480 | "Test 332 Prediction 1 Ground Truth: 1\n", 481 | "Test 333 Prediction 3 Ground Truth: 3\n", 482 | "Test 334 Prediction 1 Ground Truth: 1\n", 483 | "Test 335 Prediction 7 Ground Truth: 7\n", 484 | "Test 336 Prediction 8 Ground Truth: 8\n", 485 | "Test 337 Prediction 4 Ground Truth: 4\n", 486 | "Test 338 Prediction 5 Ground Truth: 5\n", 487 | "Test 339 Prediction 4 Ground Truth: 4\n", 488 | "Test 340 Prediction 2 Ground Truth: 2\n", 489 | "Test 341 Prediction 8 Ground Truth: 8\n", 490 | "Test 342 Prediction 6 Ground Truth: 6\n", 491 | "Test 343 Prediction 1 Ground Truth: 1\n", 492 | "Test 344 Prediction 5 Ground Truth: 5\n", 493 | "Test 345 Prediction 9 Ground Truth: 9\n", 494 | "Test 346 Prediction 3 Ground Truth: 3\n", 495 | "Test 347 Prediction 5 Ground Truth: 5\n", 496 | "Test 348 Prediction 5 Ground Truth: 5\n", 497 | "Test 349 Prediction 7 Ground Truth: 7\n", 498 | "Test 350 Prediction 0 Ground Truth: 0\n", 499 | "Test 351 Prediction 6 Ground Truth: 6\n", 500 | "Test 352 Prediction 5 Ground Truth: 5\n", 501 | "Test 353 Prediction 9 Ground Truth: 9\n", 502 | "Test 354 Prediction 5 Ground Truth: 5\n", 503 | "Test 355 Prediction 6 Ground Truth: 6\n", 504 | "Test 356 Prediction 6 Ground Truth: 6\n", 505 | "Test 357 Prediction 0 Ground Truth: 0\n", 506 | "Test 358 Prediction 0 Ground Truth: 0\n", 507 | "Test 359 Prediction 5 Ground Truth: 5\n", 508 | "Test 360 Prediction 6 Ground Truth: 6\n", 509 | "Test 361 Prediction 8 Ground Truth: 8\n", 510 | "Test 362 Prediction 9 Ground Truth: 9\n", 511 | "Test 363 Prediction 8 Ground Truth: 8\n", 512 | "Test 364 Prediction 1 Ground Truth: 1\n", 513 | "Test 365 Prediction 3 Ground Truth: 3\n", 514 | "Test 366 Prediction 0 Ground Truth: 0\n", 515 | "Test 367 Prediction 0 Ground Truth: 0\n", 516 | "Test 368 Prediction 0 Ground Truth: 0\n", 517 | "Test 369 Prediction 3 Ground Truth: 3\n", 518 | "Test 370 Prediction 6 Ground Truth: 6\n", 519 | "Test 371 Prediction 2 Ground Truth: 2\n", 520 | "Test 372 Prediction 9 Ground Truth: 9\n", 521 | "Test 373 Prediction 7 Ground Truth: 7\n", 522 | "Test 374 Prediction 9 Ground Truth: 9\n", 523 | "Test 375 Prediction 9 Ground Truth: 9\n", 524 | "Test 376 Prediction 0 Ground Truth: 0\n", 525 | "Test 377 Prediction 1 Ground Truth: 1\n", 526 | "Test 378 Prediction 1 Ground Truth: 1\n", 527 | "Test 379 Prediction 9 Ground Truth: 9\n", 528 | "Test 380 Prediction 2 Ground Truth: 2\n", 529 | "Test 381 Prediction 4 Ground Truth: 4\n", 530 | "Test 382 Prediction 6 Ground Truth: 9\n", 531 | "Test 383 Prediction 9 Ground Truth: 9\n", 532 | "Test 384 Prediction 9 Ground Truth: 9\n", 533 | "Test 385 Prediction 0 Ground Truth: 0\n", 534 | "Test 386 Prediction 1 Ground Truth: 1\n", 535 | "Test 387 Prediction 5 Ground Truth: 5\n", 536 | "Test 388 Prediction 0 Ground Truth: 0\n", 537 | "Test 389 Prediction 8 Ground Truth: 8\n", 538 | "Test 390 Prediction 0 Ground Truth: 0\n", 539 | "Test 391 Prediction 4 Ground Truth: 4\n", 540 | "Test 392 Prediction 1 Ground Truth: 1\n", 541 | "Test 393 Prediction 9 Ground Truth: 9\n", 542 | "Test 394 Prediction 3 Ground Truth: 3\n", 543 | "Test 395 Prediction 6 Ground Truth: 6\n", 544 | "Test 396 Prediction 8 Ground Truth: 8\n", 545 | "Test 397 Prediction 8 Ground Truth: 8\n", 546 | "Test 398 Prediction 7 Ground Truth: 7\n", 547 | "Test 399 Prediction 3 Ground Truth: 3\n", 548 | "Test 400 Prediction 3 Ground Truth: 3\n", 549 | "Test 401 Prediction 2 Ground Truth: 2\n", 550 | "Test 402 Prediction 5 Ground Truth: 5\n", 551 | "Test 403 Prediction 7 Ground Truth: 7\n", 552 | "Test 404 Prediction 0 Ground Truth: 0\n", 553 | "Test 405 Prediction 9 Ground Truth: 9\n", 554 | "Test 406 Prediction 4 Ground Truth: 4\n", 555 | "Test 407 Prediction 9 Ground Truth: 4\n", 556 | "Test 408 Prediction 2 Ground Truth: 2\n", 557 | "Test 409 Prediction 6 Ground Truth: 6\n", 558 | "Test 410 Prediction 4 Ground Truth: 4\n", 559 | "Test 411 Prediction 3 Ground Truth: 3\n", 560 | "Test 412 Prediction 7 Ground Truth: 4\n", 561 | "Test 413 Prediction 8 Ground Truth: 8\n", 562 | "Test 414 Prediction 2 Ground Truth: 2\n", 563 | "Test 415 Prediction 0 Ground Truth: 0\n", 564 | "Test 416 Prediction 7 Ground Truth: 2\n", 565 | "Test 417 Prediction 0 Ground Truth: 0\n", 566 | "Test 418 Prediction 7 Ground Truth: 7\n", 567 | "Test 419 Prediction 2 Ground Truth: 2\n", 568 | "Test 420 Prediction 6 Ground Truth: 6\n", 569 | "Test 421 Prediction 5 Ground Truth: 5\n", 570 | "Test 422 Prediction 4 Ground Truth: 4\n", 571 | "Test 423 Prediction 1 Ground Truth: 1\n", 572 | "Test 424 Prediction 8 Ground Truth: 8\n", 573 | "Test 425 Prediction 8 Ground Truth: 8\n", 574 | "Test 426 Prediction 8 Ground Truth: 8\n", 575 | "Test 427 Prediction 8 Ground Truth: 8\n", 576 | "Test 428 Prediction 0 Ground Truth: 0\n", 577 | "Test 429 Prediction 2 Ground Truth: 2\n", 578 | "Test 430 Prediction 6 Ground Truth: 6\n", 579 | "Test 431 Prediction 8 Ground Truth: 8\n", 580 | "Test 432 Prediction 2 Ground Truth: 2\n", 581 | "Test 433 Prediction 7 Ground Truth: 7\n", 582 | "Test 434 Prediction 3 Ground Truth: 5\n", 583 | "Test 435 Prediction 8 Ground Truth: 8\n", 584 | "Test 436 Prediction 7 Ground Truth: 7\n", 585 | "Test 437 Prediction 1 Ground Truth: 1\n", 586 | "Test 438 Prediction 4 Ground Truth: 4\n", 587 | "Test 439 Prediction 6 Ground Truth: 6\n", 588 | "Test 440 Prediction 4 Ground Truth: 4\n", 589 | "Test 441 Prediction 8 Ground Truth: 8\n", 590 | "Test 442 Prediction 2 Ground Truth: 2\n", 591 | "Test 443 Prediction 7 Ground Truth: 7\n", 592 | "Test 444 Prediction 0 Ground Truth: 0\n", 593 | "Test 445 Prediction 0 Ground Truth: 0\n", 594 | "Test 446 Prediction 2 Ground Truth: 2\n", 595 | "Test 447 Prediction 4 Ground Truth: 4\n", 596 | "Test 448 Prediction 9 Ground Truth: 9\n", 597 | "Test 449 Prediction 1 Ground Truth: 1\n", 598 | "Test 450 Prediction 7 Ground Truth: 7\n", 599 | "Test 451 Prediction 5 Ground Truth: 5\n", 600 | "Test 452 Prediction 3 Ground Truth: 8\n", 601 | "Test 453 Prediction 7 Ground Truth: 7\n", 602 | "Test 454 Prediction 5 Ground Truth: 5\n", 603 | "Test 455 Prediction 9 Ground Truth: 9\n", 604 | "Test 456 Prediction 8 Ground Truth: 8\n", 605 | "Test 457 Prediction 8 Ground Truth: 8\n", 606 | "Test 458 Prediction 5 Ground Truth: 5\n", 607 | "Test 459 Prediction 7 Ground Truth: 7\n", 608 | "Test 460 Prediction 0 Ground Truth: 0\n", 609 | "Test 461 Prediction 1 Ground Truth: 1\n", 610 | "Test 462 Prediction 4 Ground Truth: 4\n", 611 | "Test 463 Prediction 6 Ground Truth: 6\n", 612 | "Test 464 Prediction 3 Ground Truth: 3\n", 613 | "Test 465 Prediction 0 Ground Truth: 0\n", 614 | "Test 466 Prediction 0 Ground Truth: 0\n", 615 | "Test 467 Prediction 1 Ground Truth: 1\n", 616 | "Test 468 Prediction 1 Ground Truth: 7\n", 617 | "Test 469 Prediction 2 Ground Truth: 2\n", 618 | "Test 470 Prediction 8 Ground Truth: 8\n", 619 | "Test 471 Prediction 0 Ground Truth: 0\n", 620 | "Test 472 Prediction 9 Ground Truth: 9\n", 621 | "Test 473 Prediction 5 Ground Truth: 5\n", 622 | "Test 474 Prediction 8 Ground Truth: 8\n", 623 | "Test 475 Prediction 8 Ground Truth: 8\n", 624 | "Test 476 Prediction 9 Ground Truth: 9\n", 625 | "Test 477 Prediction 5 Ground Truth: 3\n", 626 | "Test 478 Prediction 8 Ground Truth: 8\n", 627 | "Test 479 Prediction 8 Ground Truth: 8\n", 628 | "Test 480 Prediction 0 Ground Truth: 0\n", 629 | "Test 481 Prediction 2 Ground Truth: 2\n", 630 | "Test 482 Prediction 0 Ground Truth: 0\n", 631 | "Test 483 Prediction 1 Ground Truth: 1\n", 632 | "Test 484 Prediction 9 Ground Truth: 9\n", 633 | "Test 485 Prediction 9 Ground Truth: 9\n", 634 | "Test 486 Prediction 2 Ground Truth: 2\n", 635 | "Test 487 Prediction 6 Ground Truth: 6\n", 636 | "Test 488 Prediction 0 Ground Truth: 0\n", 637 | "Test 489 Prediction 5 Ground Truth: 5\n", 638 | "Test 490 Prediction 0 Ground Truth: 0\n", 639 | "Test 491 Prediction 2 Ground Truth: 2\n", 640 | "Test 492 Prediction 7 Ground Truth: 7\n", 641 | "Test 493 Prediction 9 Ground Truth: 9\n", 642 | "Test 494 Prediction 7 Ground Truth: 7\n", 643 | "Test 495 Prediction 1 Ground Truth: 1\n", 644 | "Test 496 Prediction 1 Ground Truth: 1\n", 645 | "Test 497 Prediction 8 Ground Truth: 8\n", 646 | "Test 498 Prediction 9 Ground Truth: 9\n" 647 | ] 648 | }, 649 | { 650 | "name": "stdout", 651 | "output_type": "stream", 652 | "text": [ 653 | "Test 499 Prediction 6 Ground Truth: 6\n", 654 | "Test 500 Prediction 8 Ground Truth: 8\n", 655 | "Test 501 Prediction 3 Ground Truth: 3\n", 656 | "Test 502 Prediction 9 Ground Truth: 9\n", 657 | "Test 503 Prediction 9 Ground Truth: 9\n", 658 | "Test 504 Prediction 8 Ground Truth: 8\n", 659 | "Test 505 Prediction 8 Ground Truth: 8\n", 660 | "Test 506 Prediction 5 Ground Truth: 5\n", 661 | "Test 507 Prediction 3 Ground Truth: 3\n", 662 | "Test 508 Prediction 9 Ground Truth: 9\n", 663 | "Test 509 Prediction 4 Ground Truth: 4\n", 664 | "Test 510 Prediction 6 Ground Truth: 6\n", 665 | "Test 511 Prediction 7 Ground Truth: 7\n", 666 | "Test 512 Prediction 5 Ground Truth: 5\n", 667 | "Test 513 Prediction 0 Ground Truth: 0\n", 668 | "Test 514 Prediction 6 Ground Truth: 6\n", 669 | "Test 515 Prediction 1 Ground Truth: 1\n", 670 | "Test 516 Prediction 0 Ground Truth: 0\n", 671 | "Test 517 Prediction 6 Ground Truth: 6\n", 672 | "Test 518 Prediction 4 Ground Truth: 4\n", 673 | "Test 519 Prediction 8 Ground Truth: 8\n", 674 | "Test 520 Prediction 2 Ground Truth: 2\n", 675 | "Test 521 Prediction 8 Ground Truth: 8\n", 676 | "Test 522 Prediction 2 Ground Truth: 2\n", 677 | "Test 523 Prediction 3 Ground Truth: 3\n", 678 | "Test 524 Prediction 1 Ground Truth: 1\n", 679 | "Test 525 Prediction 5 Ground Truth: 5\n", 680 | "Test 526 Prediction 5 Ground Truth: 5\n", 681 | "Test 527 Prediction 9 Ground Truth: 9\n", 682 | "Test 528 Prediction 2 Ground Truth: 2\n", 683 | "Test 529 Prediction 6 Ground Truth: 6\n", 684 | "Test 530 Prediction 0 Ground Truth: 0\n", 685 | "Test 531 Prediction 5 Ground Truth: 5\n", 686 | "Test 532 Prediction 8 Ground Truth: 8\n", 687 | "Test 533 Prediction 2 Ground Truth: 2\n", 688 | "Test 534 Prediction 1 Ground Truth: 1\n", 689 | "Test 535 Prediction 7 Ground Truth: 7\n", 690 | "Test 536 Prediction 9 Ground Truth: 7\n", 691 | "Test 537 Prediction 0 Ground Truth: 0\n", 692 | "Test 538 Prediction 2 Ground Truth: 2\n", 693 | "Test 539 Prediction 9 Ground Truth: 9\n", 694 | "Test 540 Prediction 2 Ground Truth: 2\n", 695 | "Test 541 Prediction 4 Ground Truth: 4\n", 696 | "Test 542 Prediction 3 Ground Truth: 3\n", 697 | "Test 543 Prediction 9 Ground Truth: 9\n", 698 | "Test 544 Prediction 6 Ground Truth: 6\n", 699 | "Test 545 Prediction 1 Ground Truth: 1\n", 700 | "Test 546 Prediction 6 Ground Truth: 6\n", 701 | "Test 547 Prediction 0 Ground Truth: 0\n", 702 | "Test 548 Prediction 5 Ground Truth: 5\n", 703 | "Test 549 Prediction 0 Ground Truth: 0\n", 704 | "Test 550 Prediction 6 Ground Truth: 6\n", 705 | "Test 551 Prediction 7 Ground Truth: 7\n", 706 | "Test 552 Prediction 7 Ground Truth: 7\n", 707 | "Test 553 Prediction 7 Ground Truth: 7\n", 708 | "Test 554 Prediction 4 Ground Truth: 4\n", 709 | "Test 555 Prediction 0 Ground Truth: 0\n", 710 | "Test 556 Prediction 3 Ground Truth: 3\n", 711 | "Test 557 Prediction 0 Ground Truth: 0\n", 712 | "Test 558 Prediction 0 Ground Truth: 0\n", 713 | "Test 559 Prediction 0 Ground Truth: 0\n", 714 | "Test 560 Prediction 3 Ground Truth: 3\n", 715 | "Test 561 Prediction 9 Ground Truth: 4\n", 716 | "Test 562 Prediction 5 Ground Truth: 5\n", 717 | "Test 563 Prediction 6 Ground Truth: 6\n", 718 | "Test 564 Prediction 9 Ground Truth: 9\n", 719 | "Test 565 Prediction 3 Ground Truth: 3\n", 720 | "Test 566 Prediction 5 Ground Truth: 5\n", 721 | "Test 567 Prediction 7 Ground Truth: 7\n", 722 | "Test 568 Prediction 0 Ground Truth: 0\n", 723 | "Test 569 Prediction 1 Ground Truth: 1\n", 724 | "Test 570 Prediction 6 Ground Truth: 6\n", 725 | "Test 571 Prediction 6 Ground Truth: 6\n", 726 | "Test 572 Prediction 0 Ground Truth: 0\n", 727 | "Test 573 Prediction 7 Ground Truth: 7\n", 728 | "Test 574 Prediction 1 Ground Truth: 1\n", 729 | "Test 575 Prediction 8 Ground Truth: 8\n", 730 | "Test 576 Prediction 5 Ground Truth: 8\n", 731 | "Test 577 Prediction 3 Ground Truth: 3\n", 732 | "Test 578 Prediction 7 Ground Truth: 7\n", 733 | "Test 579 Prediction 3 Ground Truth: 3\n", 734 | "Test 580 Prediction 6 Ground Truth: 6\n", 735 | "Test 581 Prediction 5 Ground Truth: 5\n", 736 | "Test 582 Prediction 0 Ground Truth: 0\n", 737 | "Test 583 Prediction 0 Ground Truth: 0\n", 738 | "Test 584 Prediction 2 Ground Truth: 2\n", 739 | "Test 585 Prediction 8 Ground Truth: 8\n", 740 | "Test 586 Prediction 4 Ground Truth: 4\n", 741 | "Test 587 Prediction 2 Ground Truth: 2\n", 742 | "Test 588 Prediction 6 Ground Truth: 6\n", 743 | "Test 589 Prediction 3 Ground Truth: 3\n", 744 | "Test 590 Prediction 0 Ground Truth: 0\n", 745 | "Test 591 Prediction 0 Ground Truth: 8\n", 746 | "Test 592 Prediction 4 Ground Truth: 4\n", 747 | "Test 593 Prediction 9 Ground Truth: 9\n", 748 | "Test 594 Prediction 4 Ground Truth: 4\n", 749 | "Test 595 Prediction 8 Ground Truth: 8\n", 750 | "Test 596 Prediction 6 Ground Truth: 6\n", 751 | "Test 597 Prediction 6 Ground Truth: 6\n", 752 | "Test 598 Prediction 0 Ground Truth: 0\n", 753 | "Test 599 Prediction 5 Ground Truth: 5\n", 754 | "Test 600 Prediction 9 Ground Truth: 9\n", 755 | "Test 601 Prediction 7 Ground Truth: 7\n", 756 | "Test 602 Prediction 7 Ground Truth: 7\n", 757 | "Test 603 Prediction 1 Ground Truth: 1\n", 758 | "Test 604 Prediction 4 Ground Truth: 4\n", 759 | "Test 605 Prediction 5 Ground Truth: 5\n", 760 | "Test 606 Prediction 2 Ground Truth: 2\n", 761 | "Test 607 Prediction 0 Ground Truth: 0\n", 762 | "Test 608 Prediction 2 Ground Truth: 2\n", 763 | "Test 609 Prediction 2 Ground Truth: 8\n", 764 | "Test 610 Prediction 9 Ground Truth: 9\n", 765 | "Test 611 Prediction 4 Ground Truth: 4\n", 766 | "Test 612 Prediction 1 Ground Truth: 1\n", 767 | "Test 613 Prediction 1 Ground Truth: 1\n", 768 | "Test 614 Prediction 7 Ground Truth: 7\n", 769 | "Test 615 Prediction 1 Ground Truth: 1\n", 770 | "Test 616 Prediction 2 Ground Truth: 2\n", 771 | "Test 617 Prediction 7 Ground Truth: 7\n", 772 | "Test 618 Prediction 6 Ground Truth: 6\n", 773 | "Test 619 Prediction 8 Ground Truth: 8\n", 774 | "Test 620 Prediction 9 Ground Truth: 9\n", 775 | "Test 621 Prediction 8 Ground Truth: 8\n", 776 | "Test 622 Prediction 2 Ground Truth: 2\n", 777 | "Test 623 Prediction 1 Ground Truth: 1\n", 778 | "Test 624 Prediction 1 Ground Truth: 1\n", 779 | "Test 625 Prediction 0 Ground Truth: 0\n", 780 | "Test 626 Prediction 3 Ground Truth: 3\n", 781 | "Test 627 Prediction 8 Ground Truth: 8\n", 782 | "Test 628 Prediction 6 Ground Truth: 6\n", 783 | "Test 629 Prediction 1 Ground Truth: 1\n", 784 | "Test 630 Prediction 0 Ground Truth: 0\n", 785 | "Test 631 Prediction 3 Ground Truth: 3\n", 786 | "Test 632 Prediction 0 Ground Truth: 0\n", 787 | "Test 633 Prediction 5 Ground Truth: 5\n", 788 | "Test 634 Prediction 4 Ground Truth: 4\n", 789 | "Test 635 Prediction 9 Ground Truth: 4\n", 790 | "Test 636 Prediction 2 Ground Truth: 2\n", 791 | "Test 637 Prediction 2 Ground Truth: 2\n", 792 | "Test 638 Prediction 9 Ground Truth: 9\n", 793 | "Test 639 Prediction 8 Ground Truth: 8\n", 794 | "Test 640 Prediction 7 Ground Truth: 7\n", 795 | "Test 641 Prediction 1 Ground Truth: 1\n", 796 | "Test 642 Prediction 3 Ground Truth: 3\n", 797 | "Test 643 Prediction 3 Ground Truth: 3\n", 798 | "Test 644 Prediction 9 Ground Truth: 8\n", 799 | "Test 645 Prediction 1 Ground Truth: 1\n", 800 | "Test 646 Prediction 4 Ground Truth: 4\n", 801 | "Test 647 Prediction 4 Ground Truth: 4\n", 802 | "Test 648 Prediction 2 Ground Truth: 2\n", 803 | "Test 649 Prediction 1 Ground Truth: 1\n", 804 | "Test 650 Prediction 5 Ground Truth: 5\n", 805 | "Test 651 Prediction 1 Ground Truth: 1\n", 806 | "Test 652 Prediction 2 Ground Truth: 2\n", 807 | "Test 653 Prediction 4 Ground Truth: 4\n", 808 | "Test 654 Prediction 7 Ground Truth: 7\n", 809 | "Test 655 Prediction 1 Ground Truth: 1\n", 810 | "Test 656 Prediction 3 Ground Truth: 3\n", 811 | "Test 657 Prediction 6 Ground Truth: 6\n", 812 | "Test 658 Prediction 0 Ground Truth: 0\n", 813 | "Test 659 Prediction 6 Ground Truth: 6\n", 814 | "Test 660 Prediction 9 Ground Truth: 9\n", 815 | "Test 661 Prediction 8 Ground Truth: 8\n", 816 | "Test 662 Prediction 7 Ground Truth: 7\n", 817 | "Test 663 Prediction 7 Ground Truth: 7\n", 818 | "Test 664 Prediction 5 Ground Truth: 3\n", 819 | "Test 665 Prediction 9 Ground Truth: 9\n", 820 | "Test 666 Prediction 3 Ground Truth: 0\n", 821 | "Test 667 Prediction 6 Ground Truth: 6\n", 822 | "Test 668 Prediction 1 Ground Truth: 1\n", 823 | "Test 669 Prediction 3 Ground Truth: 3\n", 824 | "Test 670 Prediction 7 Ground Truth: 7\n", 825 | "Test 671 Prediction 1 Ground Truth: 1\n", 826 | "Test 672 Prediction 6 Ground Truth: 6\n", 827 | "Test 673 Prediction 7 Ground Truth: 7\n", 828 | "Test 674 Prediction 0 Ground Truth: 0\n", 829 | "Test 675 Prediction 2 Ground Truth: 2\n", 830 | "Test 676 Prediction 7 Ground Truth: 7\n", 831 | "Test 677 Prediction 6 Ground Truth: 6\n", 832 | "Test 678 Prediction 7 Ground Truth: 7\n", 833 | "Test 679 Prediction 7 Ground Truth: 7\n", 834 | "Test 680 Prediction 4 Ground Truth: 4\n", 835 | "Test 681 Prediction 3 Ground Truth: 3\n", 836 | "Test 682 Prediction 7 Ground Truth: 7\n", 837 | "Test 683 Prediction 4 Ground Truth: 4\n", 838 | "Test 684 Prediction 8 Ground Truth: 8\n", 839 | "Test 685 Prediction 3 Ground Truth: 3\n", 840 | "Test 686 Prediction 5 Ground Truth: 5\n", 841 | "Test 687 Prediction 8 Ground Truth: 8\n", 842 | "Test 688 Prediction 1 Ground Truth: 1\n", 843 | "Test 689 Prediction 9 Ground Truth: 9\n", 844 | "Test 690 Prediction 9 Ground Truth: 9\n", 845 | "Test 691 Prediction 6 Ground Truth: 6\n", 846 | "Test 692 Prediction 9 Ground Truth: 9\n", 847 | "Test 693 Prediction 9 Ground Truth: 9\n", 848 | "Test 694 Prediction 1 Ground Truth: 1\n", 849 | "Test 695 Prediction 8 Ground Truth: 8\n", 850 | "Test 696 Prediction 1 Ground Truth: 1\n", 851 | "Test 697 Prediction 6 Ground Truth: 6\n", 852 | "Test 698 Prediction 2 Ground Truth: 2\n", 853 | "Test 699 Prediction 6 Ground Truth: 6\n", 854 | "Test 700 Prediction 5 Ground Truth: 5\n", 855 | "Test 701 Prediction 3 Ground Truth: 3\n", 856 | "Test 702 Prediction 1 Ground Truth: 1\n", 857 | "Test 703 Prediction 6 Ground Truth: 6\n", 858 | "Test 704 Prediction 8 Ground Truth: 8\n", 859 | "Test 705 Prediction 7 Ground Truth: 7\n", 860 | "Test 706 Prediction 2 Ground Truth: 2\n", 861 | "Test 707 Prediction 7 Ground Truth: 9\n", 862 | "Test 708 Prediction 1 Ground Truth: 1\n", 863 | "Test 709 Prediction 4 Ground Truth: 4\n", 864 | "Test 710 Prediction 3 Ground Truth: 3\n", 865 | "Test 711 Prediction 9 Ground Truth: 8\n", 866 | "Test 712 Prediction 9 Ground Truth: 5\n", 867 | "Test 713 Prediction 9 Ground Truth: 9\n", 868 | "Test 714 Prediction 2 Ground Truth: 2\n", 869 | "Test 715 Prediction 1 Ground Truth: 7\n" 870 | ] 871 | }, 872 | { 873 | "name": "stdout", 874 | "output_type": "stream", 875 | "text": [ 876 | "Test 716 Prediction 3 Ground Truth: 3\n", 877 | "Test 717 Prediction 8 Ground Truth: 8\n", 878 | "Test 718 Prediction 6 Ground Truth: 6\n", 879 | "Test 719 Prediction 3 Ground Truth: 3\n", 880 | "Test 720 Prediction 8 Ground Truth: 3\n", 881 | "Test 721 Prediction 7 Ground Truth: 7\n", 882 | "Test 722 Prediction 9 Ground Truth: 9\n", 883 | "Test 723 Prediction 3 Ground Truth: 3\n", 884 | "Test 724 Prediction 7 Ground Truth: 7\n", 885 | "Test 725 Prediction 8 Ground Truth: 8\n", 886 | "Test 726 Prediction 2 Ground Truth: 2\n", 887 | "Test 727 Prediction 3 Ground Truth: 3\n", 888 | "Test 728 Prediction 5 Ground Truth: 5\n", 889 | "Test 729 Prediction 5 Ground Truth: 5\n", 890 | "Test 730 Prediction 0 Ground Truth: 0\n", 891 | "Test 731 Prediction 2 Ground Truth: 2\n", 892 | "Test 732 Prediction 2 Ground Truth: 2\n", 893 | "Test 733 Prediction 5 Ground Truth: 5\n", 894 | "Test 734 Prediction 4 Ground Truth: 4\n", 895 | "Test 735 Prediction 7 Ground Truth: 9\n", 896 | "Test 736 Prediction 2 Ground Truth: 2\n", 897 | "Test 737 Prediction 9 Ground Truth: 9\n", 898 | "Test 738 Prediction 9 Ground Truth: 9\n", 899 | "Test 739 Prediction 1 Ground Truth: 1\n", 900 | "Test 740 Prediction 2 Ground Truth: 2\n", 901 | "Test 741 Prediction 4 Ground Truth: 4\n", 902 | "Test 742 Prediction 1 Ground Truth: 1\n", 903 | "Test 743 Prediction 9 Ground Truth: 9\n", 904 | "Test 744 Prediction 6 Ground Truth: 4\n", 905 | "Test 745 Prediction 0 Ground Truth: 0\n", 906 | "Test 746 Prediction 8 Ground Truth: 8\n", 907 | "Test 747 Prediction 1 Ground Truth: 1\n", 908 | "Test 748 Prediction 9 Ground Truth: 9\n", 909 | "Test 749 Prediction 5 Ground Truth: 5\n", 910 | "Test 750 Prediction 9 Ground Truth: 9\n", 911 | "Test 751 Prediction 2 Ground Truth: 2\n", 912 | "Test 752 Prediction 2 Ground Truth: 2\n", 913 | "Test 753 Prediction 1 Ground Truth: 1\n", 914 | "Test 754 Prediction 7 Ground Truth: 7\n", 915 | "Test 755 Prediction 1 Ground Truth: 1\n", 916 | "Test 756 Prediction 3 Ground Truth: 3\n", 917 | "Test 757 Prediction 8 Ground Truth: 3\n", 918 | "Test 758 Prediction 5 Ground Truth: 8\n", 919 | "Test 759 Prediction 5 Ground Truth: 5\n", 920 | "Test 760 Prediction 0 Ground Truth: 0\n", 921 | "Test 761 Prediction 8 Ground Truth: 8\n", 922 | "Test 762 Prediction 2 Ground Truth: 2\n", 923 | "Test 763 Prediction 0 Ground Truth: 0\n", 924 | "Test 764 Prediction 9 Ground Truth: 9\n", 925 | "Test 765 Prediction 2 Ground Truth: 2\n", 926 | "Test 766 Prediction 8 Ground Truth: 8\n", 927 | "Test 767 Prediction 7 Ground Truth: 7\n", 928 | "Test 768 Prediction 1 Ground Truth: 1\n", 929 | "Test 769 Prediction 4 Ground Truth: 4\n", 930 | "Test 770 Prediction 0 Ground Truth: 0\n", 931 | "Test 771 Prediction 1 Ground Truth: 1\n", 932 | "Test 772 Prediction 8 Ground Truth: 8\n", 933 | "Test 773 Prediction 6 Ground Truth: 6\n", 934 | "Test 774 Prediction 1 Ground Truth: 1\n", 935 | "Test 775 Prediction 1 Ground Truth: 1\n", 936 | "Test 776 Prediction 2 Ground Truth: 7\n", 937 | "Test 777 Prediction 5 Ground Truth: 5\n", 938 | "Test 778 Prediction 7 Ground Truth: 7\n", 939 | "Test 779 Prediction 8 Ground Truth: 8\n", 940 | "Test 780 Prediction 7 Ground Truth: 7\n", 941 | "Test 781 Prediction 4 Ground Truth: 4\n", 942 | "Test 782 Prediction 9 Ground Truth: 9\n", 943 | "Test 783 Prediction 9 Ground Truth: 9\n", 944 | "Test 784 Prediction 0 Ground Truth: 0\n", 945 | "Test 785 Prediction 7 Ground Truth: 7\n", 946 | "Test 786 Prediction 7 Ground Truth: 7\n", 947 | "Test 787 Prediction 0 Ground Truth: 0\n", 948 | "Test 788 Prediction 0 Ground Truth: 0\n", 949 | "Test 789 Prediction 3 Ground Truth: 3\n", 950 | "Test 790 Prediction 9 Ground Truth: 9\n", 951 | "Test 791 Prediction 9 Ground Truth: 9\n", 952 | "Test 792 Prediction 8 Ground Truth: 8\n", 953 | "Test 793 Prediction 4 Ground Truth: 4\n", 954 | "Test 794 Prediction 5 Ground Truth: 3\n", 955 | "Test 795 Prediction 5 Ground Truth: 5\n", 956 | "Test 796 Prediction 4 Ground Truth: 9\n", 957 | "Test 797 Prediction 1 Ground Truth: 1\n", 958 | "Test 798 Prediction 4 Ground Truth: 4\n", 959 | "Test 799 Prediction 5 Ground Truth: 5\n", 960 | "Done!\n", 961 | "Accuracy: 0.94125\n" 962 | ] 963 | } 964 | ], 965 | "source": [ 966 | "#this is a class that runs all the tensorflow operations and launches the graph in a session. \n", 967 | "#All the operations have to be within the indentation. \n", 968 | "with tf.Session() as sess:\n", 969 | " sess.run(init) #sess.run(init), runs the variables that were initialised in the previous step and evaluates the tensor \n", 970 | " \n", 971 | "#we use for loop, to loop around all the 800 test images and for each test image and all training images we call pred which returns the index of minimum value. \n", 972 | "#using print function we print all test cases, label of index of the minimum value and the label of the actual test image.\n", 973 | " for i in range(len(Xte)):\n", 974 | " nn_index = sess.run(pred, feed_dict={xtr: Xtr, xte: Xte[i,:]})\n", 975 | " print \"Test\", i , \"Prediction\", np.argmax(Ytr[nn_index]), \"Ground Truth:\", np.argmax(Yte[i])\n", 976 | " \n", 977 | "#we then compare the predicted lablel with the actual test label and for all correctly predicted labels we calculate accuracy based on the length of the test data set. \n", 978 | " if np.argmax(Ytr[nn_index]) == np.argmax(Yte[i]):\n", 979 | " accuracy += 1./len(Xte) \n", 980 | " \n", 981 | " print \"Done!\"\n", 982 | " print \"Accuracy:\", accuracy #finally we print the accuracy." 983 | ] 984 | }, 985 | { 986 | "cell_type": "code", 987 | "execution_count": null, 988 | "metadata": { 989 | "collapsed": true 990 | }, 991 | "outputs": [], 992 | "source": [] 993 | } 994 | ], 995 | "metadata": { 996 | "kernelspec": { 997 | "display_name": "Python 2", 998 | "language": "python", 999 | "name": "python2" 1000 | }, 1001 | "language_info": { 1002 | "codemirror_mode": { 1003 | "name": "ipython", 1004 | "version": 2 1005 | }, 1006 | "file_extension": ".py", 1007 | "mimetype": "text/x-python", 1008 | "name": "python", 1009 | "nbconvert_exporter": "python", 1010 | "pygments_lexer": "ipython2", 1011 | "version": "2.7.12" 1012 | } 1013 | }, 1014 | "nbformat": 4, 1015 | "nbformat_minor": 2 1016 | } 1017 | -------------------------------------------------------------------------------- /Tensorflow Examples/README.md: -------------------------------------------------------------------------------- 1 | # Deep-Learning-examples-using-Tensorflow 2 | This repository contains Deep Learning examples using Tensorflow. This repository will be useful for Deep Learning starters who find difficulty in understanding the example codes. 3 | --------------------------------------------------------------------------------