3
|
1 module backprop_test;
|
|
2
|
|
3 import aid.nn.multilayer.backprop;
|
|
4 import aid.nn.outputFunctions;
|
|
5 import std.stdio;
|
4
|
6 import std.random;
|
3
|
7
|
4
|
8 /+double[][] trainingInputs = [
|
3
|
9 [0,0,0],
|
|
10 [0,0,1],
|
|
11 [0,1,0],
|
|
12 [0,1,1],
|
|
13 [1,0,0],
|
|
14 [1,0,1],
|
|
15 [1,1,0],
|
|
16 [1,1,1]];
|
|
17
|
4
|
18 double[][] trainingOutputs = [
|
3
|
19 [0.1],
|
|
20 [0.9],
|
|
21 [0.9],
|
|
22 [0.1],
|
|
23 [0.9],
|
|
24 [0.1],
|
|
25 [0.1],
|
|
26 [0.9]];+/
|
|
27
|
4
|
28 /+double[][] trainingInputs = [
|
3
|
29 [0,0],
|
4
|
30 [1,0],
|
3
|
31 [0,1],
|
|
32 [1,1]];
|
|
33
|
4
|
34 double[][] trainingOutputs = [
|
3
|
35 [0.9],
|
4
|
36 [0.1],
|
|
37 [0.1],
|
|
38 [0.9]];+/
|
|
39
|
|
40 double[][] trainingInputs = [
|
|
41 [0.9,0.1,0.1,0.1,0.1,0.1,0.1,0.1],
|
|
42 [0.1,0.9,0.1,0.1,0.1,0.1,0.1,0.1],
|
|
43 [0.1,0.1,0.9,0.1,0.1,0.1,0.1,0.1],
|
|
44 [0.1,0.1,0.1,0.9,0.1,0.1,0.1,0.1],
|
|
45 [0.1,0.1,0.1,0.1,0.9,0.1,0.1,0.1],
|
|
46 [0.1,0.1,0.1,0.1,0.1,0.9,0.1,0.1],
|
|
47 [0.1,0.1,0.1,0.1,0.1,0.1,0.9,0.1],
|
|
48 [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9]];
|
3
|
49
|
|
50 void main(){
|
4
|
51 //rand_seed(0,0);
|
|
52 Backprop nn = new Backprop(8,[3,8],[&sigmoid,&sigmoid],.1);
|
3
|
53
|
4
|
54 double error = nn.calculateError(trainingInputs,trainingInputs);
|
|
55 double[] output;
|
3
|
56 int iter = 0;
|
4
|
57 writef("weights="); printArray(nn.getWeights());
|
|
58 writef("outputs="); printArray(nn.evaluateFull(trainingInputs[$-1]));
|
|
59 while(error >= 0.01 && iter < 50000){
|
|
60 if(iter % 500 == 0){
|
3
|
61 writefln("Iter: %d",iter);
|
|
62 for(int i=0; i<trainingInputs.length; i++){
|
|
63 output = nn.evaluate(trainingInputs[i]);
|
|
64 writef(" %d:", i); printArray(output);
|
|
65 }
|
|
66 writefln(" Error: %f", error);
|
|
67 }
|
4
|
68 nn.train(trainingInputs,trainingInputs);
|
|
69 error = nn.calculateError(trainingInputs,trainingInputs);
|
|
70 iter++;
|
3
|
71 }
|
|
72 writefln("Total Iters: %d",iter);
|
|
73 for(int i=0; i<trainingInputs.length; i++){
|
4
|
74 writef(" %d:", i); printArray(nn.evaluateFull(trainingInputs[i])[0]);
|
3
|
75 }
|
|
76 writefln(" Error: %f", error);
|
4
|
77 writef("weights="); printArray(nn.getWeights());
|
3
|
78 }
|
|
79
|
4
|
80 void printArray(double[] array){
|
3
|
81 writef("[");
|
|
82 for(int i=0; i<array.length-1; i++){
|
|
83 writef("%f, ",array[i]);
|
|
84 }
|
4
|
85 writefln("%f]",array[$-1]);
|
|
86 }
|
|
87
|
|
88 void printArray(double[][] array){
|
|
89 writef("[");
|
|
90 for(int i=0; i<array.length; i++){
|
|
91 printArray(array[i]);
|
|
92 }
|
|
93 writefln("]");
|
|
94 }
|
|
95
|
|
96 void printArray(double[][][] array){
|
|
97 writef("[");
|
|
98 for(int i=0; i<array.length; i++){
|
|
99 printArray(array[i]);
|
|
100 }
|
|
101 writefln("]");
|
3
|
102 } |