// 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