// http://www.kx.com/listbox/k/msg05688.html // Subject: Re: small victory: naive neural net // From: "Alexander Skomorokhov" // Date: Fri, 17 May 2002 01:01:45 +0400 sigm:{%1.0 + _exp -x*y} / sigmoid function train:{[n;i;t] / net;inputs;target ih:n[0] / ih: i->hidden weights ho:n[1] / ho: hidden->output weights i:i,1.0 / add bias h:sigm[0.5;+/i*ih] / process hidden nodes o:sigm[0.5;+/h*ho] / process output node(s) eo:o*(1-o)*(t-o) / backprop error eh:h*(1-h)*+/'eo*/:ho / backprop error ho:ho+(0.5*eo*/:h) / adjust hidden->output weights ih:ih+(0.5*eh*/:i) / adjust i->hidden weights (ih;ho)} / predict output for a given nwork and is eval:{[n;i] x:i,'1.0 y:sigm[0.5;x _mul n[0]] sigm[0.5;y _mul n[1]]} / set n state and parameters ih:2*-0.5+3 4#(3*4) _draw 0 ho:2*-0.5+4 1#(4*1) _draw 0 n:(ih;ho) i:(0 0;0 1;1 0;1 1) t:4 1#(0 1 1 0) / perform network training do[10000 k:0 do[#i;n:train[n;i[k];t[k]] k:k+1]] / predict outputs and calculate error p:eval[n;i] t,'p err:+/(p-t)^2 (err%#t)^.5