49 |
open InitVisitor |
open InitVisitor |
50 |
open DefaultVisitor |
open DefaultVisitor |
51 |
open TdNN |
open TdNN |
|
|
|
52 |
|
|
|
(** |
|
|
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#getFeaturesNb i) [||]; |
|
|
for j = 0 to (network#getFeaturesNb i) - 1 do |
|
|
outputActivation.(i).(j) <- Array.make (network#getTimeNb i) 0.0 |
|
|
done |
|
|
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#getFeaturesNb i) [||]; |
|
|
for j = 0 to (network#getFeaturesNb i) - 1 do |
|
|
inputSum.(i).(j) <- Array.create (network#getTimeNb i) 0.0 |
|
|
done |
|
|
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#getFeaturesNb i) [||]; |
|
|
for j = 0 to (network#getFeaturesNb i) - 1 do |
|
|
error.(i).(j) <- Array.make (network#getTimeNb i) 0.0 |
|
|
done |
|
|
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#getFeaturesNb i) [|[||]|]; |
|
|
for j = 0 to (network#getFeaturesNb i) - 1 do |
|
|
weights.(i).(j) <- Array.make (network#getFeaturesNb (i + 1)) [||]; |
|
|
for k = 0 to (network#getFeaturesNb (i + 1)) - 1 do |
|
|
weights.(i).(j).(k) <- Array.make (network#getTimeNb i) (Random.float (Env.getEnv())#getRandLimit) |
|
|
done |
|
|
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.make (network#getFeaturesNb i) [|[||]|]; |
|
|
for j = 0 to (network#getFeaturesNb i) - 1 do |
|
|
gradients.(i).(j) <- Array.make (network#getFeaturesNb (i + 1)) [||]; |
|
|
for k = 0 to (network#getFeaturesNb (i + 1)) - 1 do |
|
|
gradients.(i).(j).(k) <- Array.make (network#getTimeNb i) (Random.float (Env.getEnv())#getRandLimit) |
|
|
done |
|
|
done |
|
|
done; |
|
|
network#setGradients gradients |
|
53 |
|
|
54 |
(** |
(** |
55 |
Initializes a Time Delay Neural Network. |
Initializes a Time Delay Neural Network. |
70 |
*) |
*) |
71 |
method visit (network : tdNN) = |
method visit (network : tdNN) = |
72 |
|
|
73 |
(** Initialize the random number generator. *) |
(** |
74 |
Random.self_init(); |
First, define a bunch of functions which initializes the different |
75 |
|
stuffs. |
76 |
(** Initialize everything *) |
*) |
|
initOutputActivation network; |
|
|
initInputSum network; |
|
|
initError network; |
|
|
initGradients network; |
|
|
initWeights network |
|
77 |
|
|
78 |
|
let featuresNb = network#getFeaturesNb and |
79 |
|
timeNb = network#getTimeNb in |
80 |
|
|
81 |
|
(** |
82 |
|
Initializes the output activation. |
83 |
|
*) |
84 |
|
let initOutputActivation network = |
85 |
|
let outputActivation = |
86 |
|
Array.make network#getLayerNb [|[||]|] in |
87 |
|
for i = 0 to network#getLayerNb - 1 do |
88 |
|
outputActivation.(i) <- Array.make (featuresNb.(i)) [||]; |
89 |
|
for j = 0 to (featuresNb.(i)) - 1 do |
90 |
|
outputActivation.(i).(j) <- Array.make (timeNb.(i)) 0.0 |
91 |
|
done |
92 |
|
done; |
93 |
|
network#setOutputActivation outputActivation |
94 |
|
and |
95 |
|
|
96 |
|
(** |
97 |
|
Initializes the the input sum. |
98 |
|
*) |
99 |
|
initInputSum (network : tdNN) = |
100 |
|
let inputSum = Array.make network#getLayerNb [|[||]|] in |
101 |
|
for i = 0 to network#getLayerNb - 1 do |
102 |
|
inputSum.(i) <- Array.create (featuresNb.(i)) [||]; |
103 |
|
for j = 0 to (featuresNb.(i)) - 1 do |
104 |
|
inputSum.(i).(j) <- Array.create (timeNb.(i)) 0.0 |
105 |
|
done |
106 |
|
done; |
107 |
|
network#setInputSum inputSum |
108 |
|
and |
109 |
|
|
110 |
|
(** |
111 |
|
Initializes the error. |
112 |
|
*) |
113 |
|
initError (network : tdNN) = |
114 |
|
let error = Array.make network#getLayerNb [|[||]|] in |
115 |
|
for i = 0 to network#getLayerNb - 1 do |
116 |
|
error.(i) <- Array.make (featuresNb.(i)) [||]; |
117 |
|
for j = 0 to (featuresNb.(i)) - 1 do |
118 |
|
error.(i).(j) <- Array.make (timeNb.(i)) 0.0 |
119 |
|
done |
120 |
|
done; |
121 |
|
network#setError error |
122 |
|
and |
123 |
|
|
124 |
|
(** |
125 |
|
Initializes the weights (using random numbers). |
126 |
|
*) |
127 |
|
initWeights (network : tdNN) = |
128 |
|
let weights = Array.make (network#getLayerNb - 1) [|[|[||]|]|] in |
129 |
|
for i = 0 to network#getLayerNb - 2 do |
130 |
|
weights.(i) <- Array.make (featuresNb.(i)) [|[||]|]; |
131 |
|
for j = 0 to (featuresNb.(i)) - 1 do |
132 |
|
weights.(i).(j) |
133 |
|
<- Array.make (featuresNb.(i + 1)) [||]; |
134 |
|
for k = 0 to (featuresNb.(i + 1)) - 1 do |
135 |
|
weights.(i).(j).(k) |
136 |
|
<- Array.make (timeNb.(i)) |
137 |
|
(Random.float (Env.getEnv())#getRandLimit) |
138 |
|
done |
139 |
|
done |
140 |
|
done; |
141 |
|
network#setWeights weights |
142 |
|
and |
143 |
|
|
144 |
|
(** |
145 |
|
Initializes the gradients. |
146 |
|
*) |
147 |
|
initGradients (network : tdNN) = |
148 |
|
let gradients = Array.make (network#getLayerNb - 1) [|[|[||]|]|] in |
149 |
|
for i = 0 to network#getLayerNb - 2 do |
150 |
|
gradients.(i) <- Array.make (featuresNb.(i)) [|[||]|]; |
151 |
|
for j = 0 to (featuresNb.(i)) - 1 do |
152 |
|
gradients.(i).(j) |
153 |
|
<- Array.make (featuresNb.(i + 1)) [||]; |
154 |
|
for k = 0 to (featuresNb.(i + 1)) - 1 do |
155 |
|
gradients.(i).(j).(k) |
156 |
|
<- Array.make (timeNb.(i)) |
157 |
|
(Random.float (Env.getEnv())#getRandLimit) |
158 |
|
done |
159 |
|
done |
160 |
|
done; |
161 |
|
network#setGradients gradients |
162 |
|
in |
163 |
|
|
164 |
|
(** Initialize the random number generator. *) |
165 |
|
Random.self_init(); |
166 |
|
|
167 |
|
(** Initialize everything *) |
168 |
|
initOutputActivation network; |
169 |
|
initInputSum network; |
170 |
|
initError network; |
171 |
|
initGradients network; |
172 |
|
initWeights network |
173 |
|
|
174 |
end |
end |
175 |
|
|