'Sigmoid function generator 'Author: Robert John Morton YE572246C December 1993 DefInt a - x dim SigTab(1024) R! = 32767 RR! = 65534 screen 9 'switch to EGA enhanced mode graphics window (-48000,-48000) - (+48000,+48000)'set up suitable screen co-ordinates YY = 3 / 2 'PC screen X scaling is 2/3 its Y color ,1 line(-32767, 0) - (32767, 0) , 7 line(0, -32767) - (0, 32767) , 7 locate 2,13:print"NEURAL TRANSFER FUNCTION USED IN A MULTI-LAYER PERCEPTRON" locate 4,39:print"f(x)" locate 5,34:print"+32767" locate 21,42:print"-32767" locate 12,66:print"+32767" locate 14,10:print"-32767" locate 13,70:print"x" locate 8,12:print"SIGMOID FUNCTION" locate 16,45:print"f(x) = 2/(1+exp(-k*x)) - 1" locate 17,45:print"x = neuron activation level" locate 18,45:print"f(x) = neuron output level" k = 4 : c = 11 : gosub SigGen : gosub SigTest k = 8 : c = 10 : gosub SigGen : gosub SigTest k = 16 : c = 12 : gosub SigGen : gosub SigTest k = 32 : c = 14 : gosub SigGen : gosub SigTest LOCATE 24,1:print"HIT ANY KEY TO QUIT"; E: x$ = inkey$ : if x$ = "" goto E end SigGen: for i = 0 to 1023 w! = i v! = RR! / (1 + exp(-w! * 32 * k / R!)) - R! y = v! : SigTab(i) = y next SigTab(1024) = R! return SigTest: k$ = str$(k) : k$ = "k =" + space$(3 - len(k$)) + k$ locate 11-q,56: print k$ : q=q+1 x = -32767 : start! = TIMER ' : locate 17,5:print"Errors =" B: gosub Sigmoid : pset (x, y), c if x < 32767 then x = x + 1 : goto B locate 23,4:print"TIME:"; TIMER - start! ;"seconds" ' n = nn : l = 22 : nn$ = "Error Occurrences =" : gosub ShowNum return 'THIS IS 1.46 TIMES THE SPEED OF THE EXP() FUNCTION 'AND DISAGREES WITH EXP() ONLY IN BIT 0 (IE BY AT MOST 1 IN 32767) Sigmoid: if x < 0 then xx = -x else xx = x xxx! = xx i = INT(xxx! / 32) dx = xx - i * 32 y = SigTab(i) y = y + ((dx * (SigTab(i + 1) - y)) / 32) if x < 0 then y = -y ' w! = x : v! = RR! / (1 + exp(-w! * k / R!)) - R! : yy = v! ' n = abs(yy-y) : locate 17,13 : print n : if n > 0 then nn = nn + 1 return ShowNum: n$ = str$(n) : n$ = space$(6 - len(n$)) + n$ locate l,5: print nn$+n$ : return