diff trunk/perceptron_test.d @ 2:9655c8362b25

Added the Perceptron class and the perceptron_test testing program.
author revcompgeek
date Sat, 05 Apr 2008 23:41:30 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/perceptron_test.d	Sat Apr 05 23:41:30 2008 -0600
@@ -0,0 +1,51 @@
+module perceptron_test;
+
+import aid.nn.perceptron;
+import std.stdio;
+import std.string;
+import std.conv;
+import std.math;
+
+void main(char[][] args){
+	perceptron nn;
+	double[][] inputs = [[ 0, 0],
+					     [ 0, 1],
+					     [ 1, 0],
+					     [ 1, 1]];
+	double[] outputs = [ 0, 0, 0, 1];
+	double learningRate = 0.3;
+	int numReps = 20;
+
+	if(args.length > 1) learningRate = toDouble(args[1]);
+	if(args.length > 2) numReps = toInt(args[2]);
+	
+	nn = new perceptron(2,learningRate,true,null);
+
+	int iter = 0;
+	double[] weights;
+	double t,difference;
+	while(iter <= numReps){
+		weights=nn.getWeights();
+		writefln("[ %f, %f, %f ]",weights[0],weights[1],weights[2]);
+		//Evaluate
+		for(int i = 0; i < 4; i++){
+			t = nn.evaluate(inputs[i]);
+			writefln("  D: %f %f",t,outputs[i]);
+			difference = abs(t-outputs[i]);
+		}
+		writefln("%d: Total Difference: %f",iter,difference);
+		// End evaluate
+
+		// Train
+		for(int i = 0; i < 4; i++){
+			nn.train(inputs[i],outputs[i]);
+		}
+		writefln("%d: Error Value: %f",iter,nn.getErrorValue(inputs,outputs));
+		writefln();
+		
+		iter++;
+		//if(iter > 20) break;
+	}
+	weights=nn.getWeights();
+	writefln("[ %f, %f, %f ]",weights[0],weights[1],weights[2]);
+}