1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
// example_xor.c - Example XOR training
#define ANN_IMPLEMENTATION
#include "../include/ann.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(0));
ann_t *ann = ann_init(3, (uint_t[]){2, 2, 1});
ann_set_activation(ann, SIGMOID, SIGMOID);
ann_random(ann);
fp_t input[4][2] = {{0, 0}, {0, 1}, {1, 0}, {1, 1}};
fp_t output[4] = {0, 0, 0, 0};
fp_t expected[4] = {0, 1, 1, 0};
fp_t error = 0;
for (int_t iteration = 0; iteration < 100000; iteration++) {
for (int_t training = 0; training < 4; training++) {
ann_propagation_forward(ann, (fp_t const *const)&input[training],
&output[training]);
error += ann_error_total(&output[training], &expected[training],
ann->layer_neuron_n[ann->layer_n - 1]);
// Train using backpropagation
ann_propagation_backward(ann, (fp_t const *const)&input[training],
&output[training], &expected[training], 0.4);
// Train using numeric integration
// ann_train_numeric( ann, ( fp_t const * const ) &i[b], &t[b], 0.03 );
}
}
ann_print_weight(ann);
fputs("------------------------------------------------------------\n\n",
stderr);
for (int i = 0; i < 4; i++) {
ann_propagation_forward(ann, (fp_t const *const)&input[i], &output[i]);
ann_print_neuron(ann, (fp_t const *const)&input[i], &output[i]);
}
}
|