├── Main.java ├── MultiCrossEntropyCriterion.lua ├── README.md ├── RNN 6.ipynb ├── captcha.lua ├── data.lua ├── models.lua ├── rmain.lua ├── rutil.lua ├── seq.lua ├── simple ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png └── ans.txt └── train.lua /Main.java: -------------------------------------------------------------------------------- 1 | import java.awt.FlowLayout; 2 | import java.awt.image.BufferedImage; 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.io.PrintWriter; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | 9 | import javax.imageio.ImageIO; 10 | import javax.swing.ImageIcon; 11 | import javax.swing.JFrame; 12 | import javax.swing.JLabel; 13 | 14 | import nl.captcha.Captcha; 15 | import nl.captcha.Captcha.Builder; 16 | import nl.captcha.backgrounds.GradiatedBackgroundProducer; 17 | import nl.captcha.gimpy.DropShadowGimpyRenderer; 18 | import nl.captcha.gimpy.FishEyeGimpyRenderer; 19 | import nl.captcha.noise.StraightLineNoiseProducer; 20 | import nl.captcha.text.producer.ChineseTextProducer; 21 | import nl.captcha.text.producer.DefaultTextProducer; 22 | 23 | 24 | public class Main { 25 | 26 | public static void main(String[] args) throws IOException { 27 | // TODO Auto-generated method stub // Required! Always! 28 | //img2file("file.png",captcha.getImage()); 29 | img2ds("data/simpleRNN/",10000); 30 | 31 | } 32 | 33 | public static void img2ds(String dir, int N) throws IOException 34 | { 35 | List ans = new LinkedList(); 36 | PrintWriter out = new PrintWriter(dir+"/ans.txt"); 37 | for(int i=1;i<=N;i++) 38 | { 39 | if(i%100==0)System.out.println(i+","+N); 40 | Captcha cap = new Captcha.Builder(200, 50) 41 | .addText() 42 | .addBackground() 43 | .addNoise() 44 | .gimp() 45 | .addBackground(new GradiatedBackgroundProducer()) 46 | .addNoise(new StraightLineNoiseProducer()) 47 | .gimp(new FishEyeGimpyRenderer()) 48 | .build(); 49 | img2file(dir+"/"+i+".png",cap.getImage()); 50 | ans.add(cap.getAnswer()); 51 | out.println(cap.getAnswer()); 52 | } 53 | //System.out.println(ans); 54 | out.close(); 55 | } 56 | 57 | public static void img2disp(BufferedImage img) 58 | { 59 | 60 | JFrame frame = new JFrame(); 61 | frame.getContentPane().setLayout(new FlowLayout()); 62 | frame.getContentPane().add(new JLabel(new ImageIcon(img))); 63 | frame.pack(); 64 | frame.setVisible(true); 65 | } 66 | 67 | public static void img2file(String fileName, BufferedImage img) throws IOException 68 | { 69 | ImageIO.write(img, "png", new File(fileName)); 70 | 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /MultiCrossEntropyCriterion.lua: -------------------------------------------------------------------------------- 1 | require 'nn'; 2 | 3 | local MultiCrossEntropyCriterion, CrossEntropyCriterion = torch.class('nn.MultiCrossEntropyCriterion', 'nn.CrossEntropyCriterion') 4 | 5 | function nn.MultiCrossEntropyCriterion:__init() 6 | CrossEntropyCriterion.__init(self) 7 | end 8 | 9 | function nn.MultiCrossEntropyCriterion:updateOutput(input, target) 10 | local N = input:size(1) 11 | local k = input:size(2) 12 | local C = input:size(3) 13 | CrossEntropyCriterion.updateOutput(self, input:view(N*k,C), target:view(N*k)) 14 | return self.output 15 | end 16 | 17 | function nn.MultiCrossEntropyCriterion:updateGradInput(input, target) 18 | local N = input:size(1) 19 | local k = input:size(2) 20 | local C = input:size(3) 21 | CrossEntropyCriterion.updateGradInput(self, input:view(N*k,C), target:view(N*k)) 22 | return self.gradInput:view(N,k,C) 23 | end 24 | 25 | return nn.MultiCrossEntropyCriterion -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # captcha 2 | Breaking captchas using torch 3 | 4 | See blog https://deepmlblog.wordpress.com/2016/01/03/how-to-break-a-captcha-system/ 5 | 6 | 1. Run captcha.lua to run CNN without RNN 7 | SimpleCaptcha accuracy - 92% 8 | 2. Run rmain.lua to run CNN with RNN 9 | SimpleCaptcha accuracy - 96% 10 | 3. For seq to seq learning see RNN 6.ipynb 11 | accuracy - 50% 12 | -------------------------------------------------------------------------------- /RNN 6.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "data = require 'data'" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 3, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "dir = '/home/arun/data/seqsimple2/'" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 4, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "X,Y = data.loadXY(dir)\n", 34 | "data.convert(Y)" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 5, 40 | "metadata": { 41 | "collapsed": true 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "function repl(N)\n", 46 | " local net = nn.ConcatTable()\n", 47 | " for i=1,N do \n", 48 | " net:add(nn.Identity())\n", 49 | " end\n", 50 | " return net\n", 51 | "end" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 6, 57 | "metadata": { 58 | "collapsed": false 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "require 'nn'\n", 63 | "require 'rnn'\n", 64 | "net = nn.Sequential()\n", 65 | "net:add(nn.Reshape(1,50,200))\n", 66 | "net:add(nn.SpatialConvolution(1,64,3,3,1,1,1,1))\n", 67 | "net:add(nn.SpatialBatchNormalization(64,1e-3))\n", 68 | "net:add(nn.ReLU(true))\n", 69 | "net:add(nn.SpatialMaxPooling(2,2,2,2))\n", 70 | "net:add(nn.SpatialConvolution(64,64,3,3,1,1,1,1))\n", 71 | "net:add(nn.SpatialBatchNormalization(64,1e-3))\n", 72 | "net:add(nn.ReLU(true))\n", 73 | "net:add(nn.SpatialMaxPooling(2,2,2,2))\n", 74 | "net:add(nn.SpatialConvolution(64,64,3,3,1,1,1,1))\n", 75 | "net:add(nn.SpatialBatchNormalization(64,1e-3))\n", 76 | "net:add(nn.ReLU(true))\n", 77 | "net:add(nn.SpatialMaxPooling(2,2,2,2))\n", 78 | "net:add(nn.SpatialConvolution(64,64,3,3,1,1,1,1))\n", 79 | "net:add(nn.SpatialBatchNormalization(64,1e-3))\n", 80 | "net:add(nn.ReLU(true))\n", 81 | "net:add(nn.SpatialMaxPooling(2,2,2,2))\n", 82 | "net:add(nn.SpatialConvolution(64,64,3,3,1,1,1,1))\n", 83 | "net:add(nn.SpatialBatchNormalization(64,1e-3))\n", 84 | "net:add(nn.ReLU(true))\n", 85 | "net:add(nn.SpatialMaxPooling(2,2,2,2))\n", 86 | "--net:add(nn.View(64*1*6))\n", 87 | "net:add(nn.Reshape(8,48))\n", 88 | "net:add(nn.SplitTable(2,3))\n", 89 | "enc = nn.Sequential()\n", 90 | "enc:add(net)\n", 91 | "enc:add(nn.Sequencer(nn.LSTM(48, 48)))\n", 92 | "enc:add(nn.SelectTable(-1))\n", 93 | "dec = nn.Sequential()\n", 94 | "dec:add(enc)\n", 95 | "dec:add(repl(7))\n", 96 | "\n", 97 | "mlp = nn.Sequential()\n", 98 | " :add(nn.LSTM(48, 48))\n", 99 | " :add(nn.Linear(48, 36))\n", 100 | " :add(nn.LogSoftMax())\n", 101 | "\n", 102 | "dec:add(nn.Sequencer(mlp))\n", 103 | "--net:add(repl(7))" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 7, 109 | "metadata": { 110 | "collapsed": false 111 | }, 112 | "outputs": [], 113 | "source": [ 114 | "require 'cunn';\n", 115 | "require 'nn';\n", 116 | "require 'rnn';\n", 117 | "dec = torch.load('seq88.t7')\n", 118 | "dec = dec:cuda()" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 8, 124 | "metadata": { 125 | "collapsed": false 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "criterion = nn.SequencerCriterion(nn.ClassNLLCriterion())\n", 130 | "criterion = criterion:cuda()" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 9, 136 | "metadata": { 137 | "collapsed": false 138 | }, 139 | "outputs": [], 140 | "source": [ 141 | "rutil = require 'rutil'" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 10, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "Xt,Yt,Xv,Yv = data.split(X,Y,1000)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 11, 158 | "metadata": { 159 | "collapsed": true 160 | }, 161 | "outputs": [], 162 | "source": [ 163 | "tnet = nn.SplitTable(2,2):cuda()" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 12, 169 | "metadata": { 170 | "collapsed": false 171 | }, 172 | "outputs": [ 173 | { 174 | "data": { 175 | "text/plain": [ 176 | "95.6\t{\n", 177 | " 1 : 99.3\n", 178 | " 2 : 94.6\n", 179 | " 3 : 91.9\n", 180 | " 4 : 93.1\n", 181 | " 5 : 93.4\n", 182 | " 6 : 97.4\n", 183 | " 7 : 99.5\n", 184 | "}\n" 185 | ] 186 | }, 187 | "execution_count": 12, 188 | "metadata": {}, 189 | "output_type": "execute_result" 190 | } 191 | ], 192 | "source": [ 193 | "rutil.valid(dec,Xv,Yv,512,tnet)" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 33, 199 | "metadata": { 200 | "collapsed": true 201 | }, 202 | "outputs": [], 203 | "source": [ 204 | "\n", 205 | "function rutil.kfacc(outputs,targets)\n", 206 | " local Y,y = nil,nil;\n", 207 | " local N = outputs[1]:size(1)\n", 208 | " local C = outputs[1]:size(2)\n", 209 | " for k=1,#outputs do \n", 210 | " Y = Y and torch.cat(Y,outputs[k]:reshape(N,1,C),2) or outputs[k]:reshape(N,1,C)\n", 211 | " y = y and torch.cat(y,targets[k]:reshape(N,1),2) or targets[k]:reshape(N,1)\n", 212 | " end\n", 213 | " local t,idx = Y:max(3)\n", 214 | " return idx:squeeze():eq(y):sum(2):eq(#outputs):sum()\n", 215 | "end\n", 216 | "\n", 217 | "function rutil.kvalid(rnn,Xv,Yv,batchSize,tnet)\n", 218 | " local batchSize = batchSize or 16\n", 219 | " local acc = 0\n", 220 | " local acci = {}\n", 221 | " local Nv = Xv:size(1)\n", 222 | " rnn:evaluate()\n", 223 | " for i=1,Nv,batchSize do \n", 224 | " xlua.progress(i/batchSize, Nv/batchSize)\n", 225 | " local j = math.min(Nv,i+batchSize-1)\n", 226 | " local Xb = Xv[{{i,j}}]:cuda() \n", 227 | " local Yb = Yv[{{i,j}}]:cuda()\n", 228 | " local inputs = Xb\n", 229 | " local targets = tnet:forward(Yb)\n", 230 | " local outputs = rnn:forward(inputs)\n", 231 | " local aa,ai = rutil.kfacc2(outputs,targets)\n", 232 | " acc = acc + aa\n", 233 | " rnn:forget()\n", 234 | " end\n", 235 | " return (acc*100)/Nv,acci\n", 236 | "end\n" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": 16, 242 | "metadata": { 243 | "collapsed": false, 244 | "scrolled": true 245 | }, 246 | "outputs": [ 247 | { 248 | "data": { 249 | "text/plain": [ 250 | "11:26:40 IST\t\n", 251 | "1\t8\t\n" 252 | ] 253 | }, 254 | "execution_count": 16, 255 | "metadata": {}, 256 | "output_type": "execute_result" 257 | }, 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "Progress: 15.015625 / 453.125\t\n" 262 | ] 263 | }, 264 | "execution_count": 16, 265 | "metadata": {}, 266 | "output_type": "execute_result" 267 | }, 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "Progress: 60.015625 / 453.125\t\n" 272 | ] 273 | }, 274 | "execution_count": 16, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | }, 278 | { 279 | "data": { 280 | "text/plain": [ 281 | "Progress: 106.015625 / 453.125\t\n" 282 | ] 283 | }, 284 | "execution_count": 16, 285 | "metadata": {}, 286 | "output_type": "execute_result" 287 | }, 288 | { 289 | "data": { 290 | "text/plain": [ 291 | "Progress: 152.015625 / 453.125\t\n" 292 | ] 293 | }, 294 | "execution_count": 16, 295 | "metadata": {}, 296 | "output_type": "execute_result" 297 | }, 298 | { 299 | "data": { 300 | "text/plain": [ 301 | "Progress: 197.015625 / 453.125\t\n" 302 | ] 303 | }, 304 | "execution_count": 16, 305 | "metadata": {}, 306 | "output_type": "execute_result" 307 | }, 308 | { 309 | "data": { 310 | "text/plain": [ 311 | "Progress: 242.015625 / 453.125\t\n" 312 | ] 313 | }, 314 | "execution_count": 16, 315 | "metadata": {}, 316 | "output_type": "execute_result" 317 | }, 318 | { 319 | "data": { 320 | "text/plain": [ 321 | "Progress: 287.015625 / 453.125\t\n" 322 | ] 323 | }, 324 | "execution_count": 16, 325 | "metadata": {}, 326 | "output_type": "execute_result" 327 | }, 328 | { 329 | "data": { 330 | "text/plain": [ 331 | "Progress: 333.015625 / 453.125\t\n" 332 | ] 333 | }, 334 | "execution_count": 16, 335 | "metadata": {}, 336 | "output_type": "execute_result" 337 | }, 338 | { 339 | "data": { 340 | "text/plain": [ 341 | "Progress: 378.015625 / 453.125\t\n" 342 | ] 343 | }, 344 | "execution_count": 16, 345 | "metadata": {}, 346 | "output_type": "execute_result" 347 | }, 348 | { 349 | "data": { 350 | "text/plain": [ 351 | "Progress: 424.015625 / 453.125\t\n" 352 | ] 353 | }, 354 | "execution_count": 16, 355 | "metadata": {}, 356 | "output_type": "execute_result" 357 | }, 358 | { 359 | "data": { 360 | "text/plain": [ 361 | "loss\t" 362 | ] 363 | }, 364 | "execution_count": 16, 365 | "metadata": {}, 366 | "output_type": "execute_result" 367 | }, 368 | { 369 | "data": { 370 | "text/plain": [ 371 | "56.62282755971\t\n", 372 | "train\t97.745812807882\t\n" 373 | ] 374 | }, 375 | "execution_count": 16, 376 | "metadata": {}, 377 | "output_type": "execute_result" 378 | }, 379 | { 380 | "data": { 381 | "text/plain": [ 382 | "v\t97.528571428571\tmaxv\t97.528571428571\t\n", 383 | "{\n", 384 | " 1 : 99.6\n", 385 | " 2 : 97.3\n", 386 | " 3 : 94.7\n", 387 | " 4 : 95.6\n", 388 | " 5 : 97.1\n", 389 | " 6 : 98.8\n", 390 | " 7 : 99.6\n", 391 | "}\n", 392 | "11:29:13 IST\t\n", 393 | "11:29:13 IST\t\n", 394 | "2\t8\t\n" 395 | ] 396 | }, 397 | "execution_count": 16, 398 | "metadata": {}, 399 | "output_type": "execute_result" 400 | }, 401 | { 402 | "data": { 403 | "text/plain": [ 404 | "Progress: 11.015625 / 453.125\t\n" 405 | ] 406 | }, 407 | "execution_count": 16, 408 | "metadata": {}, 409 | "output_type": "execute_result" 410 | }, 411 | { 412 | "data": { 413 | "text/plain": [ 414 | "Progress: 56.015625 / 453.125\t\n" 415 | ] 416 | }, 417 | "execution_count": 16, 418 | "metadata": {}, 419 | "output_type": "execute_result" 420 | }, 421 | { 422 | "data": { 423 | "text/plain": [ 424 | "Progress: 102.015625 / 453.125\t\n" 425 | ] 426 | }, 427 | "execution_count": 16, 428 | "metadata": {}, 429 | "output_type": "execute_result" 430 | }, 431 | { 432 | "data": { 433 | "text/plain": [ 434 | "Progress: 148.015625 / 453.125\t\n" 435 | ] 436 | }, 437 | "execution_count": 16, 438 | "metadata": {}, 439 | "output_type": "execute_result" 440 | }, 441 | { 442 | "data": { 443 | "text/plain": [ 444 | "Progress: 193.015625 / 453.125\t\n" 445 | ] 446 | }, 447 | "execution_count": 16, 448 | "metadata": {}, 449 | "output_type": "execute_result" 450 | }, 451 | { 452 | "data": { 453 | "text/plain": [ 454 | "Progress: 238.015625 / 453.125\t\n" 455 | ] 456 | }, 457 | "execution_count": 16, 458 | "metadata": {}, 459 | "output_type": "execute_result" 460 | }, 461 | { 462 | "data": { 463 | "text/plain": [ 464 | "Progress: 283.015625 / 453.125\t\n" 465 | ] 466 | }, 467 | "execution_count": 16, 468 | "metadata": {}, 469 | "output_type": "execute_result" 470 | }, 471 | { 472 | "data": { 473 | "text/plain": [ 474 | "Progress: 327.015625 / 453.125\t\n" 475 | ] 476 | }, 477 | "execution_count": 16, 478 | "metadata": {}, 479 | "output_type": "execute_result" 480 | }, 481 | { 482 | "data": { 483 | "text/plain": [ 484 | "Progress: 371.015625 / 453.125\t\n" 485 | ] 486 | }, 487 | "execution_count": 16, 488 | "metadata": {}, 489 | "output_type": "execute_result" 490 | }, 491 | { 492 | "data": { 493 | "text/plain": [ 494 | "Progress: 417.015625 / 453.125\t\n" 495 | ] 496 | }, 497 | "execution_count": 16, 498 | "metadata": {}, 499 | "output_type": "execute_result" 500 | }, 501 | { 502 | "data": { 503 | "text/plain": [ 504 | "loss\t54.96096020937\t\n", 505 | "train\t97.913300492611\t\n" 506 | ] 507 | }, 508 | "execution_count": 16, 509 | "metadata": {}, 510 | "output_type": "execute_result" 511 | }, 512 | { 513 | "data": { 514 | "text/plain": [ 515 | "v\t97.514285714286\tmaxv\t97.528571428571\t\n", 516 | "{\n", 517 | " 1 : 99.6\n", 518 | " 2 : 97.2\n", 519 | " 3 : 94.8\n", 520 | " 4 : 95.8\n", 521 | " 5 : 96.9\n", 522 | " 6 : 98.7\n", 523 | " 7 : 99.6\n", 524 | "}\n", 525 | "11:31:47 IST\t\n", 526 | "11:31:47 IST\t\n", 527 | "3\t8\t\n" 528 | ] 529 | }, 530 | "execution_count": 16, 531 | "metadata": {}, 532 | "output_type": "execute_result" 533 | }, 534 | { 535 | "data": { 536 | "text/plain": [ 537 | "Progress: 4.015625 / 453.125\t\n" 538 | ] 539 | }, 540 | "execution_count": 16, 541 | "metadata": {}, 542 | "output_type": "execute_result" 543 | }, 544 | { 545 | "data": { 546 | "text/plain": [ 547 | "Progress: 50.015625 / 453.125\t" 548 | ] 549 | }, 550 | "execution_count": 16, 551 | "metadata": {}, 552 | "output_type": "execute_result" 553 | }, 554 | { 555 | "data": { 556 | "text/plain": [ 557 | "\n" 558 | ] 559 | }, 560 | "execution_count": 16, 561 | "metadata": {}, 562 | "output_type": "execute_result" 563 | }, 564 | { 565 | "data": { 566 | "text/plain": [ 567 | "Progress: 96.015625 / 453.125\t\n" 568 | ] 569 | }, 570 | "execution_count": 16, 571 | "metadata": {}, 572 | "output_type": "execute_result" 573 | }, 574 | { 575 | "data": { 576 | "text/plain": [ 577 | "Progress: 142.015625 / 453.125\t\n" 578 | ] 579 | }, 580 | "execution_count": 16, 581 | "metadata": {}, 582 | "output_type": "execute_result" 583 | }, 584 | { 585 | "data": { 586 | "text/plain": [ 587 | "Progress: 188.015625 / 453.125\t\n" 588 | ] 589 | }, 590 | "execution_count": 16, 591 | "metadata": {}, 592 | "output_type": "execute_result" 593 | }, 594 | { 595 | "data": { 596 | "text/plain": [ 597 | "Progress: 234.015625 / 453.125\t\n" 598 | ] 599 | }, 600 | "execution_count": 16, 601 | "metadata": {}, 602 | "output_type": "execute_result" 603 | }, 604 | { 605 | "data": { 606 | "text/plain": [ 607 | "Progress: 280.015625 / 453.125\t\n" 608 | ] 609 | }, 610 | "execution_count": 16, 611 | "metadata": {}, 612 | "output_type": "execute_result" 613 | }, 614 | { 615 | "data": { 616 | "text/plain": [ 617 | "Progress: 326.015625 / 453.125\t\n" 618 | ] 619 | }, 620 | "execution_count": 16, 621 | "metadata": {}, 622 | "output_type": "execute_result" 623 | }, 624 | { 625 | "data": { 626 | "text/plain": [ 627 | "Progress: 372.015625 / 453.125\t\n" 628 | ] 629 | }, 630 | "execution_count": 16, 631 | "metadata": {}, 632 | "output_type": "execute_result" 633 | }, 634 | { 635 | "data": { 636 | "text/plain": [ 637 | "Progress: 418.015625 / 453.125\t\n" 638 | ] 639 | }, 640 | "execution_count": 16, 641 | "metadata": {}, 642 | "output_type": "execute_result" 643 | }, 644 | { 645 | "data": { 646 | "text/plain": [ 647 | "loss\t53.630336015352\t\n", 648 | "train\t98.059113300493\t\n" 649 | ] 650 | }, 651 | "execution_count": 16, 652 | "metadata": {}, 653 | "output_type": "execute_result" 654 | }, 655 | { 656 | "data": { 657 | "text/plain": [ 658 | "v\t97.485714285714\tmaxv\t97.528571428571\t\n", 659 | "{\n", 660 | " 1 : 99.6\n", 661 | " 2 : 97.1\n", 662 | " 3 : 95\n", 663 | " 4 : 95.7\n", 664 | " 5 : 96.8\n", 665 | " 6 : 98.6\n", 666 | " 7 : 99.6\n", 667 | "}\n", 668 | "11:34:19 IST\t\n", 669 | "11:34:19 IST\t\n", 670 | "4\t8\t\n" 671 | ] 672 | }, 673 | "execution_count": 16, 674 | "metadata": {}, 675 | "output_type": "execute_result" 676 | }, 677 | { 678 | "data": { 679 | "text/plain": [ 680 | "Progress: 5.015625 / 453.125\t\n" 681 | ] 682 | }, 683 | "execution_count": 16, 684 | "metadata": {}, 685 | "output_type": "execute_result" 686 | }, 687 | { 688 | "data": { 689 | "text/plain": [ 690 | "Progress: 51.015625 / 453.125\t\n" 691 | ] 692 | }, 693 | "execution_count": 16, 694 | "metadata": {}, 695 | "output_type": "execute_result" 696 | }, 697 | { 698 | "data": { 699 | "text/plain": [ 700 | "Progress: 96.015625 / 453.125\t\n" 701 | ] 702 | }, 703 | "execution_count": 16, 704 | "metadata": {}, 705 | "output_type": "execute_result" 706 | }, 707 | { 708 | "data": { 709 | "text/plain": [ 710 | "Progress: 142.015625 / 453.125\t\n" 711 | ] 712 | }, 713 | "execution_count": 16, 714 | "metadata": {}, 715 | "output_type": "execute_result" 716 | }, 717 | { 718 | "data": { 719 | "text/plain": [ 720 | "Progress: 188.015625 / 453.125\t\n" 721 | ] 722 | }, 723 | "execution_count": 16, 724 | "metadata": {}, 725 | "output_type": "execute_result" 726 | }, 727 | { 728 | "data": { 729 | "text/plain": [ 730 | "Progress: 234.015625 / 453.125\t\n" 731 | ] 732 | }, 733 | "execution_count": 16, 734 | "metadata": {}, 735 | "output_type": "execute_result" 736 | }, 737 | { 738 | "data": { 739 | "text/plain": [ 740 | "Progress: 280.015625 / 453.125\t\n" 741 | ] 742 | }, 743 | "execution_count": 16, 744 | "metadata": {}, 745 | "output_type": "execute_result" 746 | }, 747 | { 748 | "data": { 749 | "text/plain": [ 750 | "Progress: 326.015625 / 453.125\t\n" 751 | ] 752 | }, 753 | "execution_count": 16, 754 | "metadata": {}, 755 | "output_type": "execute_result" 756 | }, 757 | { 758 | "data": { 759 | "text/plain": [ 760 | "Progress: 372.015625 / 453.125\t\n" 761 | ] 762 | }, 763 | "execution_count": 16, 764 | "metadata": {}, 765 | "output_type": "execute_result" 766 | }, 767 | { 768 | "data": { 769 | "text/plain": [ 770 | "Progress: 418.015625 / 453.125\t\n" 771 | ] 772 | }, 773 | "execution_count": 16, 774 | "metadata": {}, 775 | "output_type": "execute_result" 776 | }, 777 | { 778 | "data": { 779 | "text/plain": [ 780 | "loss\t52.573484056762\t\n", 781 | "train\t98.160591133005\t\n" 782 | ] 783 | }, 784 | "execution_count": 16, 785 | "metadata": {}, 786 | "output_type": "execute_result" 787 | }, 788 | { 789 | "data": { 790 | "text/plain": [ 791 | "v\t97.471428571429\tmaxv\t97.528571428571\t\n", 792 | "{\n", 793 | " 1 : 99.6\n", 794 | " 2 : 97.2\n", 795 | " 3 : 94.7\n", 796 | " 4 : 95.8\n", 797 | " 5 : 96.8\n", 798 | " 6 : 98.6\n", 799 | " 7 : 99.6\n", 800 | "}\n", 801 | "11:36:51 IST\t\n", 802 | "11:36:51 IST\t\n", 803 | "5\t8\t\n" 804 | ] 805 | }, 806 | "execution_count": 16, 807 | "metadata": {}, 808 | "output_type": "execute_result" 809 | }, 810 | { 811 | "data": { 812 | "text/plain": [ 813 | "Progress: 5.015625 / 453.125\t\n" 814 | ] 815 | }, 816 | "execution_count": 16, 817 | "metadata": {}, 818 | "output_type": "execute_result" 819 | }, 820 | { 821 | "data": { 822 | "text/plain": [ 823 | "Progress: 51.015625 / 453.125\t\n" 824 | ] 825 | }, 826 | "execution_count": 16, 827 | "metadata": {}, 828 | "output_type": "execute_result" 829 | }, 830 | { 831 | "data": { 832 | "text/plain": [ 833 | "Progress: 97.015625 / 453.125\t\n" 834 | ] 835 | }, 836 | "execution_count": 16, 837 | "metadata": {}, 838 | "output_type": "execute_result" 839 | }, 840 | { 841 | "data": { 842 | "text/plain": [ 843 | "Progress: 143.015625 / 453.125\t\n" 844 | ] 845 | }, 846 | "execution_count": 16, 847 | "metadata": {}, 848 | "output_type": "execute_result" 849 | }, 850 | { 851 | "data": { 852 | "text/plain": [ 853 | "Progress: 188.015625 / 453.125\t\n" 854 | ] 855 | }, 856 | "execution_count": 16, 857 | "metadata": {}, 858 | "output_type": "execute_result" 859 | }, 860 | { 861 | "data": { 862 | "text/plain": [ 863 | "Progress: 233.015625 / 453.125\t\n" 864 | ] 865 | }, 866 | "execution_count": 16, 867 | "metadata": {}, 868 | "output_type": "execute_result" 869 | }, 870 | { 871 | "data": { 872 | "text/plain": [ 873 | "Progress: 279.015625 / 453.125\t\n" 874 | ] 875 | }, 876 | "execution_count": 16, 877 | "metadata": {}, 878 | "output_type": "execute_result" 879 | }, 880 | { 881 | "data": { 882 | "text/plain": [ 883 | "Progress: 324.015625 / 453.125\t\n" 884 | ] 885 | }, 886 | "execution_count": 16, 887 | "metadata": {}, 888 | "output_type": "execute_result" 889 | }, 890 | { 891 | "data": { 892 | "text/plain": [ 893 | "Progress: 369.015625 / 453.125\t\n" 894 | ] 895 | }, 896 | "execution_count": 16, 897 | "metadata": {}, 898 | "output_type": "execute_result" 899 | }, 900 | { 901 | "data": { 902 | "text/plain": [ 903 | "Progress: 414.015625 / 453.125\t\n" 904 | ] 905 | }, 906 | "execution_count": 16, 907 | "metadata": {}, 908 | "output_type": "execute_result" 909 | }, 910 | { 911 | "data": { 912 | "text/plain": [ 913 | "loss\t51.657503930586\t\n", 914 | "train\t98.237438423645\t\n" 915 | ] 916 | }, 917 | "execution_count": 16, 918 | "metadata": {}, 919 | "output_type": "execute_result" 920 | }, 921 | { 922 | "data": { 923 | "text/plain": [ 924 | "Progress: 53.0625 / 62.5\t\n" 925 | ] 926 | }, 927 | "execution_count": 16, 928 | "metadata": {}, 929 | "output_type": "execute_result" 930 | }, 931 | { 932 | "data": { 933 | "text/plain": [ 934 | "v\t97.385714285714\tmaxv\t97.528571428571\t\n", 935 | "{\n", 936 | " 1 : 99.6\n", 937 | " 2 : 97.1\n", 938 | " 3 : 94.5\n", 939 | " 4 : 95.6\n", 940 | " 5 : 96.7\n", 941 | " 6 : 98.6\n" 942 | ] 943 | }, 944 | "execution_count": 16, 945 | "metadata": {}, 946 | "output_type": "execute_result" 947 | }, 948 | { 949 | "data": { 950 | "text/plain": [ 951 | " 7 : 99.6\n", 952 | "}\n", 953 | "11:39:24 IST\t\n", 954 | "11:39:24 IST\t\n", 955 | "6\t8\t\n" 956 | ] 957 | }, 958 | "execution_count": 16, 959 | "metadata": {}, 960 | "output_type": "execute_result" 961 | }, 962 | { 963 | "data": { 964 | "text/plain": [ 965 | "Progress: 44.015625 / 453.125\t\n" 966 | ] 967 | }, 968 | "execution_count": 16, 969 | "metadata": {}, 970 | "output_type": "execute_result" 971 | }, 972 | { 973 | "data": { 974 | "text/plain": [ 975 | "Progress: 89.015625 / 453.125\t\n" 976 | ] 977 | }, 978 | "execution_count": 16, 979 | "metadata": {}, 980 | "output_type": "execute_result" 981 | }, 982 | { 983 | "data": { 984 | "text/plain": [ 985 | "Progress: 134.015625 / 453.125\t\n" 986 | ] 987 | }, 988 | "execution_count": 16, 989 | "metadata": {}, 990 | "output_type": "execute_result" 991 | }, 992 | { 993 | "data": { 994 | "text/plain": [ 995 | "Progress: 179.015625 / 453.125\t\n" 996 | ] 997 | }, 998 | "execution_count": 16, 999 | "metadata": {}, 1000 | "output_type": "execute_result" 1001 | }, 1002 | { 1003 | "data": { 1004 | "text/plain": [ 1005 | "Progress: 225.015625 / 453.125\t\n" 1006 | ] 1007 | }, 1008 | "execution_count": 16, 1009 | "metadata": {}, 1010 | "output_type": "execute_result" 1011 | }, 1012 | { 1013 | "data": { 1014 | "text/plain": [ 1015 | "Progress: 271.015625 / 453.125\t\n" 1016 | ] 1017 | }, 1018 | "execution_count": 16, 1019 | "metadata": {}, 1020 | "output_type": "execute_result" 1021 | }, 1022 | { 1023 | "data": { 1024 | "text/plain": [ 1025 | "Progress: 316.015625 / 453.125\t\n" 1026 | ] 1027 | }, 1028 | "execution_count": 16, 1029 | "metadata": {}, 1030 | "output_type": "execute_result" 1031 | }, 1032 | { 1033 | "data": { 1034 | "text/plain": [ 1035 | "Progress: 361.015625 / 453.125\t\n" 1036 | ] 1037 | }, 1038 | "execution_count": 16, 1039 | "metadata": {}, 1040 | "output_type": "execute_result" 1041 | }, 1042 | { 1043 | "data": { 1044 | "text/plain": [ 1045 | "Progress: 406.015625 / 453.125\t\n" 1046 | ] 1047 | }, 1048 | "execution_count": 16, 1049 | "metadata": {}, 1050 | "output_type": "execute_result" 1051 | }, 1052 | { 1053 | "data": { 1054 | "text/plain": [ 1055 | "Progress: 451.015625 / 453.125\t\n" 1056 | ] 1057 | }, 1058 | "execution_count": 16, 1059 | "metadata": {}, 1060 | "output_type": "execute_result" 1061 | }, 1062 | { 1063 | "data": { 1064 | "text/plain": [ 1065 | "loss\t50.841366799814\t\n", 1066 | "train\t98.316748768473\t\n" 1067 | ] 1068 | }, 1069 | "execution_count": 16, 1070 | "metadata": {}, 1071 | "output_type": "execute_result" 1072 | }, 1073 | { 1074 | "data": { 1075 | "text/plain": [ 1076 | "v\t97.271428571429\tmaxv\t97.528571428571\t\n", 1077 | "{\n", 1078 | " 1 : 99.6\n", 1079 | " 2 : 97\n", 1080 | " 3 : 94.1\n", 1081 | " 4 : 95.5\n", 1082 | " 5 : 96.5\n", 1083 | " 6 : 98.6\n", 1084 | " 7 : 99.6\n", 1085 | "}\n", 1086 | "11:41:58 IST\t\n", 1087 | "11:41:58 IST\t\n", 1088 | "7\t8\t\n" 1089 | ] 1090 | }, 1091 | "execution_count": 16, 1092 | "metadata": {}, 1093 | "output_type": "execute_result" 1094 | }, 1095 | { 1096 | "data": { 1097 | "text/plain": [ 1098 | "Progress: 37.015625 / 453.125\t\n" 1099 | ] 1100 | }, 1101 | "execution_count": 16, 1102 | "metadata": {}, 1103 | "output_type": "execute_result" 1104 | }, 1105 | { 1106 | "data": { 1107 | "text/plain": [ 1108 | "Progress: 82.015625 / 453.125\t\n" 1109 | ] 1110 | }, 1111 | "execution_count": 16, 1112 | "metadata": {}, 1113 | "output_type": "execute_result" 1114 | }, 1115 | { 1116 | "data": { 1117 | "text/plain": [ 1118 | "Progress: 127.015625 / 453.125\t\n" 1119 | ] 1120 | }, 1121 | "execution_count": 16, 1122 | "metadata": {}, 1123 | "output_type": "execute_result" 1124 | }, 1125 | { 1126 | "data": { 1127 | "text/plain": [ 1128 | "Progress: 172.015625 / 453.125\t\n" 1129 | ] 1130 | }, 1131 | "execution_count": 16, 1132 | "metadata": {}, 1133 | "output_type": "execute_result" 1134 | }, 1135 | { 1136 | "data": { 1137 | "text/plain": [ 1138 | "Progress: 217.015625 / 453.125\t\n" 1139 | ] 1140 | }, 1141 | "execution_count": 16, 1142 | "metadata": {}, 1143 | "output_type": "execute_result" 1144 | }, 1145 | { 1146 | "data": { 1147 | "text/plain": [ 1148 | "Progress: 262.015625 / 453.125\t\n" 1149 | ] 1150 | }, 1151 | "execution_count": 16, 1152 | "metadata": {}, 1153 | "output_type": "execute_result" 1154 | }, 1155 | { 1156 | "data": { 1157 | "text/plain": [ 1158 | "Progress: 308.015625 / 453.125\t\n" 1159 | ] 1160 | }, 1161 | "execution_count": 16, 1162 | "metadata": {}, 1163 | "output_type": "execute_result" 1164 | }, 1165 | { 1166 | "data": { 1167 | "text/plain": [ 1168 | "Progress: 353.015625 / 453.125\t\n" 1169 | ] 1170 | }, 1171 | "execution_count": 16, 1172 | "metadata": {}, 1173 | "output_type": "execute_result" 1174 | }, 1175 | { 1176 | "data": { 1177 | "text/plain": [ 1178 | "Progress: 397.015625 / 453.125\t\n" 1179 | ] 1180 | }, 1181 | "execution_count": 16, 1182 | "metadata": {}, 1183 | "output_type": "execute_result" 1184 | }, 1185 | { 1186 | "data": { 1187 | "text/plain": [ 1188 | "Progress: 443.015625 / 453.125\t\n" 1189 | ] 1190 | }, 1191 | "execution_count": 16, 1192 | "metadata": {}, 1193 | "output_type": "execute_result" 1194 | }, 1195 | { 1196 | "data": { 1197 | "text/plain": [ 1198 | "loss\t50.09030057277\t\n", 1199 | "train\t98.379802955665\t\n" 1200 | ] 1201 | }, 1202 | "execution_count": 16, 1203 | "metadata": {}, 1204 | "output_type": "execute_result" 1205 | }, 1206 | { 1207 | "data": { 1208 | "text/plain": [ 1209 | "v\t97.242857142857\tmaxv\t97.528571428571\t\n", 1210 | "{\n", 1211 | " 1 : 99.6\n", 1212 | " 2 : 96.8\n", 1213 | " 3 : 94\n", 1214 | " 4 : 95.6\n", 1215 | " 5 : 96.5\n", 1216 | " 6 : 98.6\n", 1217 | " 7 : 99.6\n", 1218 | "}\n", 1219 | "11:44:33 IST\t\n", 1220 | "11:44:33 IST\t\n", 1221 | "8\t8\t\n" 1222 | ] 1223 | }, 1224 | "execution_count": 16, 1225 | "metadata": {}, 1226 | "output_type": "execute_result" 1227 | }, 1228 | { 1229 | "data": { 1230 | "text/plain": [ 1231 | "Progress: 29.015625 / 453.125\t\n" 1232 | ] 1233 | }, 1234 | "execution_count": 16, 1235 | "metadata": {}, 1236 | "output_type": "execute_result" 1237 | }, 1238 | { 1239 | "data": { 1240 | "text/plain": [ 1241 | "Progress: 74.015625 / 453.125\t\n" 1242 | ] 1243 | }, 1244 | "execution_count": 16, 1245 | "metadata": {}, 1246 | "output_type": "execute_result" 1247 | }, 1248 | { 1249 | "data": { 1250 | "text/plain": [ 1251 | "Progress: 119.015625 / 453.125\t\n" 1252 | ] 1253 | }, 1254 | "execution_count": 16, 1255 | "metadata": {}, 1256 | "output_type": "execute_result" 1257 | }, 1258 | { 1259 | "data": { 1260 | "text/plain": [ 1261 | "Progress: 165.015625 / 453.125\t\n" 1262 | ] 1263 | }, 1264 | "execution_count": 16, 1265 | "metadata": {}, 1266 | "output_type": "execute_result" 1267 | }, 1268 | { 1269 | "data": { 1270 | "text/plain": [ 1271 | "Progress: 211.015625 / 453.125\t\n" 1272 | ] 1273 | }, 1274 | "execution_count": 16, 1275 | "metadata": {}, 1276 | "output_type": "execute_result" 1277 | }, 1278 | { 1279 | "data": { 1280 | "text/plain": [ 1281 | "Progress: 257.015625 / 453.125\t\n" 1282 | ] 1283 | }, 1284 | "execution_count": 16, 1285 | "metadata": {}, 1286 | "output_type": "execute_result" 1287 | }, 1288 | { 1289 | "data": { 1290 | "text/plain": [ 1291 | "Progress: 303.015625 / 453.125\t\n" 1292 | ] 1293 | }, 1294 | "execution_count": 16, 1295 | "metadata": {}, 1296 | "output_type": "execute_result" 1297 | }, 1298 | { 1299 | "data": { 1300 | "text/plain": [ 1301 | "Progress: 349.015625 / 453.125\t\n" 1302 | ] 1303 | }, 1304 | "execution_count": 16, 1305 | "metadata": {}, 1306 | "output_type": "execute_result" 1307 | }, 1308 | { 1309 | "data": { 1310 | "text/plain": [ 1311 | "Progress: 395.015625 / 453.125\t\n" 1312 | ] 1313 | }, 1314 | "execution_count": 16, 1315 | "metadata": {}, 1316 | "output_type": "execute_result" 1317 | }, 1318 | { 1319 | "data": { 1320 | "text/plain": [ 1321 | "Progress: 441.015625 / 453.125\t\n" 1322 | ] 1323 | }, 1324 | "execution_count": 16, 1325 | "metadata": {}, 1326 | "output_type": "execute_result" 1327 | }, 1328 | { 1329 | "data": { 1330 | "text/plain": [ 1331 | "loss\t49.389657061015\t\n", 1332 | "train\t98.445320197044\t\n" 1333 | ] 1334 | }, 1335 | "execution_count": 16, 1336 | "metadata": {}, 1337 | "output_type": "execute_result" 1338 | }, 1339 | { 1340 | "data": { 1341 | "text/plain": [ 1342 | "v\t97.214285714286\tmaxv\t97.528571428571\t\n", 1343 | "{\n", 1344 | " 1 : 99.6\n", 1345 | " 2 : 96.8\n", 1346 | " 3 : 94.1\n", 1347 | " 4 : 95.4\n", 1348 | " 5 : 96.4\n", 1349 | " 6 : 98.6\n", 1350 | " 7 : 99.6\n", 1351 | "}\n", 1352 | "11:47:05 IST\t\n", 1353 | "97.528571428571\t\n", 1354 | "\n" 1355 | ] 1356 | }, 1357 | "execution_count": 16, 1358 | "metadata": {}, 1359 | "output_type": "execute_result" 1360 | } 1361 | ], 1362 | "source": [ 1363 | "rutil.train(dec,criterion,Xt,Yt,Xv,Yv,8,64,tnet,0.01)" 1364 | ] 1365 | }, 1366 | { 1367 | "cell_type": "code", 1368 | "execution_count": 17, 1369 | "metadata": { 1370 | "collapsed": false 1371 | }, 1372 | "outputs": [ 1373 | { 1374 | "data": { 1375 | "text/plain": [ 1376 | "11:49:09 IST\t\n", 1377 | "1\t8\t\n" 1378 | ] 1379 | }, 1380 | "execution_count": 17, 1381 | "metadata": {}, 1382 | "output_type": "execute_result" 1383 | }, 1384 | { 1385 | "data": { 1386 | "text/plain": [ 1387 | "Progress: 28.015625 / 453.125\t\n" 1388 | ] 1389 | }, 1390 | "execution_count": 17, 1391 | "metadata": {}, 1392 | "output_type": "execute_result" 1393 | }, 1394 | { 1395 | "data": { 1396 | "text/plain": [ 1397 | "Progress: 73.015625 / 453.125\t\n" 1398 | ] 1399 | }, 1400 | "execution_count": 17, 1401 | "metadata": {}, 1402 | "output_type": "execute_result" 1403 | }, 1404 | { 1405 | "data": { 1406 | "text/plain": [ 1407 | "Progress: 118.015625 / 453.125\t\n" 1408 | ] 1409 | }, 1410 | "execution_count": 17, 1411 | "metadata": {}, 1412 | "output_type": "execute_result" 1413 | }, 1414 | { 1415 | "data": { 1416 | "text/plain": [ 1417 | "Progress: 163.015625 / 453.125\t\n" 1418 | ] 1419 | }, 1420 | "execution_count": 17, 1421 | "metadata": {}, 1422 | "output_type": "execute_result" 1423 | }, 1424 | { 1425 | "data": { 1426 | "text/plain": [ 1427 | "Progress: 208.015625 / 453.125\t\n" 1428 | ] 1429 | }, 1430 | "execution_count": 17, 1431 | "metadata": {}, 1432 | "output_type": "execute_result" 1433 | }, 1434 | { 1435 | "data": { 1436 | "text/plain": [ 1437 | "Progress: 254.015625 / 453.125\t\n" 1438 | ] 1439 | }, 1440 | "execution_count": 17, 1441 | "metadata": {}, 1442 | "output_type": "execute_result" 1443 | }, 1444 | { 1445 | "data": { 1446 | "text/plain": [ 1447 | "Progress: 300.015625 / 453.125\t\n" 1448 | ] 1449 | }, 1450 | "execution_count": 17, 1451 | "metadata": {}, 1452 | "output_type": "execute_result" 1453 | }, 1454 | { 1455 | "data": { 1456 | "text/plain": [ 1457 | "Progress: 345.015625 / 453.125\t\n" 1458 | ] 1459 | }, 1460 | "execution_count": 17, 1461 | "metadata": {}, 1462 | "output_type": "execute_result" 1463 | }, 1464 | { 1465 | "data": { 1466 | "text/plain": [ 1467 | "Progress: 391.015625 / 453.125\t\n" 1468 | ] 1469 | }, 1470 | "execution_count": 17, 1471 | "metadata": {}, 1472 | "output_type": "execute_result" 1473 | }, 1474 | { 1475 | "data": { 1476 | "text/plain": [ 1477 | "Progress: 436.015625 / 453.125\t\n" 1478 | ] 1479 | }, 1480 | "execution_count": 17, 1481 | "metadata": {}, 1482 | "output_type": "execute_result" 1483 | }, 1484 | { 1485 | "data": { 1486 | "text/plain": [ 1487 | "loss\t48.74917012666\t\n", 1488 | "train\t98.492118226601\t\n" 1489 | ] 1490 | }, 1491 | "execution_count": 17, 1492 | "metadata": {}, 1493 | "output_type": "execute_result" 1494 | }, 1495 | { 1496 | "data": { 1497 | "text/plain": [ 1498 | "v\t" 1499 | ] 1500 | }, 1501 | "execution_count": 17, 1502 | "metadata": {}, 1503 | "output_type": "execute_result" 1504 | }, 1505 | { 1506 | "data": { 1507 | "text/plain": [ 1508 | "97.171428571429\tmaxv\t97.171428571429\t\n", 1509 | "{\n", 1510 | " 1 : 99.6\n", 1511 | " 2 : 96.8\n", 1512 | " 3 : 94.1\n", 1513 | " 4 : 95.4\n", 1514 | " 5 : 96.2\n", 1515 | " 6 : 98.5\n", 1516 | " 7 : 99.6\n", 1517 | "}\n", 1518 | "11:51:43 IST\t\n", 1519 | "11:51:43 IST\t\n", 1520 | "2\t8\t\n" 1521 | ] 1522 | }, 1523 | "execution_count": 17, 1524 | "metadata": {}, 1525 | "output_type": "execute_result" 1526 | }, 1527 | { 1528 | "data": { 1529 | "text/plain": [ 1530 | "Progress: 22.015625 / 453.125\t\n" 1531 | ] 1532 | }, 1533 | "execution_count": 17, 1534 | "metadata": {}, 1535 | "output_type": "execute_result" 1536 | }, 1537 | { 1538 | "data": { 1539 | "text/plain": [ 1540 | "Progress: 67.015625 / 453.125\t\n" 1541 | ] 1542 | }, 1543 | "execution_count": 17, 1544 | "metadata": {}, 1545 | "output_type": "execute_result" 1546 | }, 1547 | { 1548 | "data": { 1549 | "text/plain": [ 1550 | "Progress: 113.015625 / 453.125\t\n" 1551 | ] 1552 | }, 1553 | "execution_count": 17, 1554 | "metadata": {}, 1555 | "output_type": "execute_result" 1556 | }, 1557 | { 1558 | "data": { 1559 | "text/plain": [ 1560 | "Progress: 159.015625 / 453.125\t\n" 1561 | ] 1562 | }, 1563 | "execution_count": 17, 1564 | "metadata": {}, 1565 | "output_type": "execute_result" 1566 | }, 1567 | { 1568 | "data": { 1569 | "text/plain": [ 1570 | "Progress: 204.015625 / 453.125\t\n" 1571 | ] 1572 | }, 1573 | "execution_count": 17, 1574 | "metadata": {}, 1575 | "output_type": "execute_result" 1576 | }, 1577 | { 1578 | "data": { 1579 | "text/plain": [ 1580 | "Progress: 249.015625 / 453.125\t\n" 1581 | ] 1582 | }, 1583 | "execution_count": 17, 1584 | "metadata": {}, 1585 | "output_type": "execute_result" 1586 | }, 1587 | { 1588 | "data": { 1589 | "text/plain": [ 1590 | "Progress: 294.015625 / 453.125\t\n" 1591 | ] 1592 | }, 1593 | "execution_count": 17, 1594 | "metadata": {}, 1595 | "output_type": "execute_result" 1596 | }, 1597 | { 1598 | "data": { 1599 | "text/plain": [ 1600 | "Progress: 340.015625 / 453.125\t\n" 1601 | ] 1602 | }, 1603 | "execution_count": 17, 1604 | "metadata": {}, 1605 | "output_type": "execute_result" 1606 | }, 1607 | { 1608 | "data": { 1609 | "text/plain": [ 1610 | "Progress: 385.015625 / 453.125\t\n" 1611 | ] 1612 | }, 1613 | "execution_count": 17, 1614 | "metadata": {}, 1615 | "output_type": "execute_result" 1616 | }, 1617 | { 1618 | "data": { 1619 | "text/plain": [ 1620 | "Progress: 430.015625 / 453.125\t\n" 1621 | ] 1622 | }, 1623 | "execution_count": 17, 1624 | "metadata": {}, 1625 | "output_type": "execute_result" 1626 | }, 1627 | { 1628 | "data": { 1629 | "text/plain": [ 1630 | "loss\t48.157513020294\t\n", 1631 | "train\t98.541379310345\t\n" 1632 | ] 1633 | }, 1634 | "execution_count": 17, 1635 | "metadata": {}, 1636 | "output_type": "execute_result" 1637 | }, 1638 | { 1639 | "data": { 1640 | "text/plain": [ 1641 | "v\t97.128571428571\tmaxv\t97.171428571429\t\n", 1642 | "{\n", 1643 | " 1 : 99.6\n", 1644 | " 2 : 96.6\n", 1645 | " 3 : 93.9\n", 1646 | " 4 : 95.5\n", 1647 | " 5 : 96.2\n", 1648 | " 6 : 98.5\n", 1649 | " 7 : 99.6\n", 1650 | "}\n", 1651 | "11:54:17 IST\t\n", 1652 | "11:54:17 IST\t\n", 1653 | "3\t8\t\n" 1654 | ] 1655 | }, 1656 | "execution_count": 17, 1657 | "metadata": {}, 1658 | "output_type": "execute_result" 1659 | }, 1660 | { 1661 | "data": { 1662 | "text/plain": [ 1663 | "Progress: 16.015625 / 453.125\t\n" 1664 | ] 1665 | }, 1666 | "execution_count": 17, 1667 | "metadata": {}, 1668 | "output_type": "execute_result" 1669 | }, 1670 | { 1671 | "data": { 1672 | "text/plain": [ 1673 | "Progress: 62.015625 / 453.125\t\n" 1674 | ] 1675 | }, 1676 | "execution_count": 17, 1677 | "metadata": {}, 1678 | "output_type": "execute_result" 1679 | }, 1680 | { 1681 | "data": { 1682 | "text/plain": [ 1683 | "Progress: 108.015625 / 453.125\t\n" 1684 | ] 1685 | }, 1686 | "execution_count": 17, 1687 | "metadata": {}, 1688 | "output_type": "execute_result" 1689 | }, 1690 | { 1691 | "data": { 1692 | "text/plain": [ 1693 | "Progress: 153.015625 / 453.125\t\n" 1694 | ] 1695 | }, 1696 | "execution_count": 17, 1697 | "metadata": {}, 1698 | "output_type": "execute_result" 1699 | }, 1700 | { 1701 | "data": { 1702 | "text/plain": [ 1703 | "Progress: 199.015625 / 453.125\t\n" 1704 | ] 1705 | }, 1706 | "execution_count": 17, 1707 | "metadata": {}, 1708 | "output_type": "execute_result" 1709 | }, 1710 | { 1711 | "data": { 1712 | "text/plain": [ 1713 | "Progress: 244.015625 / 453.125\t\n" 1714 | ] 1715 | }, 1716 | "execution_count": 17, 1717 | "metadata": {}, 1718 | "output_type": "execute_result" 1719 | }, 1720 | { 1721 | "data": { 1722 | "text/plain": [ 1723 | "Progress: 289.015625 / 453.125\t\n" 1724 | ] 1725 | }, 1726 | "execution_count": 17, 1727 | "metadata": {}, 1728 | "output_type": "execute_result" 1729 | }, 1730 | { 1731 | "data": { 1732 | "text/plain": [ 1733 | "Progress: 335.015625 / 453.125\t\n" 1734 | ] 1735 | }, 1736 | "execution_count": 17, 1737 | "metadata": {}, 1738 | "output_type": "execute_result" 1739 | }, 1740 | { 1741 | "data": { 1742 | "text/plain": [ 1743 | "Progress: 381.015625 / 453.125\t\n" 1744 | ] 1745 | }, 1746 | "execution_count": 17, 1747 | "metadata": {}, 1748 | "output_type": "execute_result" 1749 | }, 1750 | { 1751 | "data": { 1752 | "text/plain": [ 1753 | "Progress: 427.015625 / 453.125\t\n" 1754 | ] 1755 | }, 1756 | "execution_count": 17, 1757 | "metadata": {}, 1758 | "output_type": "execute_result" 1759 | }, 1760 | { 1761 | "data": { 1762 | "text/plain": [ 1763 | "loss\t47.604706232037\t\n", 1764 | "train\t98.587684729064\t\n" 1765 | ] 1766 | }, 1767 | "execution_count": 17, 1768 | "metadata": {}, 1769 | "output_type": "execute_result" 1770 | }, 1771 | { 1772 | "data": { 1773 | "text/plain": [ 1774 | "v\t97.114285714286\tmaxv\t97.171428571429\t\n", 1775 | "{\n", 1776 | " 1 : 99.6\n", 1777 | " 2 : 96.6\n" 1778 | ] 1779 | }, 1780 | "execution_count": 17, 1781 | "metadata": {}, 1782 | "output_type": "execute_result" 1783 | }, 1784 | { 1785 | "data": { 1786 | "text/plain": [ 1787 | " 3 : 93.9\n", 1788 | " 4 : 95.4\n", 1789 | " 5 : 96.2\n", 1790 | " 6 : 98.5\n", 1791 | " 7 : 99.6\n", 1792 | "}\n", 1793 | "11:56:50 IST\t\n", 1794 | "11:56:50 IST\t\n", 1795 | "4\t8\t\n" 1796 | ] 1797 | }, 1798 | "execution_count": 17, 1799 | "metadata": {}, 1800 | "output_type": "execute_result" 1801 | }, 1802 | { 1803 | "data": { 1804 | "text/plain": [ 1805 | "Progress: 14.015625 / 453.125\t\n" 1806 | ] 1807 | }, 1808 | "execution_count": 17, 1809 | "metadata": {}, 1810 | "output_type": "execute_result" 1811 | }, 1812 | { 1813 | "data": { 1814 | "text/plain": [ 1815 | "Progress: 59.015625 / 453.125\t\n" 1816 | ] 1817 | }, 1818 | "execution_count": 17, 1819 | "metadata": {}, 1820 | "output_type": "execute_result" 1821 | }, 1822 | { 1823 | "data": { 1824 | "text/plain": [ 1825 | "Progress: 104.015625 / 453.125\t\n" 1826 | ] 1827 | }, 1828 | "execution_count": 17, 1829 | "metadata": {}, 1830 | "output_type": "execute_result" 1831 | }, 1832 | { 1833 | "data": { 1834 | "text/plain": [ 1835 | "Progress: 150.015625 / 453.125\t\n" 1836 | ] 1837 | }, 1838 | "execution_count": 17, 1839 | "metadata": {}, 1840 | "output_type": "execute_result" 1841 | }, 1842 | { 1843 | "data": { 1844 | "text/plain": [ 1845 | "Progress: 196.015625 / 453.125\t\n" 1846 | ] 1847 | }, 1848 | "execution_count": 17, 1849 | "metadata": {}, 1850 | "output_type": "execute_result" 1851 | }, 1852 | { 1853 | "data": { 1854 | "text/plain": [ 1855 | "Progress: 241.015625 / 453.125\t\n" 1856 | ] 1857 | }, 1858 | "execution_count": 17, 1859 | "metadata": {}, 1860 | "output_type": "execute_result" 1861 | }, 1862 | { 1863 | "data": { 1864 | "text/plain": [ 1865 | "Progress: 286.015625 / 453.125\t\n" 1866 | ] 1867 | }, 1868 | "execution_count": 17, 1869 | "metadata": {}, 1870 | "output_type": "execute_result" 1871 | }, 1872 | { 1873 | "data": { 1874 | "text/plain": [ 1875 | "Progress: 332.015625 / 453.125\t\n" 1876 | ] 1877 | }, 1878 | "execution_count": 17, 1879 | "metadata": {}, 1880 | "output_type": "execute_result" 1881 | }, 1882 | { 1883 | "data": { 1884 | "text/plain": [ 1885 | "Progress: 377.015625 / 453.125\t\n" 1886 | ] 1887 | }, 1888 | "execution_count": 17, 1889 | "metadata": {}, 1890 | "output_type": "execute_result" 1891 | }, 1892 | { 1893 | "data": { 1894 | "text/plain": [ 1895 | "Progress: 422.015625 / 453.125\t\n" 1896 | ] 1897 | }, 1898 | "execution_count": 17, 1899 | "metadata": {}, 1900 | "output_type": "execute_result" 1901 | }, 1902 | { 1903 | "data": { 1904 | "text/plain": [ 1905 | "loss\t47.080625324377\t\n", 1906 | "train\t98.632512315271\t\n" 1907 | ] 1908 | }, 1909 | "execution_count": 17, 1910 | "metadata": {}, 1911 | "output_type": "execute_result" 1912 | }, 1913 | { 1914 | "data": { 1915 | "text/plain": [ 1916 | "v\t97.1\tmaxv\t97.171428571429\t\n", 1917 | "{\n", 1918 | " 1 : 99.6\n", 1919 | " 2 : 96.7\n", 1920 | " 3 : 93.8\n", 1921 | " 4 : 95.5\n", 1922 | " 5 : 96.1\n", 1923 | " 6 : 98.4\n", 1924 | " 7 : 99.6\n", 1925 | "}\n", 1926 | "11:59:24 IST\t\n", 1927 | "11:59:24 IST\t\n", 1928 | "5\t8\t\n" 1929 | ] 1930 | }, 1931 | "execution_count": 17, 1932 | "metadata": {}, 1933 | "output_type": "execute_result" 1934 | }, 1935 | { 1936 | "data": { 1937 | "text/plain": [ 1938 | "Progress: 8.015625 / 453.125\t\n" 1939 | ] 1940 | }, 1941 | "execution_count": 17, 1942 | "metadata": {}, 1943 | "output_type": "execute_result" 1944 | }, 1945 | { 1946 | "data": { 1947 | "text/plain": [ 1948 | "Progress: 54.015625 / 453.125\t\n" 1949 | ] 1950 | }, 1951 | "execution_count": 17, 1952 | "metadata": {}, 1953 | "output_type": "execute_result" 1954 | }, 1955 | { 1956 | "data": { 1957 | "text/plain": [ 1958 | "Progress: 99.015625 / 453.125\t\n" 1959 | ] 1960 | }, 1961 | "execution_count": 17, 1962 | "metadata": {}, 1963 | "output_type": "execute_result" 1964 | }, 1965 | { 1966 | "data": { 1967 | "text/plain": [ 1968 | "Progress: 144.015625 / 453.125\t\n" 1969 | ] 1970 | }, 1971 | "execution_count": 17, 1972 | "metadata": {}, 1973 | "output_type": "execute_result" 1974 | }, 1975 | { 1976 | "data": { 1977 | "text/plain": [ 1978 | "Progress: 189.015625 / 453.125\t\n" 1979 | ] 1980 | }, 1981 | "execution_count": 17, 1982 | "metadata": {}, 1983 | "output_type": "execute_result" 1984 | }, 1985 | { 1986 | "data": { 1987 | "text/plain": [ 1988 | "Progress: 234.015625 / 453.125\t\n" 1989 | ] 1990 | }, 1991 | "execution_count": 17, 1992 | "metadata": {}, 1993 | "output_type": "execute_result" 1994 | }, 1995 | { 1996 | "data": { 1997 | "text/plain": [ 1998 | "Progress: 279.015625 / 453.125\t\n" 1999 | ] 2000 | }, 2001 | "execution_count": 17, 2002 | "metadata": {}, 2003 | "output_type": "execute_result" 2004 | }, 2005 | { 2006 | "data": { 2007 | "text/plain": [ 2008 | "Progress: 324.015625 / 453.125\t\n" 2009 | ] 2010 | }, 2011 | "execution_count": 17, 2012 | "metadata": {}, 2013 | "output_type": "execute_result" 2014 | }, 2015 | { 2016 | "data": { 2017 | "text/plain": [ 2018 | "Progress: 369.015625 / 453.125\t\n" 2019 | ] 2020 | }, 2021 | "execution_count": 17, 2022 | "metadata": {}, 2023 | "output_type": "execute_result" 2024 | }, 2025 | { 2026 | "data": { 2027 | "text/plain": [ 2028 | "Progress: 415.015625 / 453.125\t\n" 2029 | ] 2030 | }, 2031 | "execution_count": 17, 2032 | "metadata": {}, 2033 | "output_type": "execute_result" 2034 | }, 2035 | { 2036 | "data": { 2037 | "text/plain": [ 2038 | "loss\t46.5796600527\t\n", 2039 | "train\t98.676354679803\t\n" 2040 | ] 2041 | }, 2042 | "execution_count": 17, 2043 | "metadata": {}, 2044 | "output_type": "execute_result" 2045 | }, 2046 | { 2047 | "data": { 2048 | "text/plain": [ 2049 | "v\t97.114285714286\tmaxv\t97.171428571429\t\n", 2050 | "{\n", 2051 | " 1 : 99.6\n", 2052 | " 2 : 96.7\n", 2053 | " 3 : 93.9\n", 2054 | " 4 : 95.5\n", 2055 | " 5 : 96\n", 2056 | " 6 : 98.5\n", 2057 | " 7 : 99.6\n", 2058 | "}\n", 2059 | "12:01:58 IST\t\n", 2060 | "12:01:58 IST\t\n", 2061 | "6\t8\t\n" 2062 | ] 2063 | }, 2064 | "execution_count": 17, 2065 | "metadata": {}, 2066 | "output_type": "execute_result" 2067 | }, 2068 | { 2069 | "data": { 2070 | "text/plain": [ 2071 | "Progress: 1.015625 / 453.125\t\n" 2072 | ] 2073 | }, 2074 | "execution_count": 17, 2075 | "metadata": {}, 2076 | "output_type": "execute_result" 2077 | }, 2078 | { 2079 | "data": { 2080 | "text/plain": [ 2081 | "Progress: 46.015625 / 453.125\t\n" 2082 | ] 2083 | }, 2084 | "execution_count": 17, 2085 | "metadata": {}, 2086 | "output_type": "execute_result" 2087 | }, 2088 | { 2089 | "data": { 2090 | "text/plain": [ 2091 | "Progress: 92.015625 / 453.125\t\n" 2092 | ] 2093 | }, 2094 | "execution_count": 17, 2095 | "metadata": {}, 2096 | "output_type": "execute_result" 2097 | }, 2098 | { 2099 | "data": { 2100 | "text/plain": [ 2101 | "Progress: 138.015625 / 453.125\t\n" 2102 | ] 2103 | }, 2104 | "execution_count": 17, 2105 | "metadata": {}, 2106 | "output_type": "execute_result" 2107 | }, 2108 | { 2109 | "data": { 2110 | "text/plain": [ 2111 | "Progress: 184.015625 / 453.125\t\n" 2112 | ] 2113 | }, 2114 | "execution_count": 17, 2115 | "metadata": {}, 2116 | "output_type": "execute_result" 2117 | }, 2118 | { 2119 | "data": { 2120 | "text/plain": [ 2121 | "Progress: 230.015625 / 453.125\t\n" 2122 | ] 2123 | }, 2124 | "execution_count": 17, 2125 | "metadata": {}, 2126 | "output_type": "execute_result" 2127 | }, 2128 | { 2129 | "data": { 2130 | "text/plain": [ 2131 | "Progress: 276.015625 / 453.125\t\n" 2132 | ] 2133 | }, 2134 | "execution_count": 17, 2135 | "metadata": {}, 2136 | "output_type": "execute_result" 2137 | }, 2138 | { 2139 | "data": { 2140 | "text/plain": [ 2141 | "Progress: 322.015625 / 453.125\t\n" 2142 | ] 2143 | }, 2144 | "execution_count": 17, 2145 | "metadata": {}, 2146 | "output_type": "execute_result" 2147 | }, 2148 | { 2149 | "data": { 2150 | "text/plain": [ 2151 | "Progress: 368.015625 / 453.125\t\n" 2152 | ] 2153 | }, 2154 | "execution_count": 17, 2155 | "metadata": {}, 2156 | "output_type": "execute_result" 2157 | }, 2158 | { 2159 | "data": { 2160 | "text/plain": [ 2161 | "Progress: 413.015625 / 453.125\t\n" 2162 | ] 2163 | }, 2164 | "execution_count": 17, 2165 | "metadata": {}, 2166 | "output_type": "execute_result" 2167 | }, 2168 | { 2169 | "data": { 2170 | "text/plain": [ 2171 | "loss\t46.101408153772\t\n", 2172 | "train\t98.708374384236\t\n" 2173 | ] 2174 | }, 2175 | "execution_count": 17, 2176 | "metadata": {}, 2177 | "output_type": "execute_result" 2178 | }, 2179 | { 2180 | "data": { 2181 | "text/plain": [ 2182 | "Progress: 45.0625 / 62.5\t\n" 2183 | ] 2184 | }, 2185 | "execution_count": 17, 2186 | "metadata": {}, 2187 | "output_type": "execute_result" 2188 | }, 2189 | { 2190 | "data": { 2191 | "text/plain": [ 2192 | "v\t97.1\tmaxv\t97.171428571429\t\n", 2193 | "{\n", 2194 | " 1 : 99.6\n", 2195 | " 2 : 96.7\n", 2196 | " 3 : 94\n", 2197 | " 4 : 95.4\n", 2198 | " 5 : 96.2\n", 2199 | " 6 : 98.2\n", 2200 | " 7 : 99.6\n", 2201 | "}\n", 2202 | "12:04:31 IST\t\n", 2203 | "12:04:31 IST\t\n", 2204 | "7\t8\t\n" 2205 | ] 2206 | }, 2207 | "execution_count": 17, 2208 | "metadata": {}, 2209 | "output_type": "execute_result" 2210 | }, 2211 | { 2212 | "data": { 2213 | "text/plain": [ 2214 | "Progress: 44.015625 / 453.125\t\n" 2215 | ] 2216 | }, 2217 | "execution_count": 17, 2218 | "metadata": {}, 2219 | "output_type": "execute_result" 2220 | }, 2221 | { 2222 | "data": { 2223 | "text/plain": [ 2224 | "Progress: 89.015625 / 453.125\t\n" 2225 | ] 2226 | }, 2227 | "execution_count": 17, 2228 | "metadata": {}, 2229 | "output_type": "execute_result" 2230 | }, 2231 | { 2232 | "data": { 2233 | "text/plain": [ 2234 | "Progress: 135.015625 / 453.125\t\n" 2235 | ] 2236 | }, 2237 | "execution_count": 17, 2238 | "metadata": {}, 2239 | "output_type": "execute_result" 2240 | }, 2241 | { 2242 | "data": { 2243 | "text/plain": [ 2244 | "Progress: 180.015625 / 453.125\t\n" 2245 | ] 2246 | }, 2247 | "execution_count": 17, 2248 | "metadata": {}, 2249 | "output_type": "execute_result" 2250 | }, 2251 | { 2252 | "data": { 2253 | "text/plain": [ 2254 | "Progress: 225.015625 / 453.125\t\n" 2255 | ] 2256 | }, 2257 | "execution_count": 17, 2258 | "metadata": {}, 2259 | "output_type": "execute_result" 2260 | }, 2261 | { 2262 | "data": { 2263 | "text/plain": [ 2264 | "Progress: 271.015625 / 453.125\t\n" 2265 | ] 2266 | }, 2267 | "execution_count": 17, 2268 | "metadata": {}, 2269 | "output_type": "execute_result" 2270 | }, 2271 | { 2272 | "data": { 2273 | "text/plain": [ 2274 | "Progress: 317.015625 / 453.125\t\n" 2275 | ] 2276 | }, 2277 | "execution_count": 17, 2278 | "metadata": {}, 2279 | "output_type": "execute_result" 2280 | }, 2281 | { 2282 | "data": { 2283 | "text/plain": [ 2284 | "Progress: 363.015625 / 453.125\t\n" 2285 | ] 2286 | }, 2287 | "execution_count": 17, 2288 | "metadata": {}, 2289 | "output_type": "execute_result" 2290 | }, 2291 | { 2292 | "data": { 2293 | "text/plain": [ 2294 | "Progress: 409.015625 / 453.125\t\n" 2295 | ] 2296 | }, 2297 | "execution_count": 17, 2298 | "metadata": {}, 2299 | "output_type": "execute_result" 2300 | }, 2301 | { 2302 | "data": { 2303 | "text/plain": [ 2304 | "loss\t45.646901176444\t\n", 2305 | "train\t98.74236453202\t\n" 2306 | ] 2307 | }, 2308 | "execution_count": 17, 2309 | "metadata": {}, 2310 | "output_type": "execute_result" 2311 | }, 2312 | { 2313 | "data": { 2314 | "text/plain": [ 2315 | "Progress: 12.0625 / 62.5\t\n" 2316 | ] 2317 | }, 2318 | "execution_count": 17, 2319 | "metadata": {}, 2320 | "output_type": "execute_result" 2321 | }, 2322 | { 2323 | "data": { 2324 | "text/plain": [ 2325 | "v\t97.071428571429\tmaxv\t97.171428571429\t\n", 2326 | "{\n", 2327 | " 1 : 99.6\n", 2328 | " 2 : 96.7\n", 2329 | " 3 : 94\n", 2330 | " 4 : 95.4\n", 2331 | " 5 : 95.9\n", 2332 | " 6 : 98.3\n", 2333 | " 7 : 99.6\n", 2334 | "}\n", 2335 | "12:07:03 IST\t\n", 2336 | "12:07:03 IST\t\n", 2337 | "8\t8\t\n" 2338 | ] 2339 | }, 2340 | "execution_count": 17, 2341 | "metadata": {}, 2342 | "output_type": "execute_result" 2343 | }, 2344 | { 2345 | "data": { 2346 | "text/plain": [ 2347 | "Progress: 41.015625 / 453.125\t\n" 2348 | ] 2349 | }, 2350 | "execution_count": 17, 2351 | "metadata": {}, 2352 | "output_type": "execute_result" 2353 | }, 2354 | { 2355 | "data": { 2356 | "text/plain": [ 2357 | "Progress: 86.015625 / 453.125\t\n" 2358 | ] 2359 | }, 2360 | "execution_count": 17, 2361 | "metadata": {}, 2362 | "output_type": "execute_result" 2363 | }, 2364 | { 2365 | "data": { 2366 | "text/plain": [ 2367 | "Progress: 131.015625 / 453.125\t\n" 2368 | ] 2369 | }, 2370 | "execution_count": 17, 2371 | "metadata": {}, 2372 | "output_type": "execute_result" 2373 | }, 2374 | { 2375 | "data": { 2376 | "text/plain": [ 2377 | "Progress: 176.015625 / 453.125\t\n" 2378 | ] 2379 | }, 2380 | "execution_count": 17, 2381 | "metadata": {}, 2382 | "output_type": "execute_result" 2383 | }, 2384 | { 2385 | "data": { 2386 | "text/plain": [ 2387 | "Progress: 221.015625 / 453.125\t\n" 2388 | ] 2389 | }, 2390 | "execution_count": 17, 2391 | "metadata": {}, 2392 | "output_type": "execute_result" 2393 | }, 2394 | { 2395 | "data": { 2396 | "text/plain": [ 2397 | "Progress: 266.015625 / 453.125\t\n" 2398 | ] 2399 | }, 2400 | "execution_count": 17, 2401 | "metadata": {}, 2402 | "output_type": "execute_result" 2403 | }, 2404 | { 2405 | "data": { 2406 | "text/plain": [ 2407 | "Progress: 311.015625 / 453.125\t\n" 2408 | ] 2409 | }, 2410 | "execution_count": 17, 2411 | "metadata": {}, 2412 | "output_type": "execute_result" 2413 | }, 2414 | { 2415 | "data": { 2416 | "text/plain": [ 2417 | "Progress: 356.015625 / 453.125\t\n" 2418 | ] 2419 | }, 2420 | "execution_count": 17, 2421 | "metadata": {}, 2422 | "output_type": "execute_result" 2423 | }, 2424 | { 2425 | "data": { 2426 | "text/plain": [ 2427 | "Progress: 401.015625 / 453.125\t\n" 2428 | ] 2429 | }, 2430 | "execution_count": 17, 2431 | "metadata": {}, 2432 | "output_type": "execute_result" 2433 | }, 2434 | { 2435 | "data": { 2436 | "text/plain": [ 2437 | "Progress: 446.015625 / 453.125\t\n" 2438 | ] 2439 | }, 2440 | "execution_count": 17, 2441 | "metadata": {}, 2442 | "output_type": "execute_result" 2443 | }, 2444 | { 2445 | "data": { 2446 | "text/plain": [ 2447 | "loss\t45.20982479517\t\n", 2448 | "train\t98.778325123153\t\n" 2449 | ] 2450 | }, 2451 | "execution_count": 17, 2452 | "metadata": {}, 2453 | "output_type": "execute_result" 2454 | }, 2455 | { 2456 | "data": { 2457 | "text/plain": [ 2458 | "v\t97.085714285714\tmaxv\t97.171428571429\t\n", 2459 | "{\n", 2460 | " 1 : 99.6\n", 2461 | " 2 : 96.7\n", 2462 | " 3 : 94.1\n", 2463 | " 4 : 95.3\n", 2464 | " 5 : 96\n", 2465 | " 6 : 98.2\n", 2466 | " 7 : 99.7\n", 2467 | "}\n", 2468 | "12:09:39 IST\t\n", 2469 | "97.171428571429\t\n", 2470 | "\n" 2471 | ] 2472 | }, 2473 | "execution_count": 17, 2474 | "metadata": {}, 2475 | "output_type": "execute_result" 2476 | } 2477 | ], 2478 | "source": [ 2479 | "rutil.train(dec,criterion,Xt,Yt,Xv,Yv,8,64,tnet,0.01)" 2480 | ] 2481 | }, 2482 | { 2483 | "cell_type": "code", 2484 | "execution_count": null, 2485 | "metadata": { 2486 | "collapsed": false 2487 | }, 2488 | "outputs": [], 2489 | "source": [ 2490 | "torch.save('seq88.t7',dec)" 2491 | ] 2492 | }, 2493 | { 2494 | "cell_type": "code", 2495 | "execution_count": 30, 2496 | "metadata": { 2497 | "collapsed": false 2498 | }, 2499 | "outputs": [ 2500 | { 2501 | "data": { 2502 | "text/plain": [ 2503 | "44.1\t{\n", 2504 | "}\n" 2505 | ] 2506 | }, 2507 | "execution_count": 30, 2508 | "metadata": {}, 2509 | "output_type": "execute_result" 2510 | } 2511 | ], 2512 | "source": [ 2513 | "rutil.kvalid(dec,Xv,Yv,64,tnet)" 2514 | ] 2515 | }, 2516 | { 2517 | "cell_type": "code", 2518 | "execution_count": 18, 2519 | "metadata": { 2520 | "collapsed": false 2521 | }, 2522 | "outputs": [ 2523 | { 2524 | "data": { 2525 | "text/plain": [ 2526 | "12:09:39 IST\t\n", 2527 | "1\t8\t\n" 2528 | ] 2529 | }, 2530 | "execution_count": 18, 2531 | "metadata": {}, 2532 | "output_type": "execute_result" 2533 | }, 2534 | { 2535 | "data": { 2536 | "text/plain": [ 2537 | "Progress: 32.015625 / 453.125\t\n" 2538 | ] 2539 | }, 2540 | "execution_count": 18, 2541 | "metadata": {}, 2542 | "output_type": "execute_result" 2543 | }, 2544 | { 2545 | "data": { 2546 | "text/plain": [ 2547 | "Progress: 76.015625 / 453.125\t\n" 2548 | ] 2549 | }, 2550 | "execution_count": 18, 2551 | "metadata": {}, 2552 | "output_type": "execute_result" 2553 | }, 2554 | { 2555 | "data": { 2556 | "text/plain": [ 2557 | "Progress: 120.015625 / 453.125\t\n" 2558 | ] 2559 | }, 2560 | "execution_count": 18, 2561 | "metadata": {}, 2562 | "output_type": "execute_result" 2563 | }, 2564 | { 2565 | "data": { 2566 | "text/plain": [ 2567 | "Progress: 164.015625 / 453.125\t\n" 2568 | ] 2569 | }, 2570 | "execution_count": 18, 2571 | "metadata": {}, 2572 | "output_type": "execute_result" 2573 | }, 2574 | { 2575 | "data": { 2576 | "text/plain": [ 2577 | "Progress: 209.015625 / 453.125\t\n" 2578 | ] 2579 | }, 2580 | "execution_count": 18, 2581 | "metadata": {}, 2582 | "output_type": "execute_result" 2583 | }, 2584 | { 2585 | "data": { 2586 | "text/plain": [ 2587 | "Progress: 253.015625 / 453.125\t\n" 2588 | ] 2589 | }, 2590 | "execution_count": 18, 2591 | "metadata": {}, 2592 | "output_type": "execute_result" 2593 | }, 2594 | { 2595 | "data": { 2596 | "text/plain": [ 2597 | "Progress: 297.015625 / 453.125\t\n" 2598 | ] 2599 | }, 2600 | "execution_count": 18, 2601 | "metadata": {}, 2602 | "output_type": "execute_result" 2603 | }, 2604 | { 2605 | "data": { 2606 | "text/plain": [ 2607 | "Progress: 341.015625 / 453.125\t\n" 2608 | ] 2609 | }, 2610 | "execution_count": 18, 2611 | "metadata": {}, 2612 | "output_type": "execute_result" 2613 | }, 2614 | { 2615 | "data": { 2616 | "text/plain": [ 2617 | "Progress: 385.015625 / 453.125\t\n" 2618 | ] 2619 | }, 2620 | "execution_count": 18, 2621 | "metadata": {}, 2622 | "output_type": "execute_result" 2623 | }, 2624 | { 2625 | "data": { 2626 | "text/plain": [ 2627 | "Progress: 430.015625 / 453.125\t\n" 2628 | ] 2629 | }, 2630 | "execution_count": 18, 2631 | "metadata": {}, 2632 | "output_type": "execute_result" 2633 | }, 2634 | { 2635 | "data": { 2636 | "text/plain": [ 2637 | "loss\t232.96551122516\t\n", 2638 | "train\t85.614285714286\t\n" 2639 | ] 2640 | }, 2641 | "execution_count": 18, 2642 | "metadata": {}, 2643 | "output_type": "execute_result" 2644 | }, 2645 | { 2646 | "data": { 2647 | "text/plain": [ 2648 | "v\t57.1\tmaxv\t57.1\t\n", 2649 | "{\n", 2650 | " 1 : 65\n", 2651 | " 2 : 43.6\n", 2652 | " 3 : 34\n", 2653 | " 4 : 44.4\n", 2654 | " 5 : 50.3\n", 2655 | " 6 : 68.1\n", 2656 | " 7 : 94.3\n", 2657 | "}\n", 2658 | "12:12:17 IST\t\n", 2659 | "12:12:17 IST\t\n", 2660 | "2\t8\t\n" 2661 | ] 2662 | }, 2663 | "execution_count": 18, 2664 | "metadata": {}, 2665 | "output_type": "execute_result" 2666 | }, 2667 | { 2668 | "data": { 2669 | "text/plain": [ 2670 | "Progress: 16.015625 / 453.125\t\n" 2671 | ] 2672 | }, 2673 | "execution_count": 18, 2674 | "metadata": {}, 2675 | "output_type": "execute_result" 2676 | }, 2677 | { 2678 | "data": { 2679 | "text/plain": [ 2680 | "Progress: 61.015625 / 453.125\t\n" 2681 | ] 2682 | }, 2683 | "execution_count": 18, 2684 | "metadata": {}, 2685 | "output_type": "execute_result" 2686 | }, 2687 | { 2688 | "data": { 2689 | "text/plain": [ 2690 | "Progress: 106.015625 / 453.125\t\n" 2691 | ] 2692 | }, 2693 | "execution_count": 18, 2694 | "metadata": {}, 2695 | "output_type": "execute_result" 2696 | }, 2697 | { 2698 | "data": { 2699 | "text/plain": [ 2700 | "Progress: 151.015625 / 453.125\t\n" 2701 | ] 2702 | }, 2703 | "execution_count": 18, 2704 | "metadata": {}, 2705 | "output_type": "execute_result" 2706 | }, 2707 | { 2708 | "data": { 2709 | "text/plain": [ 2710 | "Progress: 196.015625 / 453.125\t\n" 2711 | ] 2712 | }, 2713 | "execution_count": 18, 2714 | "metadata": {}, 2715 | "output_type": "execute_result" 2716 | }, 2717 | { 2718 | "data": { 2719 | "text/plain": [ 2720 | "Progress: 241.015625 / 453.125\t\n" 2721 | ] 2722 | }, 2723 | "execution_count": 18, 2724 | "metadata": {}, 2725 | "output_type": "execute_result" 2726 | }, 2727 | { 2728 | "data": { 2729 | "text/plain": [ 2730 | "Progress: 286.015625 / 453.125\t\n" 2731 | ] 2732 | }, 2733 | "execution_count": 18, 2734 | "metadata": {}, 2735 | "output_type": "execute_result" 2736 | }, 2737 | { 2738 | "data": { 2739 | "text/plain": [ 2740 | "Progress: 331.015625 / 453.125\t\n" 2741 | ] 2742 | }, 2743 | "execution_count": 18, 2744 | "metadata": {}, 2745 | "output_type": "execute_result" 2746 | }, 2747 | { 2748 | "data": { 2749 | "text/plain": [ 2750 | "Progress: 376.015625 / 453.125\t\n" 2751 | ] 2752 | }, 2753 | "execution_count": 18, 2754 | "metadata": {}, 2755 | "output_type": "execute_result" 2756 | }, 2757 | { 2758 | "data": { 2759 | "text/plain": [ 2760 | "Progress: 422.015625 / 453.125\t\n" 2761 | ] 2762 | }, 2763 | "execution_count": 18, 2764 | "metadata": {}, 2765 | "output_type": "execute_result" 2766 | }, 2767 | { 2768 | "data": { 2769 | "text/plain": [ 2770 | "loss\t150.8840498722\t\n", 2771 | "train\t90.109852216749\t\n" 2772 | ] 2773 | }, 2774 | "execution_count": 18, 2775 | "metadata": {}, 2776 | "output_type": "execute_result" 2777 | }, 2778 | { 2779 | "data": { 2780 | "text/plain": [ 2781 | "v\t11.471428571429\tmaxv\t57.1\t\n", 2782 | "{\n", 2783 | " 1 : 17.9\n", 2784 | " 2 : 25.8\n", 2785 | " 3 : 12.8\n", 2786 | " 4 : 6.3\n", 2787 | " 5 : 5.5\n", 2788 | " 6 : 3.8\n", 2789 | " 7 : 8.2\n", 2790 | "}\n", 2791 | "12:14:52 IST\t\n", 2792 | "12:14:52 IST\t\n", 2793 | "3\t8\t\n" 2794 | ] 2795 | }, 2796 | "execution_count": 18, 2797 | "metadata": {}, 2798 | "output_type": "execute_result" 2799 | }, 2800 | { 2801 | "data": { 2802 | "text/plain": [ 2803 | "Progress: 9.015625 / 453.125\t\n" 2804 | ] 2805 | }, 2806 | "execution_count": 18, 2807 | "metadata": {}, 2808 | "output_type": "execute_result" 2809 | }, 2810 | { 2811 | "data": { 2812 | "text/plain": [ 2813 | "Progress: 54.015625 / 453.125\t\n" 2814 | ] 2815 | }, 2816 | "execution_count": 18, 2817 | "metadata": {}, 2818 | "output_type": "execute_result" 2819 | }, 2820 | { 2821 | "data": { 2822 | "text/plain": [ 2823 | "Progress: 98.015625 / 453.125\t\n" 2824 | ] 2825 | }, 2826 | "execution_count": 18, 2827 | "metadata": {}, 2828 | "output_type": "execute_result" 2829 | }, 2830 | { 2831 | "data": { 2832 | "text/plain": [ 2833 | "Progress: 143.015625 / 453.125\t\n" 2834 | ] 2835 | }, 2836 | "execution_count": 18, 2837 | "metadata": {}, 2838 | "output_type": "execute_result" 2839 | }, 2840 | { 2841 | "data": { 2842 | "text/plain": [ 2843 | "Progress: 187.015625 / 453.125\t\n" 2844 | ] 2845 | }, 2846 | "execution_count": 18, 2847 | "metadata": {}, 2848 | "output_type": "execute_result" 2849 | }, 2850 | { 2851 | "data": { 2852 | "text/plain": [ 2853 | "Progress: 231.015625 / 453.125\t\n" 2854 | ] 2855 | }, 2856 | "execution_count": 18, 2857 | "metadata": {}, 2858 | "output_type": "execute_result" 2859 | }, 2860 | { 2861 | "data": { 2862 | "text/plain": [ 2863 | "Progress: 275.015625 / 453.125\t\n" 2864 | ] 2865 | }, 2866 | "execution_count": 18, 2867 | "metadata": {}, 2868 | "output_type": "execute_result" 2869 | }, 2870 | { 2871 | "data": { 2872 | "text/plain": [ 2873 | "Progress: 319.015625 / 453.125\t\n" 2874 | ] 2875 | }, 2876 | "execution_count": 18, 2877 | "metadata": {}, 2878 | "output_type": "execute_result" 2879 | }, 2880 | { 2881 | "data": { 2882 | "text/plain": [ 2883 | "Progress: 363.015625 / 453.125\t\n" 2884 | ] 2885 | }, 2886 | "execution_count": 18, 2887 | "metadata": {}, 2888 | "output_type": "execute_result" 2889 | }, 2890 | { 2891 | "data": { 2892 | "text/plain": [ 2893 | "Progress: 408.015625 / 453.125\t\n" 2894 | ] 2895 | }, 2896 | "execution_count": 18, 2897 | "metadata": {}, 2898 | "output_type": "execute_result" 2899 | }, 2900 | { 2901 | "data": { 2902 | "text/plain": [ 2903 | "Progress: 453.015625 / 453.125\t\n" 2904 | ] 2905 | }, 2906 | "execution_count": 18, 2907 | "metadata": {}, 2908 | "output_type": "execute_result" 2909 | }, 2910 | { 2911 | "data": { 2912 | "text/plain": [ 2913 | "loss\t195.84596816983\t\n", 2914 | "train\t87.868472906404\t\n" 2915 | ] 2916 | }, 2917 | "execution_count": 18, 2918 | "metadata": {}, 2919 | "output_type": "execute_result" 2920 | }, 2921 | { 2922 | "data": { 2923 | "text/plain": [ 2924 | "v\t68.942857142857\tmaxv\t68.942857142857\t\n", 2925 | "{\n", 2926 | " 1 : 86.4\n", 2927 | " 2 : 58.7\n", 2928 | " 3 : 49.8\n", 2929 | " 4 : 48.8\n", 2930 | " 5 : 63.2\n", 2931 | " " 2932 | ] 2933 | }, 2934 | "execution_count": 18, 2935 | "metadata": {}, 2936 | "output_type": "execute_result" 2937 | }, 2938 | { 2939 | "data": { 2940 | "text/plain": [ 2941 | " 6 : 82.8\n", 2942 | " 7 : 92.9\n", 2943 | "}\n", 2944 | "12:17:28 IST\t\n", 2945 | "12:17:28 IST\t\n", 2946 | "4\t8\t\n" 2947 | ] 2948 | }, 2949 | "execution_count": 18, 2950 | "metadata": {}, 2951 | "output_type": "execute_result" 2952 | }, 2953 | { 2954 | "data": { 2955 | "text/plain": [ 2956 | "Progress: 40.015625 / 453.125\t\n" 2957 | ] 2958 | }, 2959 | "execution_count": 18, 2960 | "metadata": {}, 2961 | "output_type": "execute_result" 2962 | }, 2963 | { 2964 | "data": { 2965 | "text/plain": [ 2966 | "Progress: 85.015625 / 453.125\t\n" 2967 | ] 2968 | }, 2969 | "execution_count": 18, 2970 | "metadata": {}, 2971 | "output_type": "execute_result" 2972 | }, 2973 | { 2974 | "data": { 2975 | "text/plain": [ 2976 | "Progress: 131.015625 / 453.125\t\n" 2977 | ] 2978 | }, 2979 | "execution_count": 18, 2980 | "metadata": {}, 2981 | "output_type": "execute_result" 2982 | }, 2983 | { 2984 | "data": { 2985 | "text/plain": [ 2986 | "Progress: 175.015625 / 453.125\t\n" 2987 | ] 2988 | }, 2989 | "execution_count": 18, 2990 | "metadata": {}, 2991 | "output_type": "execute_result" 2992 | }, 2993 | { 2994 | "data": { 2995 | "text/plain": [ 2996 | "Progress: 219.015625 / 453.125\t\n" 2997 | ] 2998 | }, 2999 | "execution_count": 18, 3000 | "metadata": {}, 3001 | "output_type": "execute_result" 3002 | }, 3003 | { 3004 | "data": { 3005 | "text/plain": [ 3006 | "Progress: 263.015625 / 453.125\t\n" 3007 | ] 3008 | }, 3009 | "execution_count": 18, 3010 | "metadata": {}, 3011 | "output_type": "execute_result" 3012 | }, 3013 | { 3014 | "data": { 3015 | "text/plain": [ 3016 | "Progress: 307.015625 / 453.125\t\n" 3017 | ] 3018 | }, 3019 | "execution_count": 18, 3020 | "metadata": {}, 3021 | "output_type": "execute_result" 3022 | }, 3023 | { 3024 | "data": { 3025 | "text/plain": [ 3026 | "Progress: 351.015625 / 453.125\t\n" 3027 | ] 3028 | }, 3029 | "execution_count": 18, 3030 | "metadata": {}, 3031 | "output_type": "execute_result" 3032 | }, 3033 | { 3034 | "data": { 3035 | "text/plain": [ 3036 | "Progress: 396.015625 / 453.125\t\n" 3037 | ] 3038 | }, 3039 | "execution_count": 18, 3040 | "metadata": {}, 3041 | "output_type": "execute_result" 3042 | }, 3043 | { 3044 | "data": { 3045 | "text/plain": [ 3046 | "Progress: 441.015625 / 453.125\t\n" 3047 | ] 3048 | }, 3049 | "execution_count": 18, 3050 | "metadata": {}, 3051 | "output_type": "execute_result" 3052 | }, 3053 | { 3054 | "data": { 3055 | "text/plain": [ 3056 | "loss\t130.22748642202\t\n", 3057 | "train\t91.795566502463\t\n" 3058 | ] 3059 | }, 3060 | "execution_count": 18, 3061 | "metadata": {}, 3062 | "output_type": "execute_result" 3063 | }, 3064 | { 3065 | "data": { 3066 | "text/plain": [ 3067 | "v\t83.571428571429\tmaxv\t83.571428571429\t\n", 3068 | "{\n", 3069 | " 1 : 96.3\n", 3070 | " 2 : 86.4\n", 3071 | " 3 : 75.6\n", 3072 | " 4 : 69.8\n", 3073 | " 5 : 72\n", 3074 | " 6 : 88\n", 3075 | " 7 : 96.9\n", 3076 | "}\n", 3077 | "12:20:04 IST\t\n", 3078 | "12:20:04 IST\t\n", 3079 | "5\t8\t\n" 3080 | ] 3081 | }, 3082 | "execution_count": 18, 3083 | "metadata": {}, 3084 | "output_type": "execute_result" 3085 | }, 3086 | { 3087 | "data": { 3088 | "text/plain": [ 3089 | "Progress: 27.015625 / 453.125\t\n" 3090 | ] 3091 | }, 3092 | "execution_count": 18, 3093 | "metadata": {}, 3094 | "output_type": "execute_result" 3095 | }, 3096 | { 3097 | "data": { 3098 | "text/plain": [ 3099 | "Progress: 72.015625 / 453.125\t\n" 3100 | ] 3101 | }, 3102 | "execution_count": 18, 3103 | "metadata": {}, 3104 | "output_type": "execute_result" 3105 | }, 3106 | { 3107 | "data": { 3108 | "text/plain": [ 3109 | "Progress: 117.015625 / 453.125\t\n" 3110 | ] 3111 | }, 3112 | "execution_count": 18, 3113 | "metadata": {}, 3114 | "output_type": "execute_result" 3115 | }, 3116 | { 3117 | "data": { 3118 | "text/plain": [ 3119 | "Progress: 162.015625 / 453.125\t\n" 3120 | ] 3121 | }, 3122 | "execution_count": 18, 3123 | "metadata": {}, 3124 | "output_type": "execute_result" 3125 | }, 3126 | { 3127 | "data": { 3128 | "text/plain": [ 3129 | "Progress: 207.015625 / 453.125\t\n" 3130 | ] 3131 | }, 3132 | "execution_count": 18, 3133 | "metadata": {}, 3134 | "output_type": "execute_result" 3135 | }, 3136 | { 3137 | "data": { 3138 | "text/plain": [ 3139 | "Progress: 253.015625 / 453.125\t\n" 3140 | ] 3141 | }, 3142 | "execution_count": 18, 3143 | "metadata": {}, 3144 | "output_type": "execute_result" 3145 | }, 3146 | { 3147 | "data": { 3148 | "text/plain": [ 3149 | "Progress: 298.015625 / 453.125\t\n" 3150 | ] 3151 | }, 3152 | "execution_count": 18, 3153 | "metadata": {}, 3154 | "output_type": "execute_result" 3155 | }, 3156 | { 3157 | "data": { 3158 | "text/plain": [ 3159 | "Progress: 343.015625 / 453.125\t\n" 3160 | ] 3161 | }, 3162 | "execution_count": 18, 3163 | "metadata": {}, 3164 | "output_type": "execute_result" 3165 | }, 3166 | { 3167 | "data": { 3168 | "text/plain": [ 3169 | "Progress: 388.015625 / 453.125\t\n" 3170 | ] 3171 | }, 3172 | "execution_count": 18, 3173 | "metadata": {}, 3174 | "output_type": "execute_result" 3175 | }, 3176 | { 3177 | "data": { 3178 | "text/plain": [ 3179 | "Progress: 433.015625 / 453.125\t\n" 3180 | ] 3181 | }, 3182 | "execution_count": 18, 3183 | "metadata": {}, 3184 | "output_type": "execute_result" 3185 | }, 3186 | { 3187 | "data": { 3188 | "text/plain": [ 3189 | "loss\t126.68896080234\t\n", 3190 | "train\t92.379310344828\t\n" 3191 | ] 3192 | }, 3193 | "execution_count": 18, 3194 | "metadata": {}, 3195 | "output_type": "execute_result" 3196 | }, 3197 | { 3198 | "data": { 3199 | "text/plain": [ 3200 | "v\t69.414285714286\tmaxv\t83.571428571429\t\n", 3201 | "{\n", 3202 | " 1 : 84\n", 3203 | " 2 : 77.6\n", 3204 | " 3 : 58.1\n", 3205 | " 4 : 48.9\n", 3206 | " 5 : 49.2\n", 3207 | " 6 : 73\n", 3208 | " 7 : 95.1\n", 3209 | "}\n", 3210 | "12:22:39 IST\t\n", 3211 | "12:22:39 IST\t\n", 3212 | "6\t8\t\n" 3213 | ] 3214 | }, 3215 | "execution_count": 18, 3216 | "metadata": {}, 3217 | "output_type": "execute_result" 3218 | }, 3219 | { 3220 | "data": { 3221 | "text/plain": [ 3222 | "Progress: 19.015625 / 453.125\t\n" 3223 | ] 3224 | }, 3225 | "execution_count": 18, 3226 | "metadata": {}, 3227 | "output_type": "execute_result" 3228 | }, 3229 | { 3230 | "data": { 3231 | "text/plain": [ 3232 | "Progress: 64.015625 / 453.125\t\n" 3233 | ] 3234 | }, 3235 | "execution_count": 18, 3236 | "metadata": {}, 3237 | "output_type": "execute_result" 3238 | }, 3239 | { 3240 | "data": { 3241 | "text/plain": [ 3242 | "Progress: 109.015625 / 453.125\t\n" 3243 | ] 3244 | }, 3245 | "execution_count": 18, 3246 | "metadata": {}, 3247 | "output_type": "execute_result" 3248 | }, 3249 | { 3250 | "data": { 3251 | "text/plain": [ 3252 | "Progress: 155.015625 / 453.125\t\n" 3253 | ] 3254 | }, 3255 | "execution_count": 18, 3256 | "metadata": {}, 3257 | "output_type": "execute_result" 3258 | }, 3259 | { 3260 | "data": { 3261 | "text/plain": [ 3262 | "Progress: 201.015625 / 453.125\t\n" 3263 | ] 3264 | }, 3265 | "execution_count": 18, 3266 | "metadata": {}, 3267 | "output_type": "execute_result" 3268 | }, 3269 | { 3270 | "data": { 3271 | "text/plain": [ 3272 | "Progress: 247.015625 / 453.125\t\n" 3273 | ] 3274 | }, 3275 | "execution_count": 18, 3276 | "metadata": {}, 3277 | "output_type": "execute_result" 3278 | }, 3279 | { 3280 | "data": { 3281 | "text/plain": [ 3282 | "Progress: 293.015625 / 453.125\t\n" 3283 | ] 3284 | }, 3285 | "execution_count": 18, 3286 | "metadata": {}, 3287 | "output_type": "execute_result" 3288 | }, 3289 | { 3290 | "data": { 3291 | "text/plain": [ 3292 | "Progress: 339.015625 / 453.125\t\n" 3293 | ] 3294 | }, 3295 | "execution_count": 18, 3296 | "metadata": {}, 3297 | "output_type": "execute_result" 3298 | }, 3299 | { 3300 | "data": { 3301 | "text/plain": [ 3302 | "Progress: 385.015625 / 453.125\t\n" 3303 | ] 3304 | }, 3305 | "execution_count": 18, 3306 | "metadata": {}, 3307 | "output_type": "execute_result" 3308 | }, 3309 | { 3310 | "data": { 3311 | "text/plain": [ 3312 | "Progress: 431.015625 / 453.125\t\n" 3313 | ] 3314 | }, 3315 | "execution_count": 18, 3316 | "metadata": {}, 3317 | "output_type": "execute_result" 3318 | }, 3319 | { 3320 | "data": { 3321 | "text/plain": [ 3322 | "loss\t94.726593861622\t\n", 3323 | "train\t94.338916256158\t\n" 3324 | ] 3325 | }, 3326 | "execution_count": 18, 3327 | "metadata": {}, 3328 | "output_type": "execute_result" 3329 | }, 3330 | { 3331 | "data": { 3332 | "text/plain": [ 3333 | "v\t82.885714285714\tmaxv\t83.571428571429\t\n", 3334 | "{\n", 3335 | " 1 : 96\n", 3336 | " 2 : 75.9\n", 3337 | " 3 : 75.1\n", 3338 | " 4 : 75.3\n", 3339 | " 5 : 79.1\n", 3340 | " 6 : 84.1\n", 3341 | " 7 : 94.7\n", 3342 | "}\n", 3343 | "12:25:12 IST\t\n", 3344 | "12:25:12 IST\t\n", 3345 | "7\t8\t\n" 3346 | ] 3347 | }, 3348 | "execution_count": 18, 3349 | "metadata": {}, 3350 | "output_type": "execute_result" 3351 | }, 3352 | { 3353 | "data": { 3354 | "text/plain": [ 3355 | "Progress: 18.015625 / 453.125\t\n" 3356 | ] 3357 | }, 3358 | "execution_count": 18, 3359 | "metadata": {}, 3360 | "output_type": "execute_result" 3361 | }, 3362 | { 3363 | "data": { 3364 | "text/plain": [ 3365 | "Progress: 62.015625 / 453.125\t\n" 3366 | ] 3367 | }, 3368 | "execution_count": 18, 3369 | "metadata": {}, 3370 | "output_type": "execute_result" 3371 | }, 3372 | { 3373 | "data": { 3374 | "text/plain": [ 3375 | "Progress: 108.015625 / 453.125\t\n" 3376 | ] 3377 | }, 3378 | "execution_count": 18, 3379 | "metadata": {}, 3380 | "output_type": "execute_result" 3381 | }, 3382 | { 3383 | "data": { 3384 | "text/plain": [ 3385 | "Progress: 153.015625 / 453.125\t\n" 3386 | ] 3387 | }, 3388 | "execution_count": 18, 3389 | "metadata": {}, 3390 | "output_type": "execute_result" 3391 | }, 3392 | { 3393 | "data": { 3394 | "text/plain": [ 3395 | "Progress: 198.015625 / 453.125\t\n" 3396 | ] 3397 | }, 3398 | "execution_count": 18, 3399 | "metadata": {}, 3400 | "output_type": "execute_result" 3401 | }, 3402 | { 3403 | "data": { 3404 | "text/plain": [ 3405 | "Progress: 243.015625 / 453.125\t\n" 3406 | ] 3407 | }, 3408 | "execution_count": 18, 3409 | "metadata": {}, 3410 | "output_type": "execute_result" 3411 | }, 3412 | { 3413 | "data": { 3414 | "text/plain": [ 3415 | "Progress: 289.015625 / 453.125\t\n" 3416 | ] 3417 | }, 3418 | "execution_count": 18, 3419 | "metadata": {}, 3420 | "output_type": "execute_result" 3421 | }, 3422 | { 3423 | "data": { 3424 | "text/plain": [ 3425 | "Progress: 334.015625 / 453.125\t\n" 3426 | ] 3427 | }, 3428 | "execution_count": 18, 3429 | "metadata": {}, 3430 | "output_type": "execute_result" 3431 | }, 3432 | { 3433 | "data": { 3434 | "text/plain": [ 3435 | "Progress: 380.015625 / 453.125\t\n" 3436 | ] 3437 | }, 3438 | "execution_count": 18, 3439 | "metadata": {}, 3440 | "output_type": "execute_result" 3441 | }, 3442 | { 3443 | "data": { 3444 | "text/plain": [ 3445 | "Progress: 426.015625 / 453.125\t\n" 3446 | ] 3447 | }, 3448 | "execution_count": 18, 3449 | "metadata": {}, 3450 | "output_type": "execute_result" 3451 | }, 3452 | { 3453 | "data": { 3454 | "text/plain": [ 3455 | "loss\t87.030779354274\t\n", 3456 | "train\t95.104433497537\t\n" 3457 | ] 3458 | }, 3459 | "execution_count": 18, 3460 | "metadata": {}, 3461 | "output_type": "execute_result" 3462 | }, 3463 | { 3464 | "data": { 3465 | "text/plain": [ 3466 | "v\t37.128571428571\tmaxv\t83.571428571429\t\n", 3467 | "{\n", 3468 | " 1 : 76\n", 3469 | " 2 : 53.4\n", 3470 | " 3 : 33.3\n", 3471 | " 4 : 22.7\n", 3472 | " 5 : 16.9\n", 3473 | " 6 : 15.8\n", 3474 | " 7 : 41.8\n", 3475 | "}\n", 3476 | "12:27:45 IST\t\n", 3477 | "12:27:45 IST\t\n", 3478 | "8\t8\t\n" 3479 | ] 3480 | }, 3481 | "execution_count": 18, 3482 | "metadata": {}, 3483 | "output_type": "execute_result" 3484 | }, 3485 | { 3486 | "data": { 3487 | "text/plain": [ 3488 | "Progress: 12.015625 / 453.125\t\n" 3489 | ] 3490 | }, 3491 | "execution_count": 18, 3492 | "metadata": {}, 3493 | "output_type": "execute_result" 3494 | }, 3495 | { 3496 | "data": { 3497 | "text/plain": [ 3498 | "Progress: 56.015625 / 453.125\t\n" 3499 | ] 3500 | }, 3501 | "execution_count": 18, 3502 | "metadata": {}, 3503 | "output_type": "execute_result" 3504 | }, 3505 | { 3506 | "data": { 3507 | "text/plain": [ 3508 | "Progress: 102.015625 / 453.125\t\n" 3509 | ] 3510 | }, 3511 | "execution_count": 18, 3512 | "metadata": {}, 3513 | "output_type": "execute_result" 3514 | }, 3515 | { 3516 | "data": { 3517 | "text/plain": [ 3518 | "Progress: 147.015625 / 453.125\t\n" 3519 | ] 3520 | }, 3521 | "execution_count": 18, 3522 | "metadata": {}, 3523 | "output_type": "execute_result" 3524 | }, 3525 | { 3526 | "data": { 3527 | "text/plain": [ 3528 | "Progress: 193.015625 / 453.125\t\n" 3529 | ] 3530 | }, 3531 | "execution_count": 18, 3532 | "metadata": {}, 3533 | "output_type": "execute_result" 3534 | }, 3535 | { 3536 | "data": { 3537 | "text/plain": [ 3538 | "Progress: 239.015625 / 453.125\t\n" 3539 | ] 3540 | }, 3541 | "execution_count": 18, 3542 | "metadata": {}, 3543 | "output_type": "execute_result" 3544 | }, 3545 | { 3546 | "data": { 3547 | "text/plain": [ 3548 | "Progress: 285.015625 / 453.125\t\n" 3549 | ] 3550 | }, 3551 | "execution_count": 18, 3552 | "metadata": {}, 3553 | "output_type": "execute_result" 3554 | }, 3555 | { 3556 | "data": { 3557 | "text/plain": [ 3558 | "Progress: 331.015625 / 453.125\t\n" 3559 | ] 3560 | }, 3561 | "execution_count": 18, 3562 | "metadata": {}, 3563 | "output_type": "execute_result" 3564 | }, 3565 | { 3566 | "data": { 3567 | "text/plain": [ 3568 | "Progress: 377.015625 / 453.125\t\n" 3569 | ] 3570 | }, 3571 | "execution_count": 18, 3572 | "metadata": {}, 3573 | "output_type": "execute_result" 3574 | }, 3575 | { 3576 | "data": { 3577 | "text/plain": [ 3578 | "Progress: 423.015625 / 453.125\t\n" 3579 | ] 3580 | }, 3581 | "execution_count": 18, 3582 | "metadata": {}, 3583 | "output_type": "execute_result" 3584 | }, 3585 | { 3586 | "data": { 3587 | "text/plain": [ 3588 | "loss\t88.091715707311\t\n", 3589 | "train\t95.120689655172\t\n" 3590 | ] 3591 | }, 3592 | "execution_count": 18, 3593 | "metadata": {}, 3594 | "output_type": "execute_result" 3595 | }, 3596 | { 3597 | "data": { 3598 | "text/plain": [ 3599 | "v\t26.228571428571\tmaxv\t83.571428571429\t\n", 3600 | "{\n", 3601 | " 1 : 28.8\n", 3602 | " 2 : 34.2\n", 3603 | " 3 : 22.5\n", 3604 | " 4 : 12\n", 3605 | " 5 : 11.1\n", 3606 | " 6 : 23.2\n", 3607 | " 7 : 51.8\n", 3608 | "}\n", 3609 | "12:30:18 IST\t\n", 3610 | "83.571428571429\t\n", 3611 | "\n" 3612 | ] 3613 | }, 3614 | "execution_count": 18, 3615 | "metadata": {}, 3616 | "output_type": "execute_result" 3617 | } 3618 | ], 3619 | "source": [ 3620 | "rutil.train(dec,criterion,Xt,Yt,Xv,Yv,8,64,tnet,0.1)" 3621 | ] 3622 | }, 3623 | { 3624 | "cell_type": "code", 3625 | "execution_count": 22, 3626 | "metadata": { 3627 | "collapsed": false 3628 | }, 3629 | "outputs": [ 3630 | { 3631 | "data": { 3632 | "text/plain": [ 3633 | "12:34:52 IST\t\n", 3634 | "1\t1\t\n" 3635 | ] 3636 | }, 3637 | "execution_count": 22, 3638 | "metadata": {}, 3639 | "output_type": "execute_result" 3640 | }, 3641 | { 3642 | "data": { 3643 | "text/plain": [ 3644 | "Progress: 44.015625 / 453.125\t\n" 3645 | ] 3646 | }, 3647 | "execution_count": 22, 3648 | "metadata": {}, 3649 | "output_type": "execute_result" 3650 | }, 3651 | { 3652 | "data": { 3653 | "text/plain": [ 3654 | "Progress: 89.015625 / 453.125\t\n" 3655 | ] 3656 | }, 3657 | "execution_count": 22, 3658 | "metadata": {}, 3659 | "output_type": "execute_result" 3660 | }, 3661 | { 3662 | "data": { 3663 | "text/plain": [ 3664 | "Progress: 135.015625 / 453.125\t\n" 3665 | ] 3666 | }, 3667 | "execution_count": 22, 3668 | "metadata": {}, 3669 | "output_type": "execute_result" 3670 | }, 3671 | { 3672 | "data": { 3673 | "text/plain": [ 3674 | "Progress: 180.015625 / 453.125\t\n" 3675 | ] 3676 | }, 3677 | "execution_count": 22, 3678 | "metadata": {}, 3679 | "output_type": "execute_result" 3680 | }, 3681 | { 3682 | "data": { 3683 | "text/plain": [ 3684 | "Progress: 226.015625 / 453.125\t\n" 3685 | ] 3686 | }, 3687 | "execution_count": 22, 3688 | "metadata": {}, 3689 | "output_type": "execute_result" 3690 | }, 3691 | { 3692 | "data": { 3693 | "text/plain": [ 3694 | "Progress: 272.015625 / 453.125\t\n" 3695 | ] 3696 | }, 3697 | "execution_count": 22, 3698 | "metadata": {}, 3699 | "output_type": "execute_result" 3700 | }, 3701 | { 3702 | "data": { 3703 | "text/plain": [ 3704 | "Progress: 317.015625 / 453.125\t\n" 3705 | ] 3706 | }, 3707 | "execution_count": 22, 3708 | "metadata": {}, 3709 | "output_type": "execute_result" 3710 | }, 3711 | { 3712 | "data": { 3713 | "text/plain": [ 3714 | "Progress: 363.015625 / 453.125\t\n" 3715 | ] 3716 | }, 3717 | "execution_count": 22, 3718 | "metadata": {}, 3719 | "output_type": "execute_result" 3720 | }, 3721 | { 3722 | "data": { 3723 | "text/plain": [ 3724 | "Progress: 408.015625 / 453.125\t\n" 3725 | ] 3726 | }, 3727 | "execution_count": 22, 3728 | "metadata": {}, 3729 | "output_type": "execute_result" 3730 | }, 3731 | { 3732 | "data": { 3733 | "text/plain": [ 3734 | "loss\t72.135594595756\t\n", 3735 | "train\t96.106896551724\t\n" 3736 | ] 3737 | }, 3738 | "execution_count": 22, 3739 | "metadata": {}, 3740 | "output_type": "execute_result" 3741 | }, 3742 | { 3743 | "data": { 3744 | "text/plain": [ 3745 | "Progress: 0.0625 / 62.5\t\n" 3746 | ] 3747 | }, 3748 | "execution_count": 22, 3749 | "metadata": {}, 3750 | "output_type": "execute_result" 3751 | }, 3752 | { 3753 | "data": { 3754 | "text/plain": [ 3755 | "v\t88.285714285714\tmaxv\t88.285714285714\t\n", 3756 | "{\n", 3757 | " 1 : 98\n", 3758 | " 2 : 86.3\n", 3759 | " 3 : 80.2\n", 3760 | " 4 : 80.6\n", 3761 | " 5 : 84.1\n", 3762 | " 6 : 91.1\n", 3763 | " 7 : 97.7\n", 3764 | "}\n", 3765 | "12:37:25 IST\t\n", 3766 | "88.285714285714\t\n", 3767 | "\n" 3768 | ] 3769 | }, 3770 | "execution_count": 22, 3771 | "metadata": {}, 3772 | "output_type": "execute_result" 3773 | } 3774 | ], 3775 | "source": [ 3776 | "rutil.train(dec,criterion,Xt,Yt,Xv,Yv,1,64,tnet,0.1)" 3777 | ] 3778 | }, 3779 | { 3780 | "cell_type": "code", 3781 | "execution_count": 50, 3782 | "metadata": { 3783 | "collapsed": true 3784 | }, 3785 | "outputs": [], 3786 | "source": [ 3787 | "function rutil.check(y,Y)\n", 3788 | " --print(y,Y)\n", 3789 | " for i=1,y:nElement() do\n", 3790 | " if(Y[i]==1) then return true end\n", 3791 | " if(y[i]~=Y[i]) then return false end\n", 3792 | " end\n", 3793 | " return true\n", 3794 | "end\n", 3795 | "function rutil.kfacc2(outputs,targets)\n", 3796 | " local Y,y = nil,nil;\n", 3797 | " local N = outputs[1]:size(1)\n", 3798 | " local C = outputs[1]:size(2)\n", 3799 | " for k=1,#outputs do \n", 3800 | " Y = Y and torch.cat(Y,outputs[k]:reshape(N,1,C),2) or outputs[k]:reshape(N,1,C)\n", 3801 | " y = y and torch.cat(y,targets[k]:reshape(N,1),2) or targets[k]:reshape(N,1)\n", 3802 | " end\n", 3803 | " local t,idx = Y:max(3)\n", 3804 | " idx = idx:squeeze()\n", 3805 | " local acc = 0\n", 3806 | " for i=1,y:size(1) do\n", 3807 | " if(rutil.check(idx[i],y[i])) then \n", 3808 | " acc = acc + 1\n", 3809 | " --print('true')\n", 3810 | " else\n", 3811 | " --print('false')\n", 3812 | " end\n", 3813 | " end\n", 3814 | " return acc\n", 3815 | "end\n" 3816 | ] 3817 | }, 3818 | { 3819 | "cell_type": "code", 3820 | "execution_count": 51, 3821 | "metadata": { 3822 | "collapsed": false 3823 | }, 3824 | "outputs": [ 3825 | { 3826 | "data": { 3827 | "text/plain": [ 3828 | "44.1\t{\n", 3829 | "}\n" 3830 | ] 3831 | }, 3832 | "execution_count": 51, 3833 | "metadata": {}, 3834 | "output_type": "execute_result" 3835 | } 3836 | ], 3837 | "source": [ 3838 | "rutil.kvalid(dec,Xv,Yv,64,tnet)" 3839 | ] 3840 | }, 3841 | { 3842 | "cell_type": "code", 3843 | "execution_count": 52, 3844 | "metadata": { 3845 | "collapsed": false 3846 | }, 3847 | "outputs": [ 3848 | { 3849 | "data": { 3850 | "text/plain": [ 3851 | "\n" 3852 | ] 3853 | }, 3854 | "execution_count": 52, 3855 | "metadata": {}, 3856 | "output_type": "execute_result" 3857 | } 3858 | ], 3859 | "source": [ 3860 | "torch.save('seq44.t7',dec)" 3861 | ] 3862 | }, 3863 | { 3864 | "cell_type": "code", 3865 | "execution_count": null, 3866 | "metadata": { 3867 | "collapsed": true 3868 | }, 3869 | "outputs": [], 3870 | "source": [] 3871 | } 3872 | ], 3873 | "metadata": { 3874 | "kernelspec": { 3875 | "display_name": "iTorch", 3876 | "language": "lua", 3877 | "name": "itorch" 3878 | }, 3879 | "language_info": { 3880 | "name": "lua", 3881 | "version": "20100" 3882 | } 3883 | }, 3884 | "nbformat": 4, 3885 | "nbformat_minor": 0 3886 | } 3887 | -------------------------------------------------------------------------------- /captcha.lua: -------------------------------------------------------------------------------- 1 | local dir = 'dataset/' 2 | local validationSize = 1000 3 | local iterations = 30 4 | local batchSize = 128 5 | local sgd_config = { 6 | learningRate = 0.1, 7 | learningRateDecay = 5.0e-6, 8 | momentum = 0.9 9 | } 10 | 11 | local data = require 'data'; 12 | data.storeXY(dir) 13 | local X,Y = data.loadXY(dir) 14 | local Xt,Yt,Xv,Yv = data.split(X,Y,validationSize) 15 | 16 | local models = require 'models'; 17 | local net,ct = models.cnnModel() 18 | 19 | local net = net:cuda() 20 | local ct = ct:cuda() 21 | local Xv = Xv:cuda() 22 | local Yv = Yv:cuda() 23 | local Xt = Xt:cuda() 24 | local Yt = Yt:cuda() 25 | 26 | local train = require 'train'; 27 | 28 | train.sgd(net,ct,Xt,Yt,Xv,Yv,iterations,sgd_config,batchSize) 29 | 30 | torch.save(dir .. 'net.t7',net) -------------------------------------------------------------------------------- /data.lua: -------------------------------------------------------------------------------- 1 | require 'csvigo'; 2 | require 'image'; 3 | 4 | local data = {} 5 | 6 | 7 | function data.getHash() 8 | local hash = {} 9 | table.insert(hash, '_') 10 | for i=string.byte('0') ,string.byte('9') do 11 | table.insert(hash,string.char(i)) 12 | end 13 | for i=string.byte('a') ,string.byte('z') do 14 | table.insert(hash,string.char(i)) 15 | end 16 | return hash 17 | end 18 | 19 | 20 | function data.getMap() 21 | local hash = data.getHash() 22 | local map = {} 23 | for k,v in ipairs(hash) do 24 | map[v] = k 25 | end 26 | return map 27 | end 28 | 29 | 30 | function data.loadY(dir) 31 | local csv = csvigo.load{path = dir .. 'ans.txt', mode = 'raw'} 32 | local Ystr = {} 33 | for i=1,#csv do 34 | table.insert(Ystr,csv[i][1]) 35 | end 36 | local N = #Ystr 37 | local d = #Ystr[1] 38 | local Y = torch.zeros(N,d) 39 | local map = data.getMap() 40 | for i=1,N do 41 | for j=1,d do 42 | local c = string.sub(Ystr[i],j,j) 43 | Y[i][j] = map[c] 44 | end 45 | end 46 | return Y 47 | end 48 | 49 | function data.loadX(dir,N,dH,dW) 50 | local dH = dH or 50 51 | local dW = dW or 200 52 | local function readX(dir,i,b) 53 | local X = torch.zeros(b,dH,dW) 54 | for j=i,i+b-1 do 55 | X[j] = image.load(dir ..''.. j ..'.png')[2] 56 | end 57 | return X 58 | end 59 | return readX(dir,1,N) 60 | end 61 | 62 | function data.storeXY(dir,dH,dW) 63 | local Y = data.loadY(dir) 64 | local X = data.loadX(dir,Y:size(1),dH,dW) 65 | torch.save(dir .. '/data.t7',{X=X,Y=Y}) 66 | end 67 | 68 | 69 | function data.loadXY(dir) 70 | local d = torch.load(dir .. '/data.t7') 71 | return d.X,d.Y 72 | end 73 | 74 | 75 | function data.split(X,Y,Nv) 76 | local N = X:size(1) 77 | local Nv = Nv or N/5 78 | local I = torch.randperm(N):long() 79 | local It = I[{{1,N-Nv}}] 80 | local Iv = I[{{N-Nv+1,N}}] 81 | local Xt,Yt = X:index(1,It),Y:index(1,It) 82 | local Xv,Yv = X:index(1,Iv),Y:index(1,Iv) 83 | return Xt,Yt,Xv,Yv 84 | end 85 | 86 | function data.convert1(Y1) 87 | local N = Y1:nElement() 88 | local Y2 = torch.ones(7) 89 | local j = 1 90 | for i=1,7 do 91 | if(Y1[i]~=1) then 92 | Y2[j] = Y1[i] 93 | j = j + 1 94 | end 95 | end 96 | return Y2 97 | end 98 | 99 | function data.convert(Y) 100 | for i=1,Y:size(1) do 101 | Y[i] = data.convert1(Y[i]) 102 | end 103 | end 104 | 105 | 106 | return data 107 | -------------------------------------------------------------------------------- /models.lua: -------------------------------------------------------------------------------- 1 | require 'nn'; 2 | require 'cunn'; 3 | require 'MultiCrossEntropyCriterion' 4 | 5 | local models = {} 6 | function models.cnnModel(k,c) 7 | local k = k or 5 8 | local c = c or 36 9 | -- Will use "ceil" MaxPooling because we want to save as much 10 | -- space as we can 11 | local vgg = nn.Sequential() 12 | vgg:add(nn.Reshape(1,50,200)) 13 | 14 | local backend_name = 'nn' 15 | 16 | local backend 17 | if backend_name == 'cudnn' then 18 | require 'cudnn' 19 | backend = cudnn 20 | else 21 | backend = nn 22 | end 23 | local MaxPooling = backend.SpatialMaxPooling 24 | 25 | -- building block 26 | local function ConvBNReLU(nInputPlane, nOutputPlane) 27 | vgg:add(backend.SpatialConvolution(nInputPlane, nOutputPlane, 3,3, 1,1, 1,1)) 28 | vgg:add(nn.SpatialBatchNormalization(nOutputPlane,1e-3)) 29 | vgg:add(backend.ReLU(true)) 30 | return vgg 31 | end 32 | ConvBNReLU(1,64)--:add(nn.Dropout(0.3,nil,true)) 33 | ConvBNReLU(64,64) 34 | vgg:add(MaxPooling(2,2,2,2):ceil()) 35 | 36 | ConvBNReLU(64,128)--:add(nn.Dropout(0.4,nil,true)) 37 | ConvBNReLU(128,128) 38 | vgg:add(MaxPooling(2,2,2,2):ceil()) 39 | 40 | ConvBNReLU(128,256)--:add(nn.Dropout(0.4,nil,true)) 41 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 42 | ConvBNReLU(256,256) 43 | vgg:add(MaxPooling(2,2,2,2):ceil()) 44 | 45 | ConvBNReLU(256,512)--:add(nn.Dropout(0.4,nil,true)) 46 | ConvBNReLU(512,512)--:add(nn.Dropout(0.4,nil,true)) 47 | ConvBNReLU(512,512) 48 | vgg:add(MaxPooling(2,2,2,2):ceil()) 49 | 50 | -- In the last block of convolutions the inputs are smaller than 51 | -- the kernels and cudnn doesn't handle that, have to use cunn 52 | backend = nn 53 | ConvBNReLU(512,512)--:add(nn.Dropout(0.4,nil,true)) 54 | ConvBNReLU(512,512)--:add(nn.Dropout(0.4,nil,true)) 55 | ConvBNReLU(512,512) 56 | vgg:add(MaxPooling(2,2,2,2):ceil()) 57 | vgg:add(nn.View(512*2*7)) 58 | 59 | classifier = nn.Sequential() 60 | --classifier:add(nn.Dropout(0.5,nil,true)) 61 | classifier:add(nn.Linear(512*2*7,512)) 62 | classifier:add(nn.BatchNormalization(512)) 63 | classifier:add(nn.ReLU(true)) 64 | --classifier:add(nn.Dropout(0.5,nil,true)) 65 | classifier:add(nn.Linear(512,k*c)) 66 | vgg:add(classifier) 67 | vgg:add(nn.Reshape(k,c)) 68 | return vgg,nn.MultiCrossEntropyCriterion() 69 | end 70 | 71 | return models -------------------------------------------------------------------------------- /rmain.lua: -------------------------------------------------------------------------------- 1 | data = require 'data' 2 | dir = '/home/arun/simple/' 3 | X,Y = data.loadXY(dir) 4 | Xt,Yt,Xv,Yv = data.split(X,Y,1000) 5 | 6 | rutil = require 'rutil' 7 | net = rutil.model() 8 | rnn,ct = rutil.getNetCt(net) 9 | rnn = rnn:cuda() 10 | ct = ct:cuda() 11 | tnet = nn.SplitTable(2,2):cuda() 12 | batchSize = 16 13 | rutil.train(rnn,ct,Xt,Yt,Xv,Yv,3,batchSize,tnet,0.001) 14 | rutil.train(rnn,ct,Xt,Yt,Xv,Yv,15,batchSize,tnet,0.01) 15 | rutil.train(rnn,ct,Xt,Yt,Xv,Yv,15,batchSize,tnet,0.001) 16 | rutil.train(rnn,ct,Xt,Yt,Xv,Yv,15,batchSize,tnet,0.0001) 17 | -------------------------------------------------------------------------------- /rutil.lua: -------------------------------------------------------------------------------- 1 | require 'rnn'; 2 | require 'nn'; 3 | require 'cunn'; 4 | require 'MultiCrossEntropyCriterion' 5 | 6 | local rutil = {} 7 | 8 | 9 | function rutil.getNetCt(net,bs,rho,hs,cls) 10 | 11 | local batchSize = bs or 16 12 | local rho = rho or 1 13 | local hiddenSize = hs or 36 14 | local classes = cls or 36 15 | 16 | local mlp = nn.Sequential() 17 | :add(nn.Recurrent( 18 | hiddenSize, nn.Identity(), 19 | nn:Sequential():add(nn.Linear(hiddenSize, hiddenSize)):add(nn.ReLU()), nn.ReLU(), 20 | rho 21 | )) 22 | :add(nn.Linear(hiddenSize, classes)) 23 | :add(nn.LogSoftMax()) 24 | 25 | 26 | local rnn = nn.Sequential():add(net):add(nn.Sequencer(mlp)) 27 | local criterion = nn.SequencerCriterion(nn.ClassNLLCriterion()) 28 | return rnn,criterion 29 | end 30 | 31 | function rutil.kfacc(outputs,targets) 32 | local Y,y = nil,nil; 33 | local N = outputs[1]:size(1) 34 | local C = outputs[1]:size(2) 35 | for k=1,#outputs do 36 | Y = Y and torch.cat(Y,outputs[k]:reshape(N,1,C),2) or outputs[k]:reshape(N,1,C) 37 | y = y and torch.cat(y,targets[k]:reshape(N,1),2) or targets[k]:reshape(N,1) 38 | end 39 | local t,idx = Y:max(3) 40 | return idx:squeeze():eq(y):sum(2):eq(#outputs):sum() 41 | end 42 | 43 | 44 | function rutil.facc(outputs,targets) 45 | local acc = 0 46 | local acci = {} 47 | for k=1,#outputs do 48 | local t,idx = outputs[k]:max(2) 49 | local ai = targets[k]:eq(idx:squeeze()):sum() 50 | acc = acc + ai 51 | table.insert(acci,ai) 52 | end 53 | return acc,acci 54 | end 55 | 56 | function rutil.valid(rnn,Xv,Yv,batchSize,tnet,f) 57 | local batchSize = bs or 16 58 | local acc = 0 59 | local acci = {} 60 | local Nv = Xv:size(1) 61 | rnn:evaluate() 62 | for i=1,Nv,batchSize do 63 | xlua.progress(i/batchSize, Nv/batchSize) 64 | local j = math.min(Nv,i+batchSize-1) 65 | local Xb = Xv[{{i,j}}]:cuda() 66 | local Yb = Yv[{{i,j}}]:cuda() 67 | local inputs = Xb 68 | local targets = tnet:forward(Yb) 69 | local outputs = rnn:forward(inputs) 70 | local aa,ai = f(outputs,targets) or rutil.facc(outputs,targets) 71 | for k=1,#ai do 72 | acci[k] = (acci[k] or 0) + ai[k] 73 | end 74 | acc = acc + aa/#ai 75 | rnn:forget() 76 | end 77 | for k=1,#acci do 78 | acci[k] = (acci[k] or 0) * 100/(Nv) 79 | end 80 | return (acc*100)/Nv,acci 81 | end 82 | 83 | 84 | function rutil.train(rnn,criterion,Xt,Yt,Xv,Yv,T,batchSize,tnet,lr) 85 | local batchSize = batchSize or 16 86 | local maxv = 0 or maxv 87 | local T = T or 2 88 | for t = 1,T do 89 | print(os.date("%X", os.time())) 90 | print(t,T) 91 | rnn:forget() 92 | local loss = 0 93 | local acc = 0 94 | local Nt = Xt:size(1) 95 | rnn:training() 96 | for i=1,Nt,batchSize do 97 | xlua.progress(i/batchSize, Nt/batchSize) 98 | local j = math.min(Nt,i+batchSize-1) 99 | local Xb = Xt[{{i,j}}]:cuda() 100 | local Yb = Yt[{{i,j}}]:cuda() 101 | local inputs = Xb 102 | local targets = tnet:forward(Yb) 103 | local outputs = rnn:forward(inputs) 104 | loss = loss + criterion:forward(outputs, targets)/#targets 105 | local gradOutputs = criterion:backward(outputs,targets) 106 | acc = acc + rutil.facc(outputs,targets)/#targets 107 | rnn:backward(inputs,gradOutputs) 108 | rnn:backwardThroughTime() 109 | rnn:updateParameters(lr or 0.001) 110 | rnn:zeroGradParameters() 111 | rnn:forget() 112 | end 113 | print('loss',loss) 114 | print('train',100*acc/Nt) 115 | local v,acc = rutil.valid(rnn,Xv,Yv,batchSize,tnet) 116 | if(v>maxv) then maxv = v end 117 | print('v',v,'maxv',maxv) 118 | print(acc) 119 | print(os.date("%X", os.time())) 120 | end 121 | print(maxv) 122 | end 123 | 124 | 125 | 126 | function rutil.model() 127 | 128 | local k = k or 5 129 | local c = c or 36 130 | vgg = nn.Sequential() 131 | vgg:add(nn.Reshape(1,50,200)) 132 | local function ConvBNReLU(nInputPlane, nOutputPlane) 133 | vgg:add(nn.SpatialConvolution(nInputPlane, nOutputPlane, 3,3, 1,1, 1,1)) 134 | vgg:add(nn.SpatialBatchNormalization(nOutputPlane,1e-3)) 135 | vgg:add(nn.ReLU(true)) 136 | return vgg 137 | end 138 | ConvBNReLU(1,64)--:add(nn.Dropout(0.3,nil,true)) 139 | ConvBNReLU(64,64) 140 | ConvBNReLU(64,64) 141 | vgg:add(nn.SpatialMaxPooling(2,2,2,2):ceil()) 142 | ConvBNReLU(64,128)--:add(nn.Dropout(0.4,nil,true)) 143 | ConvBNReLU(128,128)--:add(nn.Dropout(0.4,nil,true)) 144 | vgg:add(nn.SpatialMaxPooling(2,2,2,2):ceil()) 145 | ConvBNReLU(128,256)--:add(nn.Dropout(0.4,nil,true)) 146 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 147 | vgg:add(nn.SpatialMaxPooling(2,2,2,2):ceil()) 148 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 149 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 150 | vgg:add(nn.SpatialMaxPooling(2,2,2,2):ceil()) 151 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 152 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 153 | ConvBNReLU(256,256)--:add(nn.Dropout(0.4,nil,true)) 154 | vgg:add(nn.SpatialMaxPooling(2,2,2,2):ceil()) 155 | vgg:add(nn.View(256*2*7)) 156 | 157 | local classifier = nn.Sequential() 158 | --classifier:add(nn.Dropout(0.5,nil,true)) 159 | classifier:add(nn.Linear(256*2*7,256)) 160 | classifier:add(nn.BatchNormalization(256)) 161 | classifier:add(nn.ReLU(true)) 162 | classifier:add(nn.Linear(256,k*c)) 163 | vgg:add(classifier) 164 | vgg:add(nn.Reshape(5,36)) 165 | vgg:add(nn.SplitTable(2,3)) 166 | return vgg 167 | end 168 | 169 | 170 | return rutil -------------------------------------------------------------------------------- /seq.lua: -------------------------------------------------------------------------------- 1 | local seq = {} 2 | 3 | local function repl(N) 4 | local net = nn.ConcatTable() 5 | for i=1,N do 6 | net:add(nn.Identity()) 7 | end 8 | return net 9 | end 10 | 11 | function seq.encoder(net,hsize) 12 | local enc = nn.Sequential() 13 | enc:add(net) 14 | enc:add(nn.Sequencer(nn.LSTM(hsize, hsize))) 15 | enc:add(nn.SelectTable(-1)) 16 | return enc 17 | end 18 | 19 | function seq.decoder(hsize,csize) 20 | local dec = nn.Sequential() 21 | :add(nn.LSTM(hsize, hsize)) 22 | :add(nn.Linear(hsize, csize)) 23 | :add(nn.LogSoftMax()) 24 | return dec 25 | end 26 | 27 | function seq.decoder(hsize,csize) 28 | local dec = nn.Sequential() 29 | :add(nn.LSTM(hsize, hsize)) 30 | :add(nn.Linear(hsize, csize)) 31 | :add(nn.LogSoftMax()) 32 | return dec 33 | end 34 | 35 | function seq.seq(net,hsize,csize,osize) 36 | local enc = seq.enc(net,hsize) 37 | local dec = seq.dec(hsize,csize) 38 | local encdec = nn.Sequential() 39 | :add(enc) 40 | :add(repl(osize)) 41 | :add(dec) 42 | local criterion = nn.SequencerCriterion(nn.ClassNLLCriterion()) 43 | return encdec,criterion 44 | end 45 | 46 | return seq -------------------------------------------------------------------------------- /simple/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/1.png -------------------------------------------------------------------------------- /simple/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/2.png -------------------------------------------------------------------------------- /simple/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/3.png -------------------------------------------------------------------------------- /simple/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/4.png -------------------------------------------------------------------------------- /simple/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/5.png -------------------------------------------------------------------------------- /simple/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/6.png -------------------------------------------------------------------------------- /simple/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/7.png -------------------------------------------------------------------------------- /simple/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/8.png -------------------------------------------------------------------------------- /simple/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arunpatala/captcha/69f8a490bf48fdb142d1eed7097d2a574e0a74f9/simple/9.png -------------------------------------------------------------------------------- /train.lua: -------------------------------------------------------------------------------- 1 | require 'nn'; 2 | 3 | local train = {} 4 | 5 | 6 | function train.accuracy(Xv,Yv,net,batch) 7 | net:evaluate() 8 | local batch = batch or 64 9 | local Nv = Xv:size(1) 10 | local lloss = 0 11 | for i =1,Nv,batch do 12 | local j = math.min(i+batch-1,Nv) 13 | local Xb = Xv[{{i,j}}]:cuda() 14 | local Yb = Yv[{{i,j}}]:cuda() 15 | local out = net:forward(Xb) -- N*k*C 16 | local tmp,YYb = out:max(3) 17 | lloss = lloss + YYb:eq(Yb):sum() 18 | end 19 | return (100*lloss/(5*Nv)) 20 | end 21 | 22 | 23 | function train.accuracyK(Xv,Yv,net,batch) 24 | net:evaluate() 25 | local batch = batch or 64 26 | local Nv = Xv:size(1) 27 | local lloss = 0 28 | for i =1,Nv,batch do 29 | local j = math.min(i+batch-1,Nv) 30 | local Xb = Xv[{{i,j}}]:cuda() 31 | local Yb = Yv[{{i,j}}]:cuda() 32 | local out = net:forward(Xb) -- N*k*C 33 | local tmp,YYb = out:max(3) 34 | lloss = lloss + YYb:eq(Yb):sum(2):eq(5):sum() 35 | end 36 | return (100*lloss/(Nv)) 37 | end 38 | 39 | 40 | function train.sgd(net,ct,Xt,Yt,Xv,Yv,K,sgd_config,batch) 41 | local x,dx = net:getParameters() 42 | require 'optim' 43 | local batch = batch or 64 44 | local Nt = Xt:size(1) 45 | print('parameters size ..') 46 | print(#x) 47 | for k=1,K do 48 | local lloss = 0 49 | net:training() 50 | 51 | for i =1,Nt,batch do 52 | 53 | dx:zero() 54 | local j = math.min(i+batch-1,Nt) 55 | local Xb = Xt[{{i,j}}]:cuda() 56 | local Yb = Yt[{{i,j}}]:cuda() 57 | local out = net:forward(Xb) 58 | local loss = ct:forward(out,Yb) 59 | local dout = ct:backward(out,Yb) 60 | net:backward(Xb,dout) 61 | dx:div(j-i+1) 62 | function feval() 63 | return loss,dx 64 | end 65 | local ltmp,tmp = optim.sgd(feval,x,sgd_config) 66 | --print(loss) 67 | lloss = lloss + loss 68 | end 69 | print('loss..'..lloss) 70 | print('valid .. '.. train.accuracy(Xv,Yv,net,batch)) 71 | print('train .. '.. train.accuracy(Xt,Yt,net,batch)) 72 | print('valid .. '.. train.accuracyK(Xv,Yv,net,batch)) 73 | print('train .. '.. train.accuracyK(Xt,Yt,net,batch)) 74 | end 75 | end 76 | 77 | 78 | return train 79 | --------------------------------------------------------------------------------