2:- module( plfann, [
3
4 5 6
7 8
9 fann_type/1,
10 fann_set_type/1,
11 fann_error/1,
12 fann_swi_mode/0,
13 fann_print_mode/1,
14
15 16
17 fann_create_standard/4,
18 fann_create_standard/5,
19 fann_create_standard/6,
20 fann_create_standard/7,
21 fann_create_standard_array/2,
22 fann_create_standard_array/3,
23 fann_create_sparse/5,
24 fann_create_sparse/6,
25 fann_create_sparse/7,
26 fann_create_sparse/8,
27 fann_create_sparse_array/3,
28 fann_create_sparse_array/4,
29 fann_create_shortcut/4,
30 fann_create_shortcut/5,
31 fann_create_shortcut/6,
32 fann_create_shortcut/7,
33 fann_create_shortcut_array/2,
34 fann_create_shortcut_array/3,
35 fann_destroy/1,
36 37 fann_run/3,
38 fann_run_unsafe/3,
39 fann_randomize_weights/3,
40 fann_init_weights/2,
41 fann_print_connections/1,
42
43 44
45 fann_print_parameters/1,
46 fann_get_num_input/2,
47 fann_get_num_output/2,
48 fann_get_total_neurons/2,
49 fann_get_total_connections/2,
50 fann_get_network_type/2,
51 fann_get_connection_rate/2,
52 fann_get_num_layers/2,
53 fann_get_layer_array/2,
54 fann_get_bias_array/2,
55 fann_get_connection_array/2,
56 fann_set_weight_array/2,
57 fann_set_weight/4,
58 fann_set_user_data/2,
59 fann_get_user_data/2,
60 fann_get_decimal_point/2,
61 fann_get_multiplier/2,
62
63 64
65 fann_train/3,
66 fann_test/3,
67 fann_get_MSE/2,
68 fann_get_bit_fail/2,
69 fann_reset_MSE/1,
70
71 72
73 fann_train_on_data/5,
74 fann_train_on_file/5,
75 fann_train_epoch/2,
76 fann_test_data/3,
77
78 79
80 fann_read_train_from_file/2,
81 82 83 fann_destroy_train/1,
84 fann_shuffle_train_data/1,
85 fann_scale_train/2,
86 fann_descale_train/2,
87 fann_set_input_scaling_params/4,
88 fann_set_output_scaling_params/4,
89 fann_set_scaling_params/6,
90 fann_clear_scaling_params/1,
91 fann_scale_input/2,
92 fann_scale_output/2,
93 fann_descale_input/2,
94 fann_descale_output/2,
95 fann_scale_input_train_data/3,
96 fann_scale_output_train_data/3,
97 fann_scale_train_data/3,
98 fann_merge_train_data/3,
99 fann_duplicate_train_data/2,
100 fann_subset_train_data/4,
101 fann_length_train_data/2,
102 fann_num_input_train_data/2,
103 fann_num_output_train_data/2,
104 fann_save_train/2,
105 fann_save_train_to_fixed/3,
106
107 108
109 fann_get_training_algorithm/2,
110 fann_set_training_algorithm/2,
111 fann_get_learning_rate/2,
112 fann_set_learning_rate/2,
113 fann_get_learning_momentum/2,
114 fann_set_learning_momentum/2,
115 fann_get_activation_function/4,
116 fann_set_activation_function/4,
117 fann_set_activation_function_layer/3,
118 fann_set_activation_function_hidden/2,
119 fann_set_activation_function_output/2,
120 fann_get_activation_steepness/4,
121 fann_set_activation_steepness/4,
122 fann_set_activation_steepness_layer/3,
123 fann_set_activation_steepness_hidden/2,
124 fann_set_activation_steepness_output/2,
125 fann_get_train_error_function/2,
126 fann_set_train_error_function/2,
127 fann_get_train_stop_function/2,
128 fann_set_train_stop_function/2,
129 fann_get_bit_fail_limit/2,
130 fann_set_bit_fail_limit/2,
131 132 fann_get_quickprop_decay/2,
133 fann_set_quickprop_decay/2,
134 fann_get_quickprop_mu/2,
135 fann_set_quickprop_mu/2,
136 fann_get_rprop_increase_factor/2,
137 fann_set_rprop_increase_factor/2,
138 fann_get_rprop_decrease_factor/2,
139 fann_set_rprop_decrease_factor/2,
140 fann_get_rprop_delta_min/2,
141 fann_set_rprop_delta_min/2,
142 fann_get_rprop_delta_max/2,
143 fann_set_rprop_delta_max/2,
144 fann_get_rprop_delta_zero/2,
145 fann_set_rprop_delta_zero/2,
146 147 148 149 150 151 152 153 154
155 156
157 fann_cascadetrain_on_data/5,
158 fann_cascadetrain_on_file/5,
159
160 161
162 fann_get_cascade_output_change_fraction/2,
163 fann_set_cascade_output_change_fraction/2,
164 fann_get_cascade_output_stagnation_epochs/2,
165 fann_set_cascade_output_stagnation_epochs/2,
166 fann_get_cascade_candidate_change_fraction/2,
167 fann_set_cascade_candidate_change_fraction/2,
168 fann_get_cascade_candidate_stagnation_epochs/2,
169 fann_set_cascade_candidate_stagnation_epochs/2,
170 fann_get_cascade_weight_multiplier/2,
171 fann_set_cascade_weight_multiplier/2,
172 fann_get_cascade_candidate_limit/2,
173 fann_set_cascade_candidate_limit/2,
174 fann_get_cascade_max_out_epochs/2,
175 fann_set_cascade_max_out_epochs/2,
176 177 178 fann_get_cascade_max_cand_epochs/2,
179 fann_set_cascade_max_cand_epochs/2,
180 181 182 fann_get_cascade_num_candidates/2,
183 fann_get_cascade_activation_functions_count/2,
184 fann_get_cascade_activation_functions/2,
185 fann_set_cascade_activation_functions/2,
186 fann_get_cascade_activation_steepnesses_count/2,
187 fann_get_cascade_activation_steepnesses/2,
188 fann_set_cascade_activation_steepnesses/2,
189 fann_get_cascade_num_candidate_groups/2,
190 fann_set_cascade_num_candidate_groups/2,
191
192 193
194 fann_create_from_file/2,
195 fann_save/2,
196 fann_save_to_fixed/2,
197
198 199
200 fann_set_error_log/2,
201 fann_get_errno/2,
202 fann_reset_errno/1,
203 fann_reset_errstr/1,
204 fann_get_errstr/2,
205 fann_print_error/0,
206 fann_print_error/1,
207 fann_print_error_core/1
208 ]). 209
210
211:- load_foreign_library( foreign( plfann ) ). 212
213
214fann_swi_mode :- fann_print_mode( 'FANN_SWI' ).
215
216:- fann_swi_mode. 217
218fann_set_type(X):-
219 var(X),!,fail.
220fann_set_type('FANN_FLOAT'):-
221 ignore(unload_foreign_library(foreign(plfann_double))),
222 ignore(unload_foreign_library(foreign(plfann_fixed))),
223 load_foreign_library(foreign(plfann)).
224fann_set_type('FANN_DOUBLE'):-
225 ignore(unload_foreign_library(foreign(plfann))),
226 ignore(unload_foreign_library(foreign(plfann_fixed))),
227 load_foreign_library(foreign(plfann_double)).
228fann_set_type('FANN_FIXED'):-
229 ignore(unload_foreign_library(foreign(plfann_double))),
230 ignore(unload_foreign_library(foreign(plfann))),
231 load_foreign_library(foreign(plfann_fixed)).
232
233
236
238
239fann_create_standard(_, A, B, X) :-
240 fann_create_standard_array([ A, B], X), !.
241fann_create_standard(_, _, _, _) :- !, fail.
242fann_create_standard(_, A, B, C, X) :-
243 fann_create_standard_array([ A, B, C], X), !.
244fann_create_standard(_, _, _, _, _) :- !, fail.
245fann_create_standard(_, A, B, C, D, X) :-
246 fann_create_standard_array([ A, B, C, D], X), !.
247fann_create_standard(_, _, _, _, _, _) :- !, fail.
248fann_create_standard(_, A, B, C, D, E, X) :-
249 fann_create_standard_array([ A, B, C, D, E], X), !.
250fann_create_standard(_, _, _, _, _, _, _) :- !, fail.
251
252
254
255fann_create_standard_array(_, X, Y) :-
256 fann_create_standard_array(X, Y), !.
257fann_create_standard_array(_, _, _) :- !, fail.
258
259
261
262fann_create_sparse(Y, _, A, B, X) :-
263 fann_create_sparse_array(Y, [ A, B], X), !.
264fann_create_sparse(_, _, _, _, _) :- !, fail.
265fann_create_sparse(Y, _, A, B, C, X) :-
266 fann_create_sparse_array(Y, [ A, B, C], X), !.
267fann_create_sparse(_, _, _, _, _, _) :- !, fail.
268fann_create_sparse(Y, _, A, B, C, D, X) :-
269 fann_create_sparse_array(Y, [ A, B, C, D], X), !.
270fann_create_sparse(_, _, _, _, _, _, _) :- !, fail.
271fann_create_sparse(Y, _, A, B, C, D, E, X) :-
272 fann_create_sparse_array(Y, [ A, B, C, D, E], X), !.
273fann_create_sparse(_, _, _, _, _, _, _, _) :- !, fail.
274
275
277
278fann_create_sparse_array(X, _, Y, Z) :-
279 fann_create_sparse_array(X, Y, Z), !.
280fann_create_sparse_array(_, _, _, _) :- !, fail.
281
282
284
285fann_create_shortcut(_, A, B, X) :-
286 fann_create_shortcut_array([ A, B], X), !.
287fann_create_shortcut(_, _, _, _) :- !, fail.
288fann_create_shortcut(_, A, B, C, X) :-
289 fann_create_shortcut_array([ A, B, C], X), !.
290fann_create_shortcut(_, _, _, _, _) :- !, fail.
291fann_create_shortcut(_, A, B, C, D, X) :-
292 fann_create_shortcut_array([ A, B, C, D], X), !.
293fann_create_shortcut(_, _, _, _, _, _) :- !, fail.
294fann_create_shortcut(_, A, B, C, D, E, X) :-
295 fann_create_shortcut_array([ A, B, C, D, E], X), !.
296fann_create_shortcut(_, _, _, _, _, _, _) :- !, fail.
297
298
300
301fann_create_shortcut_array(_, X, Y) :-
302 fann_create_shortcut_array( X, Y), !.
303fann_create_shortcut_array(_, _, _) :- !, fail.
304
305
308
309fann_print_error( ErrorData ) :-
310 fann_error( ErrorData ),
311 fann_get_errno( ErrorData, LastErrorNo ),
312 fann_get_errstr( ErrorData, LastErrorStr ),
313 ErrorMessage =.. [ error, LastErrorNo, LastErrorStr ],
314 print_message( error, plfann( ErrorMessage ) ), !.
315fann_print_error( _ ) :- !.
316
317fann_print_error :-
318 fann_print_error( 'NULL' ), !.
319
320
323
324:- multifile
325 prolog:message/3. 326
329
330prolog:message( plfann( print_message( Message ) ) ) -->
331 [ '~s'-[Message], flush ].
332
333prolog:message( plfann( print_message_at_same_line( Message ) ) ) -->
334 [ at_same_line, '~s'-[Message], flush ].
335
336
339
340prolog:message( plfann( error( No, Str ) ) ) -->
341 [ 'FANN Error ~d: ~s'-[No, Str] ]