Mercurial > projects > aid
diff trunk/backprop_test.d @ 4:73beed484455
Backprop working correctly.
author | revcompgeek |
---|---|
date | Sat, 12 Apr 2008 21:55:37 -0600 |
parents | 314d68bafeff |
children | 810d58835f86 |
line wrap: on
line diff
--- a/trunk/backprop_test.d Fri Apr 11 18:12:55 2008 -0600 +++ b/trunk/backprop_test.d Sat Apr 12 21:55:37 2008 -0600 @@ -3,8 +3,9 @@ import aid.nn.multilayer.backprop; import aid.nn.outputFunctions; import std.stdio; +import std.random; -/+float[][] trainingInputs = [ +/+double[][] trainingInputs = [ [0,0,0], [0,0,1], [0,1,0], @@ -14,7 +15,7 @@ [1,1,0], [1,1,1]]; -float[][] trainingOutputs = [ +double[][] trainingOutputs = [ [0.1], [0.9], [0.9], @@ -24,27 +25,39 @@ [0.1], [0.9]];+/ -float[][] trainingInputs = [ +/+double[][] trainingInputs = [ [0,0], + [1,0], [0,1], - [1,0], [1,1]]; -float[][] trainingOutputs = [ - [0.1], +double[][] trainingOutputs = [ [0.9], - [0.9], - [0.1]]; + [0.1], + [0.1], + [0.9]];+/ + +double[][] trainingInputs = [ + [0.9,0.1,0.1,0.1,0.1,0.1,0.1,0.1], + [0.1,0.9,0.1,0.1,0.1,0.1,0.1,0.1], + [0.1,0.1,0.9,0.1,0.1,0.1,0.1,0.1], + [0.1,0.1,0.1,0.9,0.1,0.1,0.1,0.1], + [0.1,0.1,0.1,0.1,0.9,0.1,0.1,0.1], + [0.1,0.1,0.1,0.1,0.1,0.9,0.1,0.1], + [0.1,0.1,0.1,0.1,0.1,0.1,0.9,0.1], + [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9]]; void main(){ - Backprop nn = new Backprop(2,[4,1],[&sigmoid,&sigmoid]); + //rand_seed(0,0); + Backprop nn = new Backprop(8,[3,8],[&sigmoid,&sigmoid],.1); - float error = 10.0; - float[] output; + double error = nn.calculateError(trainingInputs,trainingInputs); + double[] output; int iter = 0; - while(error >= 0.5){ - error = nn.calculateError(trainingInputs,trainingOutputs); - if(iter % 100 == 0){ + writef("weights="); printArray(nn.getWeights()); + writef("outputs="); printArray(nn.evaluateFull(trainingInputs[$-1])); + while(error >= 0.01 && iter < 50000){ + if(iter % 500 == 0){ writefln("Iter: %d",iter); for(int i=0; i<trainingInputs.length; i++){ output = nn.evaluate(trainingInputs[i]); @@ -52,20 +65,38 @@ } writefln(" Error: %f", error); } - nn.train(trainingInputs,trainingOutputs); + nn.train(trainingInputs,trainingInputs); + error = nn.calculateError(trainingInputs,trainingInputs); + iter++; } writefln("Total Iters: %d",iter); for(int i=0; i<trainingInputs.length; i++){ - output = nn.evaluate(trainingInputs[i]); - writef(" %d:", i); printArray(output); + writef(" %d:", i); printArray(nn.evaluateFull(trainingInputs[i])[0]); } writefln(" Error: %f", error); + writef("weights="); printArray(nn.getWeights()); } -void printArray(float[] array){ +void printArray(double[] array){ writef("["); for(int i=0; i<array.length-1; i++){ writef("%f, ",array[i]); } - writefln("%f]",array[$]); + writefln("%f]",array[$-1]); +} + +void printArray(double[][] array){ + writef("["); + for(int i=0; i<array.length; i++){ + printArray(array[i]); + } + writefln("]"); +} + +void printArray(double[][][] array){ + writef("["); + for(int i=0; i<array.length; i++){ + printArray(array[i]); + } + writefln("]"); } \ No newline at end of file