You select the Resilient Backpropagation (Rprop) optimization algorithm in this line:
fann_set_training_algorithm(ann, FANN_TRAIN_RPROP);
Rprop - . , . fann_train
- (. fann_train_enum), .
, FANN_TRAIN_INCREMENTAL. : fann_train_on_data, fann_train_on_file fann_train_epoch.
, , :
- . (0.5).
- . 20 000.
- 3 . , . I, [0,3], .
- .:)
0.02f. - Rprop - , - Levenberg-Marquardt, .
, , , :
0 0.060097 0.000000
1 0.119042 0.099833
2 0.188885 0.198669
3 0.269719 0.295520
4 0.360318 0.389418
5 0.457665 0.479426
6 0.556852 0.564642
7 0.651718 0.644218
8 0.736260 0.717356
9 0.806266 0.783327
10 0.860266 0.841471
11 0.899340 0.891207
12 0.926082 0.932039
...
:
#include <cstdio>
#include <cmath>
#include <fann.h>
#include <floatfann.h>
int main()
{
const unsigned int num_input = 1;
const unsigned int num_output = 1;
const unsigned int num_layers = 3;
const unsigned int num_neurons_hidden = 2;
const float angleRange = 3.0f;
const float angleStep = 0.1;
int instances = (int)(angleRange/angleStep);
struct fann *ann;
ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);
fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_train_stop_function(ann, FANN_STOPFUNC_BIT);
fann_set_bit_fail_limit(ann, 0.02f);
fann_set_training_algorithm(ann, FANN_TRAIN_INCREMENTAL);
fann_randomize_weights(ann, 0, 1);
fann_train_data *trainingSet;
trainingSet = fann_create_train(instances, 1, 1);
float angle=0;
for(int instance=0; instance < instances; angle+=angleStep, instance++) {
trainingSet->input[instance][0] = angle;
trainingSet->output[instance][0] = sinf(angle);
}
fann_train_on_data(ann, trainingSet, 20000, 10, 1e-8f);
int k = 0;
angle=0;
for(int instance=0; instance < instances; angle+=angleStep, instance++) {
float sin_angle = sinf(angle);
float *o = fann_run(ann, &angle);
printf("%d\t%f\t%f\t\n", k++, *o, sin_angle);
}
fann_destroy(ann);
return 0;
}
, fann_create_train FAN 2.2.0.