47 |
|
|
48 |
open Nn |
open Nn |
49 |
open InitVisitor |
open InitVisitor |
|
open DefaultVisitor |
|
50 |
open MlpNN |
open MlpNN |
51 |
|
|
|
|
|
|
(** |
|
|
Initializes the output activation. |
|
|
*) |
|
|
let initOutputActivation network = |
|
|
let outputActivation = Array.make network#getLayerNb [||] in |
|
|
for i = 0 to network#getLayerNb - 1 do |
|
|
outputActivation.(i) <- Array.make (network#getNeuronsPerLayer i) 0.0 |
|
|
done; |
|
|
network#setOutputActivation outputActivation |
|
|
|
|
|
(** |
|
|
Initializes the the input sum. |
|
|
*) |
|
|
let initInputSum network = |
|
|
let inputSum = Array.make network#getLayerNb [||] in |
|
|
for i = 0 to network#getLayerNb - 1 do |
|
|
inputSum.(i) <- Array.create (network#getNeuronsPerLayer i) 0.0 |
|
|
done; |
|
|
network#setInputSum inputSum |
|
|
|
|
|
(** |
|
|
Initializes the error. |
|
|
*) |
|
|
let initError network = |
|
|
let error = Array.make network#getLayerNb [||] in |
|
|
for i = 0 to network#getLayerNb - 1 do |
|
|
error.(i) <- Array.make (network#getNeuronsPerLayer i) 0.0 |
|
|
done; |
|
|
network#setError error |
|
|
|
|
|
(** |
|
|
Initializes the weights (using random numbers). |
|
|
*) |
|
|
let initWeights network = |
|
|
let weights = Array.make (network#getLayerNb - 1) [|[||]|] in |
|
|
for i = 0 to network#getLayerNb - 2 do |
|
|
weights.(i) <- Array.make (network#getNeuronsPerLayer i) [||]; |
|
|
for j = 0 to (network#getNeuronsPerLayer i) - 1 do |
|
|
weights.(i).(j) <- Array.make (network#getNeuronsPerLayer (i + 1)) (Random.float (Env.getEnv())#getRandLimit) |
|
|
done; |
|
|
done; |
|
|
network#setWeights weights |
|
|
|
|
|
(** |
|
|
Initializes the gradients. |
|
|
*) |
|
|
let initGradients network = |
|
|
let gradients = Array.make (network#getLayerNb - 1) [|[||]|] in |
|
|
for i = 0 to network#getLayerNb - 2 do |
|
|
gradients.(i) <- Array.create (network#getNeuronsPerLayer i) [||]; |
|
|
for j = 0 to (network#getNeuronsPerLayer i) - 1 do |
|
|
gradients.(i).(j) <- Array.create (network#getNeuronsPerLayer (i + 1)) 0.0 |
|
|
done; |
|
|
done; |
|
|
network#setGradients gradients |
|
|
|
|
|
|
|
52 |
(** |
(** |
53 |
Initializes a Multi Layer Perceptron. |
Initializes a Multi Layer Perceptron. |
54 |
*) |
*) |
67 |
Used to initialize the random number generator. |
Used to initialize the random number generator. |
68 |
*) |
*) |
69 |
method visit (network : mlpNN) = |
method visit (network : mlpNN) = |
|
|
|
|
(** Initialize the random number generator. *) |
|
|
Random.self_init(); |
|
70 |
|
|
71 |
(** Initialize everything *) |
(** |
72 |
initOutputActivation network; |
First, define a bunch of functions which initializes the different |
73 |
initInputSum network; |
stuffs. |
74 |
initError network; |
*) |
75 |
initGradients network; |
let neuronsPerLayer = network#getNeuronsPerLayer in |
76 |
initWeights network |
|
77 |
|
(** |
78 |
|
Initializes the output activation. |
79 |
|
*) |
80 |
|
let initOutputActivation network = |
81 |
|
let outputActivation = Array.make network#getLayerNb [||] in |
82 |
|
for i = 0 to network#getLayerNb - 1 do |
83 |
|
outputActivation.(i) |
84 |
|
<- Array.make (neuronsPerLayer.(i)) 0.0 |
85 |
|
done; |
86 |
|
network#setOutputActivation outputActivation |
87 |
|
and |
88 |
|
|
89 |
|
(** |
90 |
|
Initializes the the input sum. |
91 |
|
*) |
92 |
|
initInputSum network = |
93 |
|
let inputSum = Array.make network#getLayerNb [||] in |
94 |
|
for i = 0 to network#getLayerNb - 1 do |
95 |
|
inputSum.(i) |
96 |
|
<- Array.make (neuronsPerLayer.(i)) 0.0 |
97 |
|
done; |
98 |
|
network#setInputSum inputSum |
99 |
|
and |
100 |
|
|
101 |
|
(** |
102 |
|
Initializes the error. |
103 |
|
*) |
104 |
|
initError network = |
105 |
|
let error = Array.make network#getLayerNb [||] in |
106 |
|
for i = 0 to network#getLayerNb - 1 do |
107 |
|
error.(i) |
108 |
|
<- Array.make (neuronsPerLayer.(i)) 0.0 |
109 |
|
done; |
110 |
|
network#setError error |
111 |
|
and |
112 |
|
|
113 |
|
(** |
114 |
|
Initializes the weights (using random numbers). |
115 |
|
*) |
116 |
|
initWeights network = |
117 |
|
let weights = Array.make (network#getLayerNb - 1) [|[||]|] in |
118 |
|
for i = 0 to network#getLayerNb - 2 do |
119 |
|
weights.(i) <- Array.make (neuronsPerLayer.(i)) [||]; |
120 |
|
for j = 0 to (neuronsPerLayer.(i)) - 1 do |
121 |
|
weights.(i).(j) |
122 |
|
<- Array.make (neuronsPerLayer.(i + 1)) |
123 |
|
(Random.float (Env.getEnv())#getRandLimit) |
124 |
|
done; |
125 |
|
done; |
126 |
|
network#setWeights weights |
127 |
|
and |
128 |
|
|
129 |
|
(** |
130 |
|
Initializes the gradients. |
131 |
|
*) |
132 |
|
initGradients network = |
133 |
|
let gradients = Array.make (network#getLayerNb - 1) [|[||]|] in |
134 |
|
for i = 0 to network#getLayerNb - 2 do |
135 |
|
gradients.(i) <- Array.make (neuronsPerLayer.(i)) [||]; |
136 |
|
for j = 0 to ((neuronsPerLayer.(i)) - 1) do |
137 |
|
gradients.(i).(j) |
138 |
|
<- Array.make (neuronsPerLayer.(i + 1)) 0.0 |
139 |
|
done |
140 |
|
done; |
141 |
|
network#setGradients gradients |
142 |
|
in |
143 |
|
|
144 |
|
(** Initialize the random number generator. *) |
145 |
|
Random.self_init(); |
146 |
|
|
147 |
|
(** Initialize everything *) |
148 |
|
initOutputActivation network; |
149 |
|
initInputSum network; |
150 |
|
initError network; |
151 |
|
initGradients network; |
152 |
|
initWeights network |
153 |
|
|
154 |
end |
end |