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