From a8e18af9b3c779389e91e0698eb9a88b443a538c Mon Sep 17 00:00:00 2001 From: mateogianolio Date: Mon, 30 May 2016 13:36:57 +0200 Subject: [PATCH] fix #9 --- config.json | 4 +- examples/0123456789.png | Bin 1814 -> 1736 bytes main.js | 151 ---------------------------------------- 3 files changed, 2 insertions(+), 153 deletions(-) diff --git a/config.json b/config.json index c11de6c..1804e72 100644 --- a/config.json +++ b/config.json @@ -5,8 +5,8 @@ "sans-serif", "serif" ], - "training_set": 20000, - "testing_set": 500, + "training_set": 2000, + "testing_set": 1000, "image_size": 16, "threshold": 400, "network": { diff --git a/examples/0123456789.png b/examples/0123456789.png index 37520511cccd1330ba1e31a5f1d38ddb16ace510..7bba065bcc2de9117c2bb03770e9e4f128c1396c 100644 GIT binary patch delta 1702 zcmV;X23h%*4#*9VHh+CdL_t(&f$f=VNL1S!#-A}S+blyU9Sf-m#Yve7OHm?CF*HO3 zDKjOE7`hD+)rW47At?xbQAt8Vb0RUcFeu6*DZ)$=)UnjjE;Aa8l$u>89fxs0=fgP; z!XI)k{5#~CfaT@o2nYy(TCK+A%a?@%jf{-IXf)#J(W478VzpY4o12T= z++5ted2>Mv!R>ZqaB%RK7r~1cFBZgAR#qZ1G7`&{Ekky8_Ahz(&xn61BqW4)@80Fu z*ci8N-OAgyZ+}x%U0q$=v}uztN0J7Efyv3qymsvxv$C?7mzPIbmKF0(r;|FJjzK{| z3=0cmYHBLYX0x!5{{DXY`}_0Lr%%G{*|TR!l6JeDHk(bD@9F7bVPPQ~8yh)2JuS?q zq@*x9I+{^YQH+g^<*{SO6tjheg{-fy=k@E?X}8;jbAOY6{&r<$WxR9e4jUUA6)_-5 zm&-)}{PE)lNwTxElX|^g*nrdNURaHfjlx3MoNlA(aL6R*kEtDjQ z6B838$)=_zhJ=K0WMo8f3|W?W?%X*hCnxje%a=m_2L=Y{>+8#$oE&y{cMGv3`Q*tH zu3582$bau#*=#npwY7QL_wL=}#fujev9c^PJUpDTEOTaNhI{w!6<&bfzI|h8XsCy~ zdi5$#oH#Krhgk!XByntP%=2RX`t=+f927D^lHuXu92y!D=G<<#X9198Nl6I{3JMhS zQ&Us_Q}H%#+(?tjq&SAjWMXe`FAW9*8yXrEbAKc`Gc&`^&Q9*%zn_vM@zJA4LVRLk zBF~&TBgFhn2M!z%`u~hZBMS=)Ns`6I#jLHZ70TD%-cCu9JZ+cDMM;u4Ffi~_&I#|ruypBC0Kl6!Z%|)fkD#C+#k?d* z(0}Xo0D$AikHcs*!e+BUtJNyv$HvAmF)@Lts3@#myB1cfRmi`WmltAUVo+041Cz-F zgTa8w$w|e$)oR7)=qQScijb9+h1S+qq5N~@a=9=(JdB8l2*pfUSsAQWD|YVO37gG^ z%*;%ooEnV=0MOOd1px5z@j-BKFxuPOe}Bq(E+I)tNqGGDvFF9Qb?acW*@R30z=jPQ zV6j+)IRNM$H$@3 zXcjc~S?%7v8}ae+c>46IVn(agV%xTDxNzYDDk>_Fo12T_;o$}4fAHV|wr}4q#DAz% zDg*`wLakQAVzEG_QVH?F!NI7lt%cEOL{(K4YHDgQIyyRk5t%K8t*xz$i;MG|--?Ti zdFs?Dp)yR8)z#HJeE6_1N0NHIp6Ti7?CtFpX4~7_xn;{1y4`Niv*O}nCM6{);+vY9 zc;v_trlqAZGBT2@R;^-we!j4eS$~z6mkVuUH*VaZ!C>&T4<0uzke6b?RL94JUq;Y4~&SWBT zI2=q*PZ#E#PAB8z<2f}oMUpHkDq>k#nQ$DE92^{^PN!o_OUt}{z2{cLy1F_XI&=u3 zp`p<0^~lf97b?R}rxUMUy?;V*a4?#in~|QLuDF!@`S~F=H5Ca73GnvzMqFGR;^N{^ zP*8xdu&{Y~UteD|H8mk8CkJ(Pb%=_J!mV4kgtsC9P^;CRtyro5z`#J5&1Pg|WMJ2> zUC?T^h>ng{oKvMz!DKR_wzd{#vl$kP1t(9Q6!zZJ(}R8c_6c)-et&+buCB(VOP7$B zmj@poA9#Cv&kxQ~cXv0;W;5(|JDQuDv3m9Dc^MV?&-)ZNG&F>cjt+EmbRab~6=`W{ zidk8f(bm?6zP>&L1qC59GZX&){=yy{4hI4P0))>({|~ZQEO0m+*t~i3-#-3-@~07*qoM6N<$f`LCoQUCw| delta 1780 zcmV?~Mix7$%zScrG;-Z8TpjRr&ni9~{skPyVj$K%6?54?Gg$AjwXY9u8kVc))ec>Ve{ zvxomzdc7WUxqlqz&!0zQVFId*@F8y8xWT-BJv}`L3=G7}moK5!Y7r6=0)xS@EXM^fEG!I_ zm6dq^{ylPXa&YwMQ6>WbFgQ4f$jC@Md-jZ(&CSilfqw%B0Q?oEs;Vl4hlgWkW`-B9 z)oL*`Gz0+X>gvMQty|&oc$j?@7Z>C3;ls=v09?I#6}`Q^sHv$zU0od$J2o~3fj|J0 z$piqnfB!zBqM~?zhO)9U3=9lFr_-Umy&c)v*{GdZj z(W6JWckdoI_INzlv111wJb1u77XSnV1i{d zckbZFj~`4d06cyA6k@TM8@t_ZRjbv|YPG!Un@lEzhK6#XJAL{z zIy*ag^X28`O9H6TXb=__wk#(gBJ%e3CV@aeZnv9=h=f8RWo2bidwV-`FAy9YOm@4S znNup2l$)Eo0a4Dk&+U z+kdxj)1EzhXkuc5iFG=i#U%*c_G&G=~pn#cMtbgI*VJH*|czJoDzrUY}?ds}6N=gbgZ{Ez^ zlKDuh)j}*5!{u_})TvXrb?X+ZZ2*AF7Y`nuzUAz z%+1X)dzhS@gj_CX=BB5o5f>MSb?er_YPB-+XV0ERU|=AmQYm)r+68ZK?`8dS0e?Jm z<_xY~yT-j?Hk+|&(s82+RSuzcA~Vjl$n#s zWYFvNXl!gmP*4zthliQxuv)En@qgk4CMG7Ze*OAodsr@j0|NsPi9}rgVzF4@@9)oS zz-TlgIy#z}1Ax7I_aZtv`fu66j*pKsUBPQ>Ymt(Yf{2I+gocJ<gsA7IdX)#c0oY_dU|@8IUgS%Oixb(09smFAb*iac=y6n zQ&W)1WL)3f-`~$`{ki`EGesC^IvY zghC-N-r;aiM@I)Yo|%~;k$*_UyS}%#H>uTXDlaeR`lgQ`KQi~RL_|8BjuH|Qn7OpH zG%^?rL`0-gsmSB;(D3juFV@%BmxMwgsnu%g?d_$D7cbJulP8x47pHMk(rr^>wnj;V{&qm*Btfr z^*DI&Aex(-(bm?6g@pws|BIEKosH(^X5Qz|&CTJ^p+iVdPe)Tz6K>wT$y{@OejX=I zoPb0kK}JRfghJtxzMPMyrlydRlEPdY0KR_xiv0Y17z_s3?RH2c5`6yrnK%FC%NG&y$aj&u_15Hk;|yt5>vh z=T4HzWWT+>#bTk6kr9$grL<+smVdO?9~r<^{d@FBJqupdzfY?HT-AzdHGr#HQT+$L W)0}}T(EM-!0000>>>>>> softmax var synaptic = require('synaptic'), network = require('./network.js'), @@ -29,131 +22,6 @@ config.fonts = config.fonts || ['serif', 'sans-serif']; config.distortion = config.distortion === undefined ? true : config.distortion; config.network.hidden = config.network.hidden || 40; -<<<<<<< HEAD - config.network.output = config.network.output || 8; - config.network.learning_rate = config.network.learning_rate || 0.1; - - log('... done'); - log(); - - var perceptron; - - if(config.mnist === true) { - perceptron = new synaptic.Architect.Perceptron( - (config.image_size * config.image_size), // input - config.network.hidden, // hidden - 4 // output - ); - - mnist(); - } else { - perceptron = new synaptic.Architect.Perceptron( - (config.image_size * config.image_size), // input - config.network.hidden, // hidden - config.network.output // output - ); - - var index, - samples = config.training_set + config.testing_set, - training = [], - testing = [], - settings = { - size: config.text.length, - height: config.image_size, - text: config.text, - fonts: config.fonts, - distortion: config.distortion - }; - - log('generating images ...'); - - for(index = 0; index < samples; index++) - captcha.generate(settings, generate(index)); - } - - // captcha callback - function generate(index) { - return function(text, data) { - var png = new PNG({ filterType: 4 }); - png.parse(data, parse(text, index)); - - if(index === 0) - fs.writeFileSync('./examples/' + text + '.png', data, 'base64'); - }; - } - - // parse MNIST data - function mnist() { - log('parsing MNIST data ...'); - - var data = fs.readFileSync('./mnist/train-images.idx3-ubyte'), - labels = fs.readFileSync('./mnist/train-labels.idx1-ubyte'), - training = [], - testing = [], - pixels = [], - image, - x, y; - - config.training_set = 60000; - config.testing_set = 10000; - config.threshold = 50; - config.image_size = 20; - - for(image = 0; image < config.training_set; image++) { - for(y = 4; y < config.image_size + 4; y++) - for(x = 4; x < config.image_size + 4; x++) - pixels.push(data[(image * 28 * 28) + (x + (y * 28)) + 15]); - - pixels = tools.center( - pixels.map(function(pixel) { - return pixel > config.threshold ? 1 : 0; - }) - ); - - training.push({ - input: pixels, - output: ('0000' + parseInt(labels[image + 8]).toString(2)).substr(-4).split('').map(Number) - }); - - pixels = []; - } - - data = fs.readFileSync('./mnist/t10k-images-2.idx3-ubyte'); - labels = fs.readFileSync('./mnist/t10k-labels.idx1-ubyte'); - - for(image = 0; image < config.testing_set; image++) { - for(y = 4; y < config.image_size + 4; y++) - for(x = 4; x < config.image_size + 4; x++) - pixels.push(data[(image * 28 * 28) + (x + (y * 28)) + 15]); - - pixels = tools.center( - pixels.map(function(pixel) { - return pixel > config.threshold ? 1 : 0; - }) - ); - - testing.push({ - input: pixels, - output: ('0000' + parseInt(labels[image + 8]).toString(2)).substr(-4).split('').map(Number) - }); - - pixels = []; - } - - log('... done', '\n'); - - tools.validate(perceptron, training); - tools.validate(perceptron, testing); - - network.train(perceptron, training, config.network.learning_rate); - fs.writeFileSync('./ocr.js', perceptron.standalone().toString()); - network.test(perceptron, testing); - } - - // 'parsed' event callback - function parse(text, index) { - return function(error, data) { -======= config.network.output = config.network.output || 10; config.network.learning_rate = config.network.learning_rate || 0.1; @@ -187,18 +55,13 @@ var png = new PNG({ filterType: 4 }); png.parse(data, function(error, data) { ->>>>>>> softmax if(error) throw error; var position, chunk = [], pixel = [], -<<<<<<< HEAD - i, j, k, x, y; -======= i, j, x, y; ->>>>>>> softmax for(i = 0; i < config.text.length; i++) { for(y = 0; y < data.height; y++) { @@ -222,11 +85,7 @@ var output = Array.apply(null, new Array(config.network.output)).map(Number.prototype.valueOf, 0); output[i] = 1; -<<<<<<< HEAD - if(index < config.training_set) { -======= if(k < config.training_set) { ->>>>>>> softmax training.push({ input: chunk, output: output @@ -241,15 +100,9 @@ chunk = []; } -<<<<<<< HEAD - if(index === samples - 1) { - log('... done'); - log(); -======= if(k++ === samples - 1) { console.log('... done'); console.log(); ->>>>>>> softmax network.train(perceptron, training, config.network.learning_rate); fs.writeFileSync('./ocr.js', 'module.exports = ' + perceptron.standalone().toString()); @@ -257,13 +110,9 @@ } }); } -<<<<<<< HEAD -})(console.log); -======= console.log('generating images ...'); for(index = 0; index < samples; index++) captcha.generate(settings, generate); })(); ->>>>>>> softmax