├── CNN_MNIST.ipynb ├── Mouse_as_a_paint_ brush.py ├── README.md ├── Real_time_video.py ├── Singlelayer_MNIST.ipynb └── Twolayer_MNIST.ipynb /CNN_MNIST.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 torch\n", 12 | "import torchvision\n", 13 | "import torchvision.transforms as transforms" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": { 20 | "collapsed": true 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "batch_size=128\n", 25 | "num_classes = 10" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "metadata": { 32 | "collapsed": true 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "DATA_PATH='/home/rishi/Desktop/pytorch'" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 4, 42 | "metadata": { 43 | "collapsed": true 44 | }, 45 | "outputs": [], 46 | "source": [ 47 | "trans=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))])\n", 48 | "train_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=True,transform=trans)\n", 49 | "test_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=False,transform=trans)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 5, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "import torch.nn as nn\n", 61 | "import torch.nn.functional as F" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 6, 67 | "metadata": { 68 | "collapsed": false 69 | }, 70 | "outputs": [ 71 | { 72 | "name": "stdout", 73 | "output_type": "stream", 74 | "text": [ 75 | "469\n", 76 | "79\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)\n", 82 | "test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)\n", 83 | "print(len(train_loader))\n", 84 | "print(len(test_loader))" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 7, 90 | "metadata": { 91 | "collapsed": false 92 | }, 93 | "outputs": [], 94 | "source": [ 95 | "class Net(nn.Module):\n", 96 | " def __init__(self):\n", 97 | " super(Net,self).__init__()\n", 98 | " self.conv1=nn.Conv2d(1,16,5,padding=2)\n", 99 | " self.pool1=nn.MaxPool2d(2,2)\n", 100 | " self.conv2=nn.Conv2d(16,32,5,padding=2)\n", 101 | " self.pool2=nn.MaxPool2d(2,2)\n", 102 | " self.fc1=nn.Linear(7*7*32,120)\n", 103 | " self.fc2=nn.Linear(120,84)\n", 104 | " self.fc3=nn.Linear(84,10)\n", 105 | " \n", 106 | " def forward(self,x):\n", 107 | " x=self.pool1(F.relu(self.conv1(x)))\n", 108 | " x=self.pool2(F.relu(self.conv2(x)))\n", 109 | " x=x.view(x.size(0),-1)\n", 110 | " x=F.relu(self.fc1(x))\n", 111 | " x=F.relu(self.fc2(x))\n", 112 | " x=self.fc3(x)\n", 113 | " return x" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 8, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "Net(\n", 128 | " (conv1): Conv2d(1, 16, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n", 129 | " (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", 130 | " (conv2): Conv2d(16, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n", 131 | " (pool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", 132 | " (fc1): Linear(in_features=1568, out_features=120, bias=True)\n", 133 | " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", 134 | " (fc3): Linear(in_features=84, out_features=10, bias=True)\n", 135 | ")\n" 136 | ] 137 | } 138 | ], 139 | "source": [ 140 | "net=Net()\n", 141 | "print(net)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 9, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "import torch.optim as optim\n", 153 | "criterion=nn.CrossEntropyLoss()\n", 154 | "optimizer=optim.Adam(net.parameters(),lr=0.001)" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 10, 160 | "metadata": { 161 | "collapsed": false 162 | }, 163 | "outputs": [ 164 | { 165 | "name": "stdout", 166 | "output_type": "stream", 167 | "text": [ 168 | "[1 100] Loss=0.357203 Accuracy=91.406250\n", 169 | "[1 200] Loss=0.151398 Accuracy=94.531250\n", 170 | "[1 300] Loss=0.057213 Accuracy=97.656250\n", 171 | "[1 400] Loss=0.031816 Accuracy=99.218750\n", 172 | "[2 100] Loss=0.041490 Accuracy=98.437500\n", 173 | "[2 200] Loss=0.046299 Accuracy=99.218750\n", 174 | "[2 300] Loss=0.036663 Accuracy=99.218750\n", 175 | "[2 400] Loss=0.050328 Accuracy=98.437500\n", 176 | "[3 100] Loss=0.056603 Accuracy=97.656250\n", 177 | "[3 200] Loss=0.055060 Accuracy=97.656250\n", 178 | "[3 300] Loss=0.065720 Accuracy=98.437500\n", 179 | "[3 400] Loss=0.048457 Accuracy=99.218750\n", 180 | "[4 100] Loss=0.036769 Accuracy=97.656250\n", 181 | "[4 200] Loss=0.032634 Accuracy=99.218750\n", 182 | "[4 300] Loss=0.090610 Accuracy=96.875000\n", 183 | "[4 400] Loss=0.016334 Accuracy=99.218750\n", 184 | "[5 100] Loss=0.015022 Accuracy=100.000000\n", 185 | "[5 200] Loss=0.025100 Accuracy=99.218750\n", 186 | "[5 300] Loss=0.089474 Accuracy=99.218750\n", 187 | "[5 400] Loss=0.011465 Accuracy=99.218750\n" 188 | ] 189 | } 190 | ], 191 | "source": [ 192 | "loss_ls=[]\n", 193 | "acc_ls=[]\n", 194 | "for epoch in range(5):\n", 195 | " for i,data in enumerate(train_loader):\n", 196 | " images,labels=data\n", 197 | " outputs = net(images)\n", 198 | " loss = criterion(outputs, labels)\n", 199 | " loss_ls.append(loss.item())\n", 200 | " optimizer.zero_grad()\n", 201 | " loss.backward()\n", 202 | " optimizer.step()\n", 203 | " total = labels.size(0)\n", 204 | " predicted = torch.max(outputs.data, 1)[1]\n", 205 | " correct = (predicted == labels).sum().item()\n", 206 | " accuracy=correct/total*100\n", 207 | " acc_ls.append(accuracy)\n", 208 | "\n", 209 | " \n", 210 | " if (i+1)%100==0:\n", 211 | " print('[%d %d] Loss=%f Accuracy=%f'%(epoch+1,i+1,loss.item(),accuracy))" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 11, 217 | "metadata": { 218 | "collapsed": false 219 | }, 220 | "outputs": [ 221 | { 222 | "name": "stdout", 223 | "output_type": "stream", 224 | "text": [ 225 | "Test Acuracy= 98.92999999999999\n" 226 | ] 227 | } 228 | ], 229 | "source": [ 230 | "with torch.no_grad():\n", 231 | " correct=0\n", 232 | " total=0\n", 233 | " \n", 234 | " for images,labels in test_loader:\n", 235 | " outputs=net(images)\n", 236 | "\n", 237 | " predictions=torch.max(outputs,1)[1]\n", 238 | " correct+=(predictions==labels).sum().item()\n", 239 | " total+=labels.size(0)\n", 240 | "accuracy=correct/total*100\n", 241 | "print(\"Test Acuracy= \",accuracy) " 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 12, 247 | "metadata": { 248 | "collapsed": false 249 | }, 250 | "outputs": [ 251 | { 252 | "data": { 253 | "image/png": "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\n", 254 | "text/plain": [ 255 | "" 256 | ] 257 | }, 258 | "metadata": {}, 259 | "output_type": "display_data" 260 | }, 261 | { 262 | "data": { 263 | "image/png": "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\nECIiEun/AYqBss/+xlR9AAAAAElFTkSuQmCC\n", 264 | "text/plain": [ 265 | "" 266 | ] 267 | }, 268 | "metadata": {}, 269 | "output_type": "display_data" 270 | } 271 | ], 272 | "source": [ 273 | "import matplotlib.pyplot as plt\n", 274 | "plt.plot(loss_ls,color=\"orange\")\n", 275 | "plt.xlabel('Number of Iterations')\n", 276 | "plt.ylabel('Cost')\n", 277 | "plt.title('Cost curve')\n", 278 | "plt.show()\n", 279 | "plt.plot(acc_ls,color=\"green\")\n", 280 | "plt.xlabel('Number of Iterations')\n", 281 | "plt.ylabel('Accuracy')\n", 282 | "plt.title('Accuracy curve')\n", 283 | "plt.show()" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 14, 289 | "metadata": { 290 | "collapsed": false 291 | }, 292 | "outputs": [ 293 | { 294 | "data": { 295 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE+tJREFUeJzt3W1wVOd1B/D/2dWKFyEB4s0YE7BcQ43dhiQqydRuJxnX\nHsfjKXY7oaZ1Brs0uG2Sxpl0GpfO1GT6xZOJnTJpxy2JGXCd2HmxqUnLNDWkE8dt6iA7BL+QGEyw\nQQaEESCQ0Nvu6QddUhnrnme1d3fvlc//N8Mg7dm799FlD7ur8zzPEVUFEfmTS3sARJQOJj+RU0x+\nIqeY/EROMfmJnGLyEznF5CdyislP5BSTn8iphnqerDCpSSc1tcbG831D5vE6MFj5ySUQTzLRsZaP\nXY3zW5KOLe2f/V1IGhvNeLGpEBsb6O3G0EBvWc+IRMkvIjcB2AggD+Brqnq/df9JTa34tRvviY1P\n/0mXeb7i/oMVjHKENNg/qg4PZ/KxR05g/1tKPl/xQ2spWXZKzh5b4p/dPHngOT5Bp643XLbIjJ/5\nwCWxsb07N5Z9norf9otIHsA/AvgogGUAVovIskofj4jqK8ln/hUADqjqQVUdBPA4gJXVGRYR1VqS\n5F8A4PCo749Et72NiKwTkQ4R6Rga6E1wOiKqppr/tl9VN6lqu6q2FyY11fp0RFSmJMnfCWDhqO8v\ni24jogkgSfLvBnCliFwuIo0AbgewvTrDIqJaq7jUp6rDIvIpAN/DSKlvs6q+bB2TPzeIGf/9Rmx8\nuPPNSocTFiqHJShJhcpZuSb7444OBuY3DNnzG2paTgvQUuAOoXJcopNnt5QnkyaZcR0YiI0N/+J1\n89iWU6djY/mefntgoySq86vqDgA7kjwGEaWD03uJnGLyEznF5CdyislP5BSTn8gpJj+RU3Vdz69D\nQzWr5UvBXgOdplJfn32HWtarA3X2XKAejVzg9aFkF/q1GB/XYjHw2IF4loV+tiQPffpMbEy1/PPy\nlZ/IKSY/kVNMfiKnmPxETjH5iZxi8hM5VddSHwAgF7+0VgqVD8daIpm6Wi89tcp5gXOX+stfAlqR\nBGObyEK7IicpTeuwsQR8HJeUr/xETjH5iZxi8hM5xeQncorJT+QUk5/IKSY/kVP1r/MbyzR1MLAP\ndC3rwsb8A8Ceg6BDga2zQ0tTQ114Ay2bYdSUzZowkPia1rxDcRKBf1NT0uXEgeOtqx6c7yLVec3m\nKz+RU0x+IqeY/EROMfmJnGLyEznF5CdyislP5FSiOr+IHAJwFkARwLCqticaTYrruyVn19p10GiT\nnXTcgeOzvFdBaN16VgX/vUOtx5Oy5rsEpmZUa3DVmOTzEVV9qwqPQ0R1xLf9RE4lTX4FsFNEnheR\nddUYEBHVR9K3/depaqeIzAXwtIj8TFWfGX2H6D+FdQAwGVMTno6IqiXRK7+qdkZ/dwHYBmDFGPfZ\npKrtqtpeQKAvHBHVTcXJLyJNItJ84WsANwJ4qVoDI6LaSvK2fx6AbTKyHLUBwDdU9T+qMioiqrmK\nk19VDwJ477gOEnv9d5KaseQTrN0GoENGHT/jrD3gZXLgo1agxXbpfGBf/8C69Vxzc2xM++35C4n/\nTaxaOgLPl8AeC6G5GRJqfW608A62Lq/SfBiW+oicYvITOcXkJ3KKyU/kFJOfyCkmP5FT9d26W2u3\nlbOGljnWcLlwqKwTWpIbatecv3SeGe//lbmxsTOL7ccebrJLWvl++7o1nrPjrT94IzamgXJasZbl\n19DzJbQ9tga25q7hMmxzu/RxpBdf+YmcYvITOcXkJ3KKyU/kFJOfyCkmP5FTTH4ip+rfotsQavec\npDVx0uWh+RnTY2PF02fsY2fPMuOH71xqxj9y+24zvmbWE7GxpQW7nj1F7HkAXcU+Mx7aZfqH5xfF\nxv52x8fMY5dssa+rvHHMjBdPnYqN5abaW8qF6vQ139rbOrc1V2Yc01n4yk/kFJOfyCkmP5FTTH4i\np5j8RE4x+YmcYvITOVXXOr+IIDd5cmy81B/YJtp+8MqPLYNVyw+t53/ts0vM+I/XPGDGp+emmPGr\nf3RXbKx5W/zW2QAw+aS9Lv3cpfZT5OQKewH5P1+/JTb2yqqvmMdef9UfmPGWz9jzJ2DU+Uu9veah\nwa23a7QvRT3xlZ/IKSY/kVNMfiKnmPxETjH5iZxi8hM5xeQncipY5xeRzQBuAdClqtdEt7UC+CaA\nxQAOAVilqvFF1f9/MKBQiI8nqvPb/4/lpth121KfvW7d0nvzcjP+3Tu+ZMan55rM+LKH/tyMX77F\n2Bu/76h5rA7aK/InnT1rxmdttudXfOFja2NjX/vig+axz/76k2Z8yV1/Zsbb7jscGwuu1w/1Wgjs\nPVGr/hTVVM4r/xYAN110270AdqnqlQB2Rd8T0QQSTH5VfQZA90U3rwSwNfp6K4BbqzwuIqqxSj/z\nz1PVC+8njwGw+0kRUeYk/oWfqiqMncNEZJ2IdIhIx6Am+ExPRFVVafIfF5H5ABD93RV3R1XdpKrt\nqtreKPGLeoiovipN/u0A1kRfrwHwVHWGQ0T1Ekx+EXkMwI8ALBWRIyKyFsD9AG4Qkf0Afif6nogm\nkGCdX1VXx4SuH+/JtFRCqbfyenquKb4eXjpv/z5Bi/a69STnPnlN3jx2ScGu42/pmWvGL3+004wP\nHz5ixi25Znu9f/D4adPM+LRv/W9s7E/++A7z2H+7+lEz/v7f+rkZP2Ps8SCBfftD8z4mQh0/hDP8\niJxi8hM5xeQncorJT+QUk5/IKSY/kVP1b9GdoLexTDaW5Qa2YtaBZKU+a6vn6a/ZP1Pbt/800bmv\n6j9kxq1208GS1WCgdXlgS/RSYMlvfs6c2NisKfbYioF+06cH7C3Ntf/i9WjVk29pMePFnp6anbta\n+MpP5BSTn8gpJj+RU0x+IqeY/EROMfmJnGLyEzlV/zp/AqVzdi3fEtpqOdSS2arzz9yxzzx2+rfP\n2+duNLYzBzAcmMNg1flDgltUFxrtc7fYS3pf/fwVsbHdbfbW3QeH7ety/MlFZnwu7KXQSSTZ6j0r\n+MpP5BSTn8gpJj+RU0x+IqeY/EROMfmJnGLyEzmVwnp+e422eWigJm0KtPBOMq7i6TMVHwsAOmSv\nqQ/V8XMt8dtvh+rRDZfYbRY7V8XX6QFgzsr4NtgAcOCqf4qNbe+dbR77V9+404wv+of/MePWHIX8\n7Fbz2NKp03Y8STv5jOArP5FTTH4ip5j8RE4x+YmcYvITOcXkJ3KKyU/kVLDOLyKbAdwCoEtVr4lu\n2wDgEwBORHdbr6o7yjpjLr6dtRTs4ehQfFtkydn7y4dq6cFa++TJ8ceG2jWH5hgEhGr1uenxe8i/\n/oXfNI+947bvm/Fbmreb8em5ITO+4id3xcbyj84yj130mF3Ht9qmA/YeDMNHj5nHhoTmXkyE9f7l\nPCu3ALhpjNu/rKrLoz/lJT4RZUYw+VX1GQC1a31CRKlI8n700yKyV0Q2i8jMqo2IiOqi0uR/CEAb\ngOUAjgJ4IO6OIrJORDpEpGMICebmE1FVVZT8qnpcVYuqWgLwVQArjPtuUtV2VW0vwN4kk4jqp6Lk\nF5H5o769DcBL1RkOEdVLOaW+xwB8GMBsETkC4D4AHxaR5QAUwCEAd9dwjERUA8HkV9XVY9z8cMVn\nLBXjzzUQHwPsvfdD++5Lo73/fJK6bLDOH9DQttiMv/KXc834xhsejY29f9J3zGOfPb/QjN+281Nm\nvO3xkhmf9eNXY2Ols/vNYyH23A0UK3++5KbZcwRCku7hkAWc4UfkFJOfyCkmP5FTTH4ip5j8RE4x\n+Ymcqu/W3WKXX7Rkb59tldSSltusJbsAoAm29u77vQ+a8Xmffc2M/+KKfzXj9524Oja2/uE7zWPf\n89QJM770wE/NeGgpdMlYwm0t7x452C7lJdk+O2mpLsly4qzgKz+RU0x+IqeY/EROMfmJnGLyEznF\n5CdyislP5FR96/xq1+NDtVOrRXd4+2x7eWhwyW9PT2wsf/VS89jf/7vvmfE/bHnZjLf951+Y8aV/\nfz42tmDvc+axxUAtPXTdQltY62D8PABrzgcAlPoTjm3atPhxnY+/ZkD4+ZSoXXxG8JWfyCkmP5FT\nTH4ip5j8RE4x+YmcYvITOcXkJ3KqvnX+gOD22Uar69DW3SFFo44f8rO7Z5jxbTPsLaq/c+49ZnzO\nLnsOgnS+ER9776+ax+b67Hq1Btqm53rtejmMtuo6xf43y00NxLvPmvHhw0fMuH3uQAvuftb5iWiC\nYvITOcXkJ3KKyU/kFJOfyCkmP5FTTH4ip4J1fhFZCOARAPMAKIBNqrpRRFoBfBPAYgCHAKxS1VOB\nxzL3xw/uw65Ge+9Bu1U0Euy7DwANi+JbWf/utc+bx/aVhsz4HzWfNOO9658y41dsOB4bm5Gz6/A/\n7Ftixj80xe4p0K8FMx46v+V0aYoZv+v7a834VX8df+7iW/Y1DwrtgzABlPPKPwzgc6q6DMCHAHxS\nRJYBuBfALlW9EsCu6HsimiCCya+qR1X1hejrswD2AVgAYCWArdHdtgK4tVaDJKLqG9dnfhFZDOB9\nAJ4DME9Vj0ahYxj5WEBEE0TZyS8i0wA8AeAeVX3bRHgdaWQ35odqEVknIh0i0jGIiT8fmujdoqzk\nF5ECRhL/66r6ZHTzcRGZH8XnA+ga61hV3aSq7ara3ohki2+IqHqCyS8iAuBhAPtU9cFRoe0A1kRf\nrwFg/0qaiDKlnCW91wL4OIAXRWRPdNt6APcD+JaIrAXwOoBVoQdS1URtlQMPXpvHvcBoH/7dH7Sb\nhx75DXvJb0POLlMe620x43Onxi9tHSwGtseGvf11Z/NMM/5Cd3wJFACKpfjXl0LeLpdNabBLpJPe\ntMuM2ld5mTHXav/cweXnE0Aw+VX1WSD2GXJ9dYdDRPXCGX5ETjH5iZxi8hM5xeQncorJT+QUk5/I\nKdFa18dHaZFW/aBUXh1Mshw41A461JJZCvHbZ+fnzjaPHe5804yHtokOsdpgW9udA0CuyV42Gzq+\neMpcxW3Kt9jzF2SqPbbS6TN2PMGckqTPl7Q8p7vQo9325I0IX/mJnGLyEznF5CdyislP5BSTn8gp\nJj+RU0x+Iqfq26JbxGylrQOBdtEJaqtaTLbVcm5K/ByDUB0/JNTuWfJ5M25dl1Dr8tK53oofGyij\nlXWCde/Dx+K3JC9HflZrbKx4yp4jkObPXS985SdyislP5BSTn8gpJj+RU0x+IqeY/EROMfmJnKpv\nnV/VXnseII3xa+qDcwAC+xaE6uHFnp7YmLXWHwB0KPAzB9o9a4J20KG5E0klqWdb17Qaiie7a/bY\nadbxzb0GxjEVhq/8RE4x+YmcYvITOcXkJ3KKyU/kFJOfyCkmP5FTwTq/iCwE8AiAeQAUwCZV3Sgi\nGwB8AsCJ6K7rVXVH8IwJ+gSUzhv91iWwVXlg//ngmnkrFqrjkzuh9f7WfJd69QQoZ5LPMIDPqeoL\nItIM4HkReTqKfVlVv1S74RFRrQSTX1WPAjgafX1WRPYBWFDrgRFRbY3rM7+ILAbwPgDPRTd9WkT2\nishmEZkZc8w6EekQkY4h1HaqKRGVr+zkF5FpAJ4AcI+q9gB4CEAbgOUYeWfwwFjHqeomVW1X1fYC\n7PnzRFQ/ZSW/iBQwkvhfV9UnAUBVj6tqUVVLAL4KYEXthklE1RZMfhERAA8D2KeqD466ff6ou90G\n4KXqD4+IaqWc3/ZfC+DjAF4UkT3RbesBrBaR5Ripgh0CcHfogaSxgIZLLouNDx8+Yj+AUSYMLatF\nzi4FJt3am2g0HbLLdUnKebnm5tiYnLFL1qOV89v+ZwGMlTnhmj4RZRZn+BE5xeQncorJT+QUk5/I\nKSY/kVNMfiKn6rp1d3FqAWc/cGlsvKn7lHl8qTe+nXSwTj9Uuzq+uZUy6rdEkzJES2bYes7kjNbi\nANB9Q1tsbPjf41vJv+M8Zd+TiN5VmPxETjH5iZxi8hM5xeQncorJT+QUk5/IKdEEW2mP+2QiJwC8\nPuqm2QDeqtsAxierY8vquACOrVLVHNsiVZ1Tzh3rmvzvOLlIh6q2pzYAQ1bHltVxARxbpdIaG9/2\nEznF5CdyKu3k35Ty+S1ZHVtWxwVwbJVKZWypfuYnovSk/cpPRClJJflF5CYR+bmIHBCRe9MYQxwR\nOSQiL4rIHhHpSHksm0WkS0ReGnVbq4g8LSL7o7/HbJOW0tg2iEhndO32iMjNKY1toYj8l4i8IiIv\ni8hnottTvXbGuFK5bnV/2y8ieQCvArgBwBEAuwGsVtVX6jqQGCJyCEC7qqZeExaR3wZwDsAjqnpN\ndNsXAXSr6v3Rf5wzVfXzGRnbBgDn0u7cHDWUmT+6szSAWwHciRSvnTGuVUjhuqXxyr8CwAFVPaiq\ngwAeB7AyhXFknqo+A6D7optXAtgafb0VI0+euosZWyao6lFVfSH6+iyAC52lU712xrhSkUbyLwBw\neNT3R5Ctlt8KYKeIPC8i69IezBjmRW3TAeAYgHlpDmYMwc7N9XRRZ+nMXLtKOl5XG3/h907Xqepy\nAB8F8Mno7W0m6chntiyVa8rq3FwvY3SW/qU0r12lHa+rLY3k7wSwcNT3l0W3ZYKqdkZ/dwHYhux1\nHz5+oUlq9HdXyuP5pSx1bh6rszQycO2y1PE6jeTfDeBKEblcRBoB3A5gewrjeAcRaYp+EQMRaQJw\nI7LXfXg7gDXR12sAPJXiWN4mK52b4zpLI+Vrl7mO16pa9z8AbsbIb/xfA/A3aYwhZlxtAH4a/Xk5\n7bEBeAwjbwOHMPK7kbUAZgHYBWA/gJ0AWjM0tn8B8CKAvRhJtPkpje06jLyl3wtgT/Tn5rSvnTGu\nVK4bZ/gROcVf+BE5xeQncorJT+QUk5/IKSY/kVNMfiKnmPxETjH5iZz6P5UctU7qeOq4AAAAAElF\nTkSuQmCC\n", 296 | "text/plain": [ 297 | "" 298 | ] 299 | }, 300 | "metadata": {}, 301 | "output_type": "display_data" 302 | }, 303 | { 304 | "name": "stdout", 305 | "output_type": "stream", 306 | "text": [ 307 | "It is a 2\n" 308 | ] 309 | } 310 | ], 311 | "source": [ 312 | "from PIL import Image\n", 313 | "pil_image = Image.open('2(1).jpg')\n", 314 | "pil_tensor = transforms.ToTensor()\n", 315 | "plt.imshow(pil_image)\n", 316 | "plt.show()\n", 317 | "imag=pil_tensor(pil_image)\n", 318 | "#print(imag.size())\n", 319 | "imag=imag.unsqueeze(0)\n", 320 | "#print(imag.size())\n", 321 | "output=net(imag)\n", 322 | "prediction=torch.max(output,1)[1]\n", 323 | "print(\"It is a \",prediction.item())" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 15, 329 | "metadata": { 330 | "collapsed": false 331 | }, 332 | "outputs": [ 333 | { 334 | "data": { 335 | "image/png": "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\n", 336 | "text/plain": [ 337 | "" 338 | ] 339 | }, 340 | "metadata": {}, 341 | "output_type": "display_data" 342 | }, 343 | { 344 | "name": "stdout", 345 | "output_type": "stream", 346 | "text": [ 347 | "It is a 3\n" 348 | ] 349 | } 350 | ], 351 | "source": [ 352 | "from PIL import Image\n", 353 | "pil_image = Image.open('3.jpg')\n", 354 | "pil_tensor = transforms.ToTensor()\n", 355 | "pil_Greyscale=transforms.Grayscale()\n", 356 | "imag=pil_Greyscale(pil_image)\n", 357 | "plt.imshow(imag)\n", 358 | "plt.show()\n", 359 | "imag=pil_tensor(imag)\n", 360 | "#print(imag.size())\n", 361 | "imag=imag.unsqueeze(0)\n", 362 | "#print(imag.size())\n", 363 | "output=net(imag)\n", 364 | "prediction=torch.max(output,1)[1]\n", 365 | "print(\"It is a \",prediction.item())" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": 16, 371 | "metadata": { 372 | "collapsed": false 373 | }, 374 | "outputs": [ 375 | { 376 | "data": { 377 | "image/png": "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\nLN0AAAAASUVORK5CYII=\n", 378 | "text/plain": [ 379 | "" 380 | ] 381 | }, 382 | "metadata": {}, 383 | "output_type": "display_data" 384 | }, 385 | { 386 | "name": "stdout", 387 | "output_type": "stream", 388 | "text": [ 389 | "It is a 6\n" 390 | ] 391 | } 392 | ], 393 | "source": [ 394 | "from PIL import Image\n", 395 | "image = Image.open('6(3).jpg')\n", 396 | "trans1=transforms.Grayscale()\n", 397 | "trans2=transforms.ToTensor()\n", 398 | "fig=trans1(image)\n", 399 | "plt.imshow(fig)\n", 400 | "plt.show()\n", 401 | "fig=trans2(fig)\n", 402 | "#fig=trans2(fig)\n", 403 | "#print(fig.size())\n", 404 | "fig=fig.unsqueeze(0)\n", 405 | "#print(fig.size())\n", 406 | "output=net(fig)\n", 407 | "prediction=torch.max(output,1)[1]\n", 408 | "print(\"It is a \",prediction.item())" 409 | ] 410 | }, 411 | { 412 | "cell_type": "code", 413 | "execution_count": 17, 414 | "metadata": { 415 | "collapsed": false 416 | }, 417 | "outputs": [ 418 | { 419 | "data": { 420 | "image/png": "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\n", 421 | "text/plain": [ 422 | "" 423 | ] 424 | }, 425 | "metadata": {}, 426 | "output_type": "display_data" 427 | }, 428 | { 429 | "name": "stdout", 430 | "output_type": "stream", 431 | "text": [ 432 | "It is a 5\n" 433 | ] 434 | } 435 | ], 436 | "source": [ 437 | "from PIL import Image\n", 438 | "pil_image = Image.open('551.jpg')\n", 439 | "pil_tensor = transforms.ToTensor()\n", 440 | "pil_Greyscale=transforms.Grayscale()\n", 441 | "imag=pil_Greyscale(pil_image)\n", 442 | "plt.imshow(imag)\n", 443 | "plt.show()\n", 444 | "imag=pil_tensor(imag)\n", 445 | "#print(imag.size())\n", 446 | "imag=imag.unsqueeze(0)\n", 447 | "#print(imag.size())\n", 448 | "output=net(imag)\n", 449 | "prediction=torch.max(output,1)[1]\n", 450 | "print(\"It is a \",prediction.item())" 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "execution_count": 18, 456 | "metadata": { 457 | "collapsed": false 458 | }, 459 | "outputs": [ 460 | { 461 | "data": { 462 | "image/png": "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\n", 463 | "text/plain": [ 464 | "" 465 | ] 466 | }, 467 | "metadata": {}, 468 | "output_type": "display_data" 469 | }, 470 | { 471 | "name": "stdout", 472 | "output_type": "stream", 473 | "text": [ 474 | "It is a 0\n" 475 | ] 476 | } 477 | ], 478 | "source": [ 479 | "from PIL import Image\n", 480 | "pil_image = Image.open('0(2).jpg')\n", 481 | "pil_tensor = transforms.ToTensor()\n", 482 | "pil_Greyscale=transforms.Grayscale()\n", 483 | "imag=pil_Greyscale(pil_image)\n", 484 | "plt.imshow(imag)\n", 485 | "plt.show()\n", 486 | "imag=pil_tensor(imag)\n", 487 | "#print(imag.size())\n", 488 | "imag=imag.unsqueeze(0)\n", 489 | "#print(imag.size())\n", 490 | "output=net(imag)\n", 491 | "prediction=torch.max(output,1)[1]\n", 492 | "print(\"It is a \",prediction.item())" 493 | ] 494 | }, 495 | { 496 | "cell_type": "code", 497 | "execution_count": 19, 498 | "metadata": { 499 | "collapsed": false 500 | }, 501 | "outputs": [ 502 | { 503 | "data": { 504 | "image/png": "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\ngg==\n", 505 | "text/plain": [ 506 | "" 507 | ] 508 | }, 509 | "metadata": {}, 510 | "output_type": "display_data" 511 | }, 512 | { 513 | "name": "stdout", 514 | "output_type": "stream", 515 | "text": [ 516 | "It is a 4\n" 517 | ] 518 | } 519 | ], 520 | "source": [ 521 | "from PIL import Image\n", 522 | "pil_image = Image.open('41.jpg')\n", 523 | "pil_tensor = transforms.ToTensor()\n", 524 | "pil_Greyscale=transforms.Grayscale()\n", 525 | "imag=pil_Greyscale(pil_image)\n", 526 | "plt.imshow(imag)\n", 527 | "plt.show()\n", 528 | "imag=pil_tensor(imag)\n", 529 | "#print(imag.size())\n", 530 | "imag=imag.unsqueeze(0)\n", 531 | "#print(imag.size())\n", 532 | "output=net(imag)\n", 533 | "prediction=torch.max(output,1)[1]\n", 534 | "print(\"It is a \",prediction.item())" 535 | ] 536 | }, 537 | { 538 | "cell_type": "code", 539 | "execution_count": 20, 540 | "metadata": { 541 | "collapsed": false 542 | }, 543 | "outputs": [ 544 | { 545 | "data": { 546 | "image/png": "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\nrkJggg==\n", 547 | "text/plain": [ 548 | "" 549 | ] 550 | }, 551 | "metadata": {}, 552 | "output_type": "display_data" 553 | }, 554 | { 555 | "name": "stdout", 556 | "output_type": "stream", 557 | "text": [ 558 | "It is a 8\n" 559 | ] 560 | } 561 | ], 562 | "source": [ 563 | "from PIL import Image\n", 564 | "pil_image = Image.open('8(1).jpg')\n", 565 | "pil_tensor = transforms.ToTensor()\n", 566 | "pil_Greyscale=transforms.Grayscale()\n", 567 | "imag=pil_Greyscale(pil_image)\n", 568 | "plt.imshow(imag)\n", 569 | "plt.show()\n", 570 | "imag=pil_tensor(imag)\n", 571 | "#print(imag.size())\n", 572 | "imag=imag.unsqueeze(0)\n", 573 | "#print(imag.size())\n", 574 | "output=net(imag)\n", 575 | "prediction=torch.max(output,1)[1]\n", 576 | "print(\"It is a \",prediction.item())" 577 | ] 578 | }, 579 | { 580 | "cell_type": "code", 581 | "execution_count": 21, 582 | "metadata": { 583 | "collapsed": false 584 | }, 585 | "outputs": [ 586 | { 587 | "data": { 588 | "image/png": "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\nAElFTkSuQmCC\n", 589 | "text/plain": [ 590 | "" 591 | ] 592 | }, 593 | "metadata": {}, 594 | "output_type": "display_data" 595 | }, 596 | { 597 | "name": "stdout", 598 | "output_type": "stream", 599 | "text": [ 600 | "It is a 9\n" 601 | ] 602 | } 603 | ], 604 | "source": [ 605 | "from PIL import Image\n", 606 | "pil_image = Image.open('9111.jpg')\n", 607 | "pil_tensor = transforms.ToTensor()\n", 608 | "pil_Greyscale=transforms.Grayscale()\n", 609 | "imag=pil_Greyscale(pil_image)\n", 610 | "plt.imshow(imag)\n", 611 | "plt.show()\n", 612 | "imag=pil_tensor(imag)\n", 613 | "#print(imag.size())\n", 614 | "imag=imag.unsqueeze(0)\n", 615 | "#print(imag.size())\n", 616 | "output=net(imag)\n", 617 | "prediction=torch.max(output,1)[1]\n", 618 | "print(\"It is a \",prediction.item())" 619 | ] 620 | }, 621 | { 622 | "cell_type": "code", 623 | "execution_count": null, 624 | "metadata": { 625 | "collapsed": false 626 | }, 627 | "outputs": [], 628 | "source": [] 629 | } 630 | ], 631 | "metadata": { 632 | "kernelspec": { 633 | "display_name": "Python 3", 634 | "language": "python", 635 | "name": "python3" 636 | }, 637 | "language_info": { 638 | "codemirror_mode": { 639 | "name": "ipython", 640 | "version": 3 641 | }, 642 | "file_extension": ".py", 643 | "mimetype": "text/x-python", 644 | "name": "python", 645 | "nbconvert_exporter": "python", 646 | "pygments_lexer": "ipython3", 647 | "version": "3.6.6" 648 | } 649 | }, 650 | "nbformat": 4, 651 | "nbformat_minor": 2 652 | } 653 | -------------------------------------------------------------------------------- /Mouse_as_a_paint_ brush.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torchvision 3 | import torchvision.transforms as transforms 4 | import torch.nn as nn 5 | import torch.nn.functional as F 6 | import cv2 7 | import numpy as np 8 | 9 | 10 | batch_size=128 11 | num_classes = 10 12 | 13 | DATA_PATH='/home/rishi/Desktop/pytorch' 14 | trans=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))]) 15 | train_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=True,transform=trans,download=False) 16 | test_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=False,transform=trans,download=False) 17 | 18 | train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) 19 | test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) 20 | print(len(train_loader)) 21 | print(len(test_loader)) 22 | 23 | 24 | class Net(nn.Module): 25 | def __init__(self): 26 | super(Net, self).__init__() 27 | self.conv1 = nn.Conv2d(1, 16, 5, padding=2) 28 | self.pool1 = nn.MaxPool2d(2, 2) 29 | self.conv2 = nn.Conv2d(16, 32, 5, padding=2) 30 | self.pool2 = nn.MaxPool2d(2, 2) 31 | self.fc1 = nn.Linear(7 * 7 * 32, 120) 32 | self.fc2 = nn.Linear(120, 84) 33 | self.fc3 = nn.Linear(84, 10) 34 | 35 | def forward(self, x): 36 | x = self.pool1(F.relu(self.conv1(x))) 37 | x = self.pool2(F.relu(self.conv2(x))) 38 | x = x.view(x.size(0), -1) 39 | x = F.relu(self.fc1(x)) 40 | x = F.relu(self.fc2(x)) 41 | x = self.fc3(x) 42 | return x 43 | 44 | 45 | net=Net() 46 | net = net.double() 47 | 48 | print(net) 49 | 50 | import torch.optim as optim 51 | criterion=nn.CrossEntropyLoss() 52 | optimizer=optim.Adam(net.parameters(),lr=0.001) 53 | 54 | loss_ls = [] 55 | acc_ls = [] 56 | for epoch in range(4): 57 | for i, data in enumerate(train_loader): 58 | images, labels = data 59 | outputs = net(images.double()) 60 | loss = criterion(outputs, labels) 61 | loss_ls.append(loss.item()) 62 | optimizer.zero_grad() 63 | loss.backward() 64 | optimizer.step() 65 | total = labels.size(0) 66 | predicted = torch.max(outputs.data, 1)[1] 67 | correct = (predicted == labels).sum().item() 68 | accuracy = correct / total * 100 69 | acc_ls.append(accuracy) 70 | 71 | if (i + 1) % 100 == 0: 72 | print('[%d %d] Loss=%f Accuracy=%f' % (epoch + 1, i + 1, loss.item(), accuracy)) 73 | 74 | with torch.no_grad(): 75 | correct = 0 76 | total = 0 77 | 78 | for images, labels in test_loader: 79 | outputs = net(images.double()) 80 | 81 | predictions = torch.max(outputs, 1)[1] 82 | correct += (predictions == labels).sum().item() 83 | total += labels.size(0) 84 | accuracy = correct / total * 100 85 | print("Test Acuracy= ", accuracy) 86 | 87 | while(1): 88 | drawing = False # true if mouse is pressed 89 | ix, iy = -1, -1 90 | 91 | 92 | def draw_circle(event, x, y, flags, param): 93 | global ix, iy, drawing, mode 94 | 95 | if event == cv2.EVENT_LBUTTONDOWN: 96 | drawing = True 97 | ix, iy = x, y 98 | 99 | elif event == cv2.EVENT_MOUSEMOVE: 100 | if drawing == True: 101 | 102 | cv2.circle(img, (x, y),1, (255, 255, 255), -1) 103 | 104 | elif event == cv2.EVENT_LBUTTONUP: 105 | drawing = False 106 | cv2.circle(img, (x, y), 1, (255, 255, 255), -1) 107 | 108 | img = np.zeros((28, 28, 3), np.uint8) 109 | cv2.namedWindow('image') 110 | cv2.setMouseCallback('image', draw_circle) 111 | 112 | while (1): 113 | cv2.imshow('image', img) 114 | k = cv2.waitKey(1) & 0xFF 115 | if k == ord('s'): 116 | cv2.imwrite('number.png', img) 117 | elif k == 27: 118 | break 119 | 120 | # cv2.destroyAllWindows() 121 | 122 | img = cv2.imread('number.png') 123 | resized = cv2.resize(img, (28, 28)) 124 | #print(resized.shape) 125 | #cv2.imshow("Resized image", resized) 126 | #cv2.waitKey(0) 127 | #cv2.destroyAllWindows() 128 | 129 | gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) 130 | #cv2.imshow('Gray image', gray) 131 | #cv2.waitKey(0) 132 | #cv2.destroyAllWindows() 133 | #print(gray.shape) 134 | 135 | x = gray 136 | 137 | # print(x.dtype) 138 | # print(x) 139 | 140 | y = np.zeros((x.shape[0], x.shape[1])) 141 | y = y + x 142 | 143 | # print(y) 144 | y = torch.from_numpy(y) 145 | #print(y.size()) 146 | y = y.unsqueeze(0) 147 | #print(y.size()) 148 | y = y.unsqueeze(0) 149 | #print(y.size()) 150 | output = net(y.double()) 151 | prediction = torch.max(output, 1)[1] 152 | # print("My prediction: ", prediction.item()) 153 | result = prediction.item() 154 | font = cv2.FONT_HERSHEY_SIMPLEX 155 | F_Result = np.ones((250, 250)) * 255 156 | text="My prediction : " + str(result) 157 | F_Result=cv2.putText(F_Result,text,(10,50),font,0.5,(0,0,0),1,cv2.LINE_AA) 158 | cv2.imshow('Result', F_Result) 159 | cv2.waitKey(0) 160 | # cv2.destroyAllWindows() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Real_time_video.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torchvision 3 | import torchvision.transforms as transforms 4 | import torch.nn as nn 5 | import torch.nn.functional as F 6 | import cv2 7 | import numpy as np 8 | 9 | 10 | batch_size=128 11 | num_classes = 10 12 | 13 | DATA_PATH='/home/rishi/Desktop/pytorch' 14 | trans=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))]) 15 | train_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=True,transform=trans,download=False) 16 | test_dataset=torchvision.datasets.MNIST(root=DATA_PATH,train=False,transform=trans,download=False) 17 | 18 | train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) 19 | test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) 20 | print(len(train_loader)) 21 | print(len(test_loader)) 22 | 23 | 24 | class Net(nn.Module): 25 | def __init__(self): 26 | super(Net, self).__init__() 27 | self.conv1 = nn.Conv2d(1, 16, 5, padding=2) 28 | self.pool1 = nn.MaxPool2d(2, 2) 29 | self.conv2 = nn.Conv2d(16, 32, 5, padding=2) 30 | self.pool2 = nn.MaxPool2d(2, 2) 31 | self.fc1 = nn.Linear(7 * 7 * 32, 120) 32 | self.fc2 = nn.Linear(120, 84) 33 | self.fc3 = nn.Linear(84, 10) 34 | 35 | def forward(self, x): 36 | x = self.pool1(F.relu(self.conv1(x))) 37 | x = self.pool2(F.relu(self.conv2(x))) 38 | x = x.view(x.size(0), -1) 39 | x = F.relu(self.fc1(x)) 40 | x = F.relu(self.fc2(x)) 41 | x = self.fc3(x) 42 | return x 43 | 44 | 45 | net=Net() 46 | net = net.double() 47 | 48 | print(net) 49 | 50 | import torch.optim as optim 51 | criterion=nn.CrossEntropyLoss() 52 | optimizer=optim.Adam(net.parameters(),lr=0.001) 53 | 54 | loss_ls = [] 55 | acc_ls = [] 56 | for epoch in range(4): 57 | for i, data in enumerate(train_loader): 58 | images, labels = data 59 | outputs = net(images.double()) 60 | loss = criterion(outputs, labels) 61 | loss_ls.append(loss.item()) 62 | optimizer.zero_grad() 63 | loss.backward() 64 | optimizer.step() 65 | total = labels.size(0) 66 | predicted = torch.max(outputs.data, 1)[1] 67 | correct = (predicted == labels).sum().item() 68 | accuracy = correct / total * 100 69 | acc_ls.append(accuracy) 70 | 71 | if (i + 1) % 100 == 0: 72 | print('[%d %d] Loss=%f Accuracy=%f' % (epoch + 1, i + 1, loss.item(), accuracy)) 73 | 74 | #with torch.no_grad(): 75 | ##total = 0 76 | 77 | #for images, labels in test_loader: 78 | # outputs = net(images.double()) 79 | 80 | #predictions = torch.max(outputs, 1)[1] 81 | #correct += (predictions == labels).sum().item() 82 | #total += labels.size(0) 83 | #accuracy = correct / total * 100 84 | #print("Test Acuracy= ", accuracy) 85 | 86 | while True: 87 | centroids = [] 88 | cap = cv2.VideoCapture(0) 89 | kernel = np.ones((5, 5), np.uint8) 90 | image = np.zeros((450,640, 3), np.uint8) 91 | # cv2.namedWindow('image') 92 | while (1): 93 | 94 | _, frame = cap.read() 95 | # print(frame.shape) 96 | cv2.flip(frame, 1) 97 | blurred_frame = cv2.GaussianBlur(frame, (5, 5), 0) 98 | hsv = cv2.cvtColor(blurred_frame, cv2.COLOR_BGR2HSV) 99 | lower_blue = np.array([110, 50, 50]) 100 | upper_blue = np.array([130, 255, 255]) 101 | white = np.array([255, 255, 255]) 102 | mask = cv2.inRange(hsv, lower_blue, upper_blue) 103 | mask1 = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) 104 | contours, hierarchy = cv2.findContours(mask1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 105 | contour_sizes = [(cv2.contourArea(contour), contour) for contour in contours] 106 | biggest_contour = max(contour_sizes, key=lambda x: x[0])[1] 107 | (x, y), radius = cv2.minEnclosingCircle(biggest_contour) 108 | center = (int(x), int(y)) 109 | radius = int(radius) 110 | img = cv2.circle(frame, center, radius, (255, 0, 0), 2) 111 | M = cv2.moments(mask) 112 | cx = int(M['m10'] / M['m00']) 113 | cy = int(M['m01'] / M['m00']) 114 | cv2.circle(frame, (cx, cy), 10, (0, 0, 255), -1) 115 | centroid = (cx, cy) 116 | centroids.append(centroid) 117 | for center in centroids: 118 | x, y = center 119 | cv2.circle(frame, (x, y), 10, (0, 0, 255), -1) 120 | cv2.circle(image, (x, y),10, (255, 255, 255), -1) 121 | 122 | cv2.imshow('frame', frame) 123 | # cv2.imshow('mask',mask1) 124 | cv2.imshow('My Number',image) 125 | # cv2.imshow('res',res) 126 | 127 | k = cv2.waitKey(5) & 0xFF 128 | if k == 27: 129 | cv2.imwrite('number.png', image) 130 | 131 | break 132 | # cap.release() 133 | # cv2.destroyAllWindows() 134 | 135 | img = cv2.imread('number.png') 136 | resized = cv2.resize(img, (28, 28)) 137 | # print(resized.shape) 138 | # cv2.imshow("Resized image", resized) 139 | # cv2.waitKey(0) 140 | # cv2.destroyAllWindows() 141 | 142 | gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) 143 | # cv2.imshow('Gray image', gray) 144 | # cv2.waitKey(0) 145 | # cv2.destroyAllWindows() 146 | # print(gray.shape) 147 | 148 | x = gray 149 | 150 | # print(x.dtype) 151 | # print(x) 152 | 153 | y = np.zeros((x.shape[0], x.shape[1])) 154 | y = y + x 155 | 156 | # print(y) 157 | y = torch.from_numpy(y) 158 | # print(y.size()) 159 | y = y.unsqueeze(0) 160 | # print(y.size()) 161 | y = y.unsqueeze(0) 162 | # print(y.size()) 163 | output = net(y.double()) 164 | prediction = torch.max(output, 1)[1] 165 | print("My prediction: ", prediction.item()) 166 | result = prediction.item() 167 | font = cv2.FONT_HERSHEY_SIMPLEX 168 | F_Result = np.ones((250, 250)) * 255 169 | text = "My prediction : " + str(result) 170 | F_Result = cv2.putText(F_Result, text, (10, 50), font, 0.5, (0, 0, 0), 1, cv2.LINE_AA) 171 | cv2.imshow('Result', F_Result) 172 | cv2.waitKey(0) 173 | cap.release() 174 | -------------------------------------------------------------------------------- /Singlelayer_MNIST.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "(784, 50000)\n", 15 | "(50000,)\n", 16 | "(1, 50000)\n", 17 | "(10, 50000)\n", 18 | "[5 0 4 ..., 8 4 8]\n" 19 | ] 20 | } 21 | ], 22 | "source": [ 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import pickle as cPickle\n", 26 | "import gzip\n", 27 | "\n", 28 | "data = gzip.open(\"mnist.pkl.gz\")\n", 29 | "train_data, validation_data, test_data = cPickle.load(data,encoding=\"latin1\")\n", 30 | "X=train_data[0]\n", 31 | "X=X.T\n", 32 | "Y=train_data[1]\n", 33 | "Y=Y.T\n", 34 | "print(X.shape)\n", 35 | "print(Y.shape)\n", 36 | "Y=Y.reshape(1,Y.shape[0])\n", 37 | "print(Y.shape)\n", 38 | "Y=np.squeeze(Y)\n", 39 | "n_Y=np.max(Y)+1\n", 40 | "y=np.eye(n_Y)[Y]\n", 41 | "Y=y.T\n", 42 | "print(Y.shape)\n", 43 | "print(np.argmax(Y,axis=0))" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": true 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "def softmax(x):\n", 55 | " t=np.exp(x)\n", 56 | " q=np.sum(t,axis=0,keepdims=True)\n", 57 | " return t/q" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 3, 63 | "metadata": { 64 | "collapsed": true 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "def initialise_parameters(X,Y):\n", 69 | " W=np.random.randn(Y.shape[0],X.shape[0])*0.01\n", 70 | " b=np.zeros((Y.shape[0],1))\n", 71 | " return W,b" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 4, 77 | "metadata": { 78 | "collapsed": true 79 | }, 80 | "outputs": [], 81 | "source": [ 82 | "def forward_prop(W, b, X):\n", 83 | " Z=np.dot(W,X)+b\n", 84 | " A=softmax(Z)\n", 85 | " return A" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 5, 91 | "metadata": { 92 | "collapsed": true 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "def compute_cost(Y, A):\n", 97 | " m=Y.shape[1]\n", 98 | " cost=np.sum(-1*(Y*np.log(A)))/Y.shape[1]\n", 99 | " return cost" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 6, 105 | "metadata": { 106 | "collapsed": true 107 | }, 108 | "outputs": [], 109 | "source": [ 110 | "def update(W, A, X, Y, b, lr):\n", 111 | " m = Y.shape[1]\n", 112 | " dZ = A - Y\n", 113 | " dW = np.dot(dZ, X.T) / m\n", 114 | " db = np.sum(dZ, axis=1, keepdims=True) / m\n", 115 | " W -= lr*dW\n", 116 | " b -= lr*db\n", 117 | " return W, b" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 7, 123 | "metadata": { 124 | "collapsed": true 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "def accuracy(X,W,b,Y):\n", 129 | " Q=np.argmax(Y,axis=0)\n", 130 | " R=forward_prop(W,b,X)\n", 131 | " R=np.argmax(R,axis=0)\n", 132 | " count=0\n", 133 | " for i in range(Y.shape[1]):\n", 134 | " if Q[i]==R[i]:\n", 135 | " count+=1\n", 136 | " accuracy=count/Y.shape[1]*100\n", 137 | " return accuracy" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 8, 143 | "metadata": { 144 | "collapsed": true 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "def model(X,Y,num_iterations,learning_rate):\n", 149 | " costs= []\n", 150 | " acc =[]\n", 151 | " W,b=initialise_parameters(X,Y)\n", 152 | " for i in range(num_iterations):\n", 153 | " A=forward_prop(W,b,X)\n", 154 | " cost=compute_cost(Y,A)\n", 155 | " acc.append(accuracy(X,W,b,Y))\n", 156 | " W,b=update(W, A, X, Y, b,learning_rate)\n", 157 | " costs.append(cost)\n", 158 | " if i%100==0:\n", 159 | " print(\"After iteration %i cost: %f and accuracy:%f\" %(i,cost,accuracy(X,W,b,Y)))\n", 160 | " \n", 161 | " return W,b,costs,acc" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 9, 167 | "metadata": { 168 | "collapsed": false 169 | }, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "After iteration 0 cost: 2.306910 and accuracy:36.924000\n", 176 | "After iteration 100 cost: 0.617589 and accuracy:85.940000\n", 177 | "After iteration 200 cost: 0.496520 and accuracy:87.606000\n", 178 | "After iteration 300 cost: 0.446617 and accuracy:88.386000\n", 179 | "After iteration 400 cost: 0.417839 and accuracy:88.916000\n", 180 | "After iteration 500 cost: 0.398539 and accuracy:89.312000\n", 181 | "After iteration 600 cost: 0.384426 and accuracy:89.560000\n", 182 | "After iteration 700 cost: 0.373512 and accuracy:89.788000\n", 183 | "After iteration 800 cost: 0.364735 and accuracy:89.964000\n", 184 | "After iteration 900 cost: 0.357470 and accuracy:90.138000\n" 185 | ] 186 | } 187 | ], 188 | "source": [ 189 | "W,b,costs,accuracies=model(X,Y,num_iterations=1000,learning_rate=0.1)" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 10, 195 | "metadata": { 196 | "collapsed": false 197 | }, 198 | "outputs": [ 199 | { 200 | "data": { 201 | "image/png": "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\n5P8DB3iT3n+q3ecAAAAASUVORK5CYII=\n", 202 | "text/plain": [ 203 | "" 204 | ] 205 | }, 206 | "metadata": {}, 207 | "output_type": "display_data" 208 | }, 209 | { 210 | "data": { 211 | "image/png": "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\n", 212 | "text/plain": [ 213 | "" 214 | ] 215 | }, 216 | "metadata": {}, 217 | "output_type": "display_data" 218 | } 219 | ], 220 | "source": [ 221 | "plt.plot(costs,color=\"red\")\n", 222 | "plt.xlabel('Number of Iterations')\n", 223 | "plt.ylabel('Cost')\n", 224 | "plt.title('Cost curve')\n", 225 | "plt.show()\n", 226 | "plt.plot(accuracies,color=\"blue\")\n", 227 | "plt.xlabel('Number of Iterations')\n", 228 | "plt.ylabel('Accuracy')\n", 229 | "plt.title('Accuracy curve')\n", 230 | "plt.show()" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 11, 236 | "metadata": { 237 | "collapsed": true 238 | }, 239 | "outputs": [], 240 | "source": [ 241 | "train_accuracy=accuracy(X,W,b,Y)" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 12, 247 | "metadata": { 248 | "collapsed": false 249 | }, 250 | "outputs": [ 251 | { 252 | "name": "stdout", 253 | "output_type": "stream", 254 | "text": [ 255 | "Final Accuracy on training set : 90.274 %\n" 256 | ] 257 | } 258 | ], 259 | "source": [ 260 | "print(\"Final Accuracy on training set :\",train_accuracy,\"%\") " 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 13, 266 | "metadata": { 267 | "collapsed": false 268 | }, 269 | "outputs": [ 270 | { 271 | "name": "stdout", 272 | "output_type": "stream", 273 | "text": [ 274 | "(1, 10000)\n", 275 | "(10, 10000)\n", 276 | "[7 2 1 ..., 4 5 6]\n" 277 | ] 278 | } 279 | ], 280 | "source": [ 281 | "X_test = test_data[0]\n", 282 | "X_test = X_test.T\n", 283 | "Y_test=test_data[1]\n", 284 | "Y_test=Y_test.T\n", 285 | "Y_test=Y_test.reshape(1,Y_test.shape[0])\n", 286 | "print(Y_test.shape)\n", 287 | "Y_test=np.squeeze(Y_test)\n", 288 | "n_Y=np.max(Y_test)+1\n", 289 | "y=np.eye(n_Y)[Y_test]\n", 290 | "Y_test=y.T\n", 291 | "print(Y_test.shape)\n", 292 | "print(np.argmax(Y_test,axis=0))" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 14, 298 | "metadata": { 299 | "collapsed": false 300 | }, 301 | "outputs": [ 302 | { 303 | "name": "stdout", 304 | "output_type": "stream", 305 | "text": [ 306 | "Accuracy on Test set : 91.0 %\n" 307 | ] 308 | } 309 | ], 310 | "source": [ 311 | "test_accuracy=accuracy(X_test,W,b,Y_test)\n", 312 | "print(\"Accuracy on Test set : \",test_accuracy,\"%\")" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 16, 318 | "metadata": { 319 | "collapsed": true 320 | }, 321 | "outputs": [], 322 | "source": [ 323 | "def predict(X,W,b):\n", 324 | " A=forward_prop(W,b,X)\n", 325 | " A=np.argmax(A,axis=0)\n", 326 | " return A" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": 21, 332 | "metadata": { 333 | "collapsed": false 334 | }, 335 | "outputs": [ 336 | { 337 | "name": "stdout", 338 | "output_type": "stream", 339 | "text": [ 340 | "It is a 1\n" 341 | ] 342 | }, 343 | { 344 | "name": "stderr", 345 | "output_type": "stream", 346 | "text": [ 347 | "/home/rishi/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:2: RuntimeWarning: overflow encountered in exp\n", 348 | " from ipykernel import kernelapp as app\n", 349 | "/home/rishi/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:4: RuntimeWarning: invalid value encountered in true_divide\n" 350 | ] 351 | }, 352 | { 353 | "data": { 354 | "image/png": "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\n", 355 | "text/plain": [ 356 | "" 357 | ] 358 | }, 359 | "metadata": {}, 360 | "output_type": "display_data" 361 | } 362 | ], 363 | "source": [ 364 | "import scipy\n", 365 | "from scipy import ndimage\n", 366 | "from PIL import Image\n", 367 | "img = Image.open('1.jpg').convert('L')\n", 368 | "img.save('greyscale-1.png')\n", 369 | "fname=\"greyscale-1.png\"\n", 370 | "image = np.array(ndimage.imread(fname, flatten=False))\n", 371 | "#print(image.shape)\n", 372 | "image = scipy.misc.imresize(image, size=(28,28)).reshape((28*28,1))\n", 373 | "#print(image.shape)\n", 374 | "c=predict(image,W,b)\n", 375 | "print(\"It is a \",np.squeeze(c))\n", 376 | "plt.imshow(img)\n", 377 | "plt.show()" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 20, 383 | "metadata": { 384 | "collapsed": false 385 | }, 386 | "outputs": [ 387 | { 388 | "name": "stdout", 389 | "output_type": "stream", 390 | "text": [ 391 | "It is a 2\n" 392 | ] 393 | }, 394 | { 395 | "data": { 396 | "image/png": "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\n", 397 | "text/plain": [ 398 | "" 399 | ] 400 | }, 401 | "metadata": {}, 402 | "output_type": "display_data" 403 | } 404 | ], 405 | "source": [ 406 | "img = Image.open('2.jpg').convert('L')\n", 407 | "img.save('greyscale-2.png')\n", 408 | "fname=\"greyscale-2.png\"\n", 409 | "image = np.array(ndimage.imread(fname, flatten=False))\n", 410 | "#print(image.shape)\n", 411 | "image = scipy.misc.imresize(image, size=(28,28)).reshape((28*28,1))\n", 412 | "#print(image.shape)\n", 413 | "c=predict(image,W,b)\n", 414 | "print(\"It is a \",np.squeeze(c))\n", 415 | "plt.imshow(img)\n", 416 | "plt.show()" 417 | ] 418 | }, 419 | { 420 | "cell_type": "code", 421 | "execution_count": null, 422 | "metadata": { 423 | "collapsed": true 424 | }, 425 | "outputs": [], 426 | "source": [] 427 | } 428 | ], 429 | "metadata": { 430 | "kernelspec": { 431 | "display_name": "Python 3", 432 | "language": "python", 433 | "name": "python3" 434 | }, 435 | "language_info": { 436 | "codemirror_mode": { 437 | "name": "ipython", 438 | "version": 3 439 | }, 440 | "file_extension": ".py", 441 | "mimetype": "text/x-python", 442 | "name": "python", 443 | "nbconvert_exporter": "python", 444 | "pygments_lexer": "ipython3", 445 | "version": "3.6.6" 446 | } 447 | }, 448 | "nbformat": 4, 449 | "nbformat_minor": 2 450 | } 451 | -------------------------------------------------------------------------------- /Twolayer_MNIST.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "(784, 50000)\n", 15 | "(50000,)\n", 16 | "(1, 50000)\n", 17 | "(10, 50000)\n", 18 | "[5 0 4 ..., 8 4 8]\n" 19 | ] 20 | } 21 | ], 22 | "source": [ 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import pickle as cPickle\n", 26 | "import gzip\n", 27 | "\n", 28 | "data = gzip.open(\"mnist.pkl.gz\")\n", 29 | "train_data, validation_data, test_data = cPickle.load(data,encoding=\"latin1\")\n", 30 | "X=train_data[0]\n", 31 | "X=X.T\n", 32 | "Y=train_data[1]\n", 33 | "Y=Y.T\n", 34 | "print(X.shape)\n", 35 | "print(Y.shape)\n", 36 | "Y=Y.reshape(1,Y.shape[0])\n", 37 | "print(Y.shape)\n", 38 | "Y=np.squeeze(Y)\n", 39 | "n_Y=np.max(Y)+1\n", 40 | "y=np.eye(n_Y)[Y]\n", 41 | "Y=y.T\n", 42 | "print(Y.shape)\n", 43 | "print(np.argmax(Y,axis=0))" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": true 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "def softmax(z):\n", 55 | " cache=z\n", 56 | " t=np.exp(z)\n", 57 | " q=np.sum(t,axis=0,keepdims=True)\n", 58 | " a=np.divide(t,q)\n", 59 | " return a,cache" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": { 66 | "collapsed": true 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "def tanh(z):\n", 71 | " cache=z\n", 72 | " a=np.tanh(z)\n", 73 | " return a,cache" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 4, 79 | "metadata": { 80 | "collapsed": true 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "def initialise_parameters(layer_dims):\n", 85 | " parameters = {}\n", 86 | " L = len(layer_dims) \n", 87 | " for l in range(1,L):\n", 88 | " parameters[\"W\" + str(l)] = np.random.randn(layer_dims[l],layer_dims[l-1])*0.01\n", 89 | " parameters[\"b\" + str(l)] = np.zeros((layer_dims[l],1))\n", 90 | " \n", 91 | " return parameters" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 5, 97 | "metadata": { 98 | "collapsed": false 99 | }, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "(125, 784)\n", 106 | "(125, 1)\n", 107 | "(10, 125)\n", 108 | "(10, 1)\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "layer_dims=[X.shape[0],125,Y.shape[0]]\n", 114 | "parameters=initialise_parameters(layer_dims)\n", 115 | "print(parameters[\"W1\"].shape)\n", 116 | "print(parameters[\"b1\"].shape)\n", 117 | "print(parameters[\"W2\"].shape)\n", 118 | "print(parameters[\"b2\"].shape)" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 6, 124 | "metadata": { 125 | "collapsed": true 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "def forward_prop(X,parameters):\n", 130 | " cache={}\n", 131 | " W1=parameters[\"W1\"]\n", 132 | " b1=parameters[\"b1\"]\n", 133 | " W2=parameters[\"W2\"]\n", 134 | " b2=parameters[\"b2\"]\n", 135 | " Z1=np.dot(W1,X)+b1\n", 136 | " A1,cache[\"Z1\"]=tanh(Z1)\n", 137 | " Z2=np.dot(W2,A1)+b2\n", 138 | " A2,cache[\"Z2\"]=softmax(Z2)\n", 139 | " cache[\"A1\"]=A1\n", 140 | " return A2,cache\n" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": { 147 | "collapsed": true 148 | }, 149 | "outputs": [], 150 | "source": [ 151 | "def compute_cost(A2,Y):\n", 152 | " m=Y.shape[1]\n", 153 | " cost=-1/m*np.sum(np.multiply(Y,np.log(A2)))\n", 154 | " cost=np.squeeze(cost)\n", 155 | " return cost" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 8, 161 | "metadata": { 162 | "collapsed": true 163 | }, 164 | "outputs": [], 165 | "source": [ 166 | "def back_prop(X,Y,cache,parameters,A2):\n", 167 | " Z1=cache['Z1']\n", 168 | " A1=cache['A1']\n", 169 | " W2=parameters['W2']\n", 170 | " grads={}\n", 171 | " m=Y.shape[1]\n", 172 | " dZ2=A2-Y\n", 173 | " dW2=1/m*np.dot(dZ2,A1.T)\n", 174 | " db2=1/m*np.sum(dZ2,axis=1,keepdims=True)\n", 175 | " dZ1=np.multiply(np.matmul(W2.T,dZ2),(1-np.power(np.tanh(Z1),2)))\n", 176 | " dW1=1/m*np.matmul(dZ1,X.T)\n", 177 | " db1=1/m*np.sum(dZ1,axis=1,keepdims=True)\n", 178 | " grads={'dW2':dW2,'db2':db2,'dW1':dW1,'db1':db1}\n", 179 | " return grads" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 9, 185 | "metadata": { 186 | "collapsed": true 187 | }, 188 | "outputs": [], 189 | "source": [ 190 | "def update_parameters(parameters,grads,learning_rate):\n", 191 | " W1=parameters[\"W1\"]\n", 192 | " b1=parameters[\"b1\"]\n", 193 | " W2=parameters[\"W2\"]\n", 194 | " b2=parameters[\"b2\"]\n", 195 | " dW1=grads[\"dW1\"]\n", 196 | " dW2=grads[\"dW2\"]\n", 197 | " db1=grads[\"db1\"]\n", 198 | " db2=grads[\"db2\"]\n", 199 | " W1=W1-learning_rate*dW1\n", 200 | " W2=W2-learning_rate*dW2\n", 201 | " b1=b1-learning_rate*db1\n", 202 | " b2=b2-learning_rate*db2\n", 203 | " parameters={'W1':W1,'W2':W2,'b1':b1,'b2':b2}\n", 204 | " return parameters" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 10, 210 | "metadata": { 211 | "collapsed": true 212 | }, 213 | "outputs": [], 214 | "source": [ 215 | "def accuracy(X,parameters,Y):\n", 216 | " Q=np.argmax(Y,axis=0)\n", 217 | " R,_=forward_prop(X,parameters)\n", 218 | " R=np.argmax(R,axis=0)\n", 219 | " count=0\n", 220 | " for i in range(Y.shape[1]):\n", 221 | " if Q[i]==R[i]:\n", 222 | " count+=1\n", 223 | " accuracy=count/Y.shape[1]*100\n", 224 | " return accuracy" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 11, 230 | "metadata": { 231 | "collapsed": true 232 | }, 233 | "outputs": [], 234 | "source": [ 235 | "def model(X,Y,layer_dims,num_iterations,learning_rate):\n", 236 | " costs=[]\n", 237 | " acc =[]\n", 238 | " parameters=initialise_parameters(layer_dims)\n", 239 | " for i in range(num_iterations):\n", 240 | " A2,cache=forward_prop(X,parameters)\n", 241 | " cost=compute_cost(A2,Y)\n", 242 | " grads=back_prop(X,Y,cache,parameters,A2)\n", 243 | " acc.append(accuracy(X,parameters,Y))\n", 244 | " parameters=update_parameters(parameters,grads,learning_rate)\n", 245 | " costs.append(cost)\n", 246 | " if i % 100 == 0:\n", 247 | " print(\"After iteration %i cost: %f and accuracy:%f\" %(i,cost,accuracy(X,parameters,Y)))\n", 248 | " \n", 249 | " return parameters,costs,acc " 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 12, 255 | "metadata": { 256 | "collapsed": false 257 | }, 258 | "outputs": [ 259 | { 260 | "name": "stdout", 261 | "output_type": "stream", 262 | "text": [ 263 | "After iteration 0 cost: 2.303553 and accuracy:28.328000\n", 264 | "After iteration 100 cost: 0.422131 and accuracy:88.662000\n", 265 | "After iteration 200 cost: 0.328504 and accuracy:90.702000\n", 266 | "After iteration 300 cost: 0.291378 and accuracy:91.720000\n", 267 | "After iteration 400 cost: 0.265887 and accuracy:92.424000\n", 268 | "After iteration 500 cost: 0.244653 and accuracy:93.062000\n", 269 | "After iteration 600 cost: 0.225826 and accuracy:93.588000\n", 270 | "After iteration 700 cost: 0.209003 and accuracy:94.048000\n", 271 | "After iteration 800 cost: 0.194101 and accuracy:94.488000\n", 272 | "After iteration 900 cost: 0.180987 and accuracy:94.848000\n", 273 | "After iteration 1000 cost: 0.169440 and accuracy:95.176000\n", 274 | "After iteration 1100 cost: 0.159218 and accuracy:95.454000\n", 275 | "After iteration 1200 cost: 0.150106 and accuracy:95.720000\n", 276 | "After iteration 1300 cost: 0.141927 and accuracy:95.948000\n", 277 | "After iteration 1400 cost: 0.134540 and accuracy:96.162000\n" 278 | ] 279 | } 280 | ], 281 | "source": [ 282 | "parameters,costs,accuracies=model(X,Y,layer_dims,num_iterations=1500,learning_rate=0.3)" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 13, 288 | "metadata": { 289 | "collapsed": false 290 | }, 291 | "outputs": [ 292 | { 293 | "data": { 294 | "image/png": "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\n", 295 | "text/plain": [ 296 | "" 297 | ] 298 | }, 299 | "metadata": {}, 300 | "output_type": "display_data" 301 | }, 302 | { 303 | "data": { 304 | "image/png": "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\n", 305 | "text/plain": [ 306 | "" 307 | ] 308 | }, 309 | "metadata": {}, 310 | "output_type": "display_data" 311 | } 312 | ], 313 | "source": [ 314 | "plt.plot(costs,color=\"green\")\n", 315 | "plt.xlabel('Number of Iterations')\n", 316 | "plt.ylabel('Cost')\n", 317 | "plt.title('Cost curve')\n", 318 | "plt.show()\n", 319 | "plt.plot(accuracies,color=\"blue\")\n", 320 | "plt.xlabel('Number of Iterations')\n", 321 | "plt.ylabel('Accuracy')\n", 322 | "plt.title('Accuracy curve')\n", 323 | "plt.show()" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 15, 329 | "metadata": { 330 | "collapsed": false 331 | }, 332 | "outputs": [], 333 | "source": [ 334 | "train_accuracy=accuracy(X,parameters,Y)" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": 16, 340 | "metadata": { 341 | "collapsed": false 342 | }, 343 | "outputs": [ 344 | { 345 | "name": "stdout", 346 | "output_type": "stream", 347 | "text": [ 348 | "Final Accuracy on training set : 96.366 %\n" 349 | ] 350 | } 351 | ], 352 | "source": [ 353 | "print(\"Final Accuracy on training set :\",train_accuracy,\"%\") " 354 | ] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": 17, 359 | "metadata": { 360 | "collapsed": false 361 | }, 362 | "outputs": [ 363 | { 364 | "name": "stdout", 365 | "output_type": "stream", 366 | "text": [ 367 | "(1, 10000)\n", 368 | "(10, 10000)\n", 369 | "[7 2 1 ..., 4 5 6]\n" 370 | ] 371 | } 372 | ], 373 | "source": [ 374 | "X_test = test_data[0]\n", 375 | "X_test = X_test.T\n", 376 | "Y_test=test_data[1]\n", 377 | "Y_test=Y_test.T\n", 378 | "Y_test=Y_test.reshape(1,Y_test.shape[0])\n", 379 | "print(Y_test.shape)\n", 380 | "Y_test=np.squeeze(Y_test)\n", 381 | "n_Y=np.max(Y_test)+1\n", 382 | "y=np.eye(n_Y)[Y_test]\n", 383 | "Y_test=y.T\n", 384 | "print(Y_test.shape)\n", 385 | "print(np.argmax(Y_test,axis=0))" 386 | ] 387 | }, 388 | { 389 | "cell_type": "code", 390 | "execution_count": 19, 391 | "metadata": { 392 | "collapsed": false 393 | }, 394 | "outputs": [ 395 | { 396 | "name": "stdout", 397 | "output_type": "stream", 398 | "text": [ 399 | "Accuracy on Test set : 95.99 %\n" 400 | ] 401 | } 402 | ], 403 | "source": [ 404 | "test_accuracy=accuracy(X_test,parameters,Y_test)\n", 405 | "print(\"Accuracy on Test set : \",test_accuracy,\"%\")" 406 | ] 407 | }, 408 | { 409 | "cell_type": "code", 410 | "execution_count": 21, 411 | "metadata": { 412 | "collapsed": true 413 | }, 414 | "outputs": [], 415 | "source": [ 416 | "def predict(X,parameters):\n", 417 | " A,_=forward_prop(X,parameters)\n", 418 | " A=np.argmax(A,axis=0)\n", 419 | " return A" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": 22, 425 | "metadata": { 426 | "collapsed": false 427 | }, 428 | "outputs": [ 429 | { 430 | "name": "stdout", 431 | "output_type": "stream", 432 | "text": [ 433 | "It is a 2\n" 434 | ] 435 | }, 436 | { 437 | "data": { 438 | "image/png": "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\n", 439 | "text/plain": [ 440 | "" 441 | ] 442 | }, 443 | "metadata": {}, 444 | "output_type": "display_data" 445 | } 446 | ], 447 | "source": [ 448 | "import scipy\n", 449 | "from scipy import ndimage\n", 450 | "from PIL import Image\n", 451 | "img = Image.open('2.jpg').convert('L')\n", 452 | "img.save('greyscale-2.png')\n", 453 | "fname=\"greyscale-2.png\"\n", 454 | "image = np.array(ndimage.imread(fname, flatten=False))\n", 455 | "#print(image.shape)\n", 456 | "image = scipy.misc.imresize(image, size=(28,28)).reshape((28*28,1))\n", 457 | "#print(image.shape)\n", 458 | "c=predict(image,parameters)\n", 459 | "print(\"It is a \",np.squeeze(c))\n", 460 | "plt.imshow(img)\n", 461 | "plt.show()" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": 23, 467 | "metadata": { 468 | "collapsed": false 469 | }, 470 | "outputs": [ 471 | { 472 | "name": "stdout", 473 | "output_type": "stream", 474 | "text": [ 475 | "It is a 0\n" 476 | ] 477 | }, 478 | { 479 | "data": { 480 | "image/png": "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\n", 481 | "text/plain": [ 482 | "" 483 | ] 484 | }, 485 | "metadata": {}, 486 | "output_type": "display_data" 487 | } 488 | ], 489 | "source": [ 490 | "img = Image.open('0(1).jpg').convert('L')\n", 491 | "img.save('greyscale-01.png')\n", 492 | "fname=\"greyscale-01.png\"\n", 493 | "image = np.array(ndimage.imread(fname, flatten=False))\n", 494 | "#print(image.shape)\n", 495 | "image = scipy.misc.imresize(image, size=(28,28)).reshape((28*28,1))\n", 496 | "#print(image.shape)\n", 497 | "c=predict(image,parameters)\n", 498 | "print(\"It is a \",np.squeeze(c))\n", 499 | "plt.imshow(img)\n", 500 | "plt.show()" 501 | ] 502 | }, 503 | { 504 | "cell_type": "code", 505 | "execution_count": null, 506 | "metadata": { 507 | "collapsed": true 508 | }, 509 | "outputs": [], 510 | "source": [] 511 | } 512 | ], 513 | "metadata": { 514 | "kernelspec": { 515 | "display_name": "Python 3", 516 | "language": "python", 517 | "name": "python3" 518 | }, 519 | "language_info": { 520 | "codemirror_mode": { 521 | "name": "ipython", 522 | "version": 3 523 | }, 524 | "file_extension": ".py", 525 | "mimetype": "text/x-python", 526 | "name": "python", 527 | "nbconvert_exporter": "python", 528 | "pygments_lexer": "ipython3", 529 | "version": "3.6.6" 530 | } 531 | }, 532 | "nbformat": 4, 533 | "nbformat_minor": 2 534 | } 535 | --------------------------------------------------------------------------------