Mercurial > projects > aid
annotate trunk/backprop_test.d @ 7:b9fe92a2d8ad default tip
Removed old code.
author | revcompgeek |
---|---|
date | Tue, 06 May 2008 22:20:26 -0600 |
parents | ff92c77006c7 |
children |
rev | line source |
---|---|
3 | 1 module backprop_test; |
2 | |
3 import aid.nn.multilayer.backprop; | |
4 import aid.nn.outputFunctions; | |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
5 import aid.misc; |
3 | 6 import std.stdio; |
4 | 7 import std.random; |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
8 import std.conv; |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
9 import std.string; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
10 import std.stream; |
3 | 11 |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
12 uint[] outputsArray; |
3 | 13 |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
14 struct TrainingExample { |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
15 char[] name; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
16 uint numInputs,numOutputs; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
17 uint[] numHidden; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
18 double[][] inputs,outputs; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
19 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
20 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
21 /// Reads the training example from a file |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
22 TrainingExample readTrainingExample(InputStream f){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
23 TrainingExample e; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
24 char[][] temp,trnInputs,trnOutputs; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
25 char[] line; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
26 bool gotInputs,gotOutputs,gotHidden; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
27 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
28 int i; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
29 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
30 line = f.readLine(); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
31 temp = split(line); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
32 if(tolower(temp[0]) != "name:") throw new Error("Expecting \"Name:\" on first line."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
33 e.name = join(temp[1..$]," "); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
34 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
35 bool stop = false; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
36 while(!stop){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
37 if(f.eof) throw new Error("Unexpected end of file."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
38 line = strip(tolower(f.readLine())); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
39 temp = split(line); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
40 if(temp.length == 0) continue; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
41 switch(temp[0]){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
42 case "inputs:": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
43 if(gotInputs) throw new Error("Only one inputs line allowed."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
44 e.numInputs = toInt(temp[1]); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
45 if(e.numInputs < 1) throw new Error("Inputs cannot be less than 1."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
46 gotInputs = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
47 break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
48 case "outputs:": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
49 if(gotOutputs) throw new Error("Only one outputs line allowed."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
50 e.numOutputs = toInt(temp[1]); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
51 if(e.numOutputs < 1) throw new Error("Outputs cannot be less than 1."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
52 gotOutputs = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
53 break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
54 case "hidden:": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
55 if(gotHidden) throw new Error("Only one hidden line allowed."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
56 if(temp.length == 1) break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
57 temp = split(join(temp[1..$],""),","); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
58 e.numHidden.length = temp.length; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
59 for(i = 0; i<temp.length; i++){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
60 e.numHidden[i] = toInt(temp[i]); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
61 if(e.numHidden[i] < 1) throw new Error("Hidden layers cannot be less than 1."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
62 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
63 gotHidden = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
64 break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
65 case "data:": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
66 stop = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
67 break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
68 default: |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
69 throw new Error(temp[0] ~ " not recognized."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
70 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
71 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
72 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
73 if(!gotInputs) throw new Error("Missing inputs line."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
74 if(!gotOutputs) throw new Error("Missing outputs line."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
75 //if(!gotHidden) throw new Error("Missing hidden line."); // Hidden line not required |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
76 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
77 //Data reading |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
78 e.inputs.length = 10; // This isn't as redundant as it looks. |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
79 e.inputs.length = 0; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
80 e.outputs.length = 10; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
81 e.outputs.length = 0; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
82 while(!f.eof){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
83 line = join(split(strip(f.readLine())),""); // remove whitespace |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
84 temp = split(line,";"); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
85 if(line.length == 0) continue; // blank line |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
86 if(temp.length != 2) throw new Error("Wrong number of semicolons in data."); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
87 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
88 trnInputs = split(temp[0],","); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
89 trnOutputs = split(temp[1],","); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
90 if(trnInputs.length != e.numInputs) throw new Error("Expecting " ~ toString(e.numInputs) ~ " inputs, not " ~ toString(trnInputs.length)); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
91 if(trnOutputs.length != e.numOutputs) throw new Error("Expecting " ~ toString(e.numOutputs) ~ " outputs, not " ~ toString(trnOutputs.length)); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
92 e.inputs.length = e.inputs.length + 1; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
93 e.inputs[$-1].length = e.numInputs; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
94 e.outputs.length = e.outputs.length + 1; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
95 e.outputs[$-1].length = e.numOutputs; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
96 for(i = 0; i<e.numInputs; i++) |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
97 e.inputs[$-1][i] = toDouble(trnInputs[i]); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
98 for(i = 0; i<e.numOutputs; i++) |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
99 e.outputs[$-1][i] = toDouble(trnOutputs[i]); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
100 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
101 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
102 return e; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
103 } |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
104 |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
105 void main(char[][] args) { |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
106 double learningRate = 0.2, momentum = 0.3, randomSize = 0.1, errorMin = 0.05; |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
107 int /*trainingExample = 0,*/ maxIters = 10000; // 0 to 2 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
108 bool quiet,printFull,printWeights; |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
109 int printEvery = 500; // output every ~ times |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
110 TrainingExample example; |
3 | 111 |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
112 char[] filename = args[1]; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
113 example = readTrainingExample(new File(filename)); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
114 for(int i = 2; i < args.length; i++) { |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
115 switch(args[i]) { |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
116 case "-s": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
117 case "--seed": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
118 rand_seed(123, 0); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
119 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
120 case "-l": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
121 case "--learning-rate": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
122 learningRate = toDouble(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
123 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
124 case "-m": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
125 case "--momentum": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
126 momentum = toDouble(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
127 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
128 case "-r": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
129 case "--random-size": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
130 randomSize = toDouble(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
131 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
132 case "-e": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
133 case "--error-min": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
134 errorMin = toDouble(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
135 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
136 case "-q": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
137 case "--quiet": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
138 quiet = true; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
139 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
140 case "-p": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
141 case "--print-every": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
142 printEvery = toInt(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
143 break; |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
144 case "-i": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
145 case "--min-iters": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
146 case "--min-iterations": |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
147 maxIters = toInt(args[++i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
148 break; |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
149 case "-f": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
150 case "--full": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
151 case "--print full": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
152 printFull = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
153 break; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
154 case "-w": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
155 case "--print-weights": |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
156 printWeights = true; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
157 break; |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
158 default: |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
159 throw new Error("Unknown switch: " ~ args[i]); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
160 } |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
161 } |
7 | 162 |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
163 writefln("Starting training with: " ~ example.name); |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
164 |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
165 OutputFunctionPtr[] functions; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
166 functions.length = example.numHidden.length + 1; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
167 for(int i = 0; i<functions.length; i++){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
168 functions[i] = &sigmoid; |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
169 } |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
170 |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
171 Backprop nn = new Backprop(example.numInputs, example.numHidden ~ example.numOutputs, functions, learningRate, momentum, randomSize, true); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
172 |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
173 double error = nn.calculateError(example.inputs, example.outputs); |
4 | 174 double[] output; |
3 | 175 int iter = 0; |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
176 //writef("weights="); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
177 //printArray(nn.getWeights()); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
178 //writef("outputs="); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
179 //printArray(nn.evaluateFull(trainingInputs[$ - 1])); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
180 while (error >= errorMin && iter < maxIters) { |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
181 if(iter % printEvery == 0) { |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
182 writefln("Iter: %d", iter); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
183 if(!quiet) { |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
184 for(int i = 0; i < example.inputs.length; i++) { |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
185 output = nn.evaluate(example.inputs[i]); |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
186 writef(" %d:", i); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
187 printArray(output); |
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
188 } |
3 | 189 } |
190 writefln(" Error: %f", error); | |
191 } | |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
192 nn.train(example.inputs, example.outputs, true); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
193 error = nn.calculateError(example.inputs, example.outputs); |
4 | 194 iter++; |
3 | 195 } |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
196 writefln("Total Iters: %d", iter); |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
197 for(int i = 0; i < example.inputs.length; i++) { |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
198 writef(" %d:", i); |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
199 if(printFull) |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
200 printArray(nn.evaluateFull(example.inputs[i])[0]); |
5
810d58835f86
Added momentum and stochastic training to backprop.
revcompgeek
parents:
4
diff
changeset
|
201 else |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
202 printArray(nn.evaluate(example.inputs[i])); |
3 | 203 } |
204 writefln(" Error: %f", error); | |
6
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
205 if(printWeights){ |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
206 writef("weights="); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
207 printArray(nn.getWeights()); |
ff92c77006c7
Added support for reading training examples from files.
revcompgeek
parents:
5
diff
changeset
|
208 } |
4 | 209 } |