diff --git a/classificatore_singolo b/classificatore_singolo index 082dc53..bf264a4 100755 Binary files a/classificatore_singolo and b/classificatore_singolo differ diff --git a/classificatore_singolo.c b/classificatore_singolo.c index d744719..dc6f534 100644 --- a/classificatore_singolo.c +++ b/classificatore_singolo.c @@ -1,6 +1,6 @@ #include "visualizzatore.h" -#define NUM_LAYERS 5 +#define NUM_LAYERS 4 #define PERCETTRONI_LAYER_0 256 #define INPUT_LAYER_0 3072 @@ -8,10 +8,10 @@ #define INPUT_LAYER_1 256 #define PERCETTRONI_LAYER_2 64 #define INPUT_LAYER_2 128 -#define PERCETTRONI_LAYER_3 10 +#define PERCETTRONI_LAYER_3 1 #define INPUT_LAYER_3 64 -#define PERCETTRONI_LAYER_4 1 -#define INPUT_LAYER_4 10 +//#define PERCETTRONI_LAYER_4 1 +//#define INPUT_LAYER_4 10 #define MAX_EPOCHE 100 @@ -54,7 +54,7 @@ void main() { //inizializzo layer 3 rete_neurale.layers[3] = inizializza_layer(PERCETTRONI_LAYER_3, INPUT_LAYER_3); //inizializzo layer ULTIMO - rete_neurale.layers[4] = inizializza_layer(PERCETTRONI_LAYER_4, INPUT_LAYER_4); + //rete_neurale.layers[4] = inizializza_layer(PERCETTRONI_LAYER_4, INPUT_LAYER_4); printf("Numero immagini: %d\n",set.size); @@ -64,7 +64,7 @@ void main() { int corrette = 0; - for(int indice_set = 0; indice_set < 100; indice_set++) { + for(int indice_set = 0; indice_set < 1000; indice_set++) { //printf("\timmagine: %d\n", indice_set); diff --git a/percettroni.h b/percettroni.h index bf9c990..41dc440 100644 --- a/percettroni.h +++ b/percettroni.h @@ -12,7 +12,7 @@ #include #include "dataset_manager.h" -double LRE = 0.2; +double LRE = 1.0; double soglia_sigmoide = 0.5; typedef struct { @@ -167,14 +167,14 @@ void correggi_layer_interni(ReteNeurale *rete, double **gradienti, double **sigm for(int indice_peso = 0; indice_peso < rete->layers[indice_layer].percettroni[indice_percettrone].size; indice_peso++) {//Numero pesi gradienti[indice_layer][indice_percettrone] = gradienti[rete->size-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone])); - rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] -= (gradienti[indice_layer][indice_percettrone] * LRE * sigmoidi[indice_layer-1][indice_percettrone]); + rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * sigmoidi[indice_layer-1][indice_percettrone]); //if(indice_layer == 3) // printf("qui ci arrivo layer: %d, percettrone: %d, input:%d, peso: %f\n", indice_layer, indice_percettrone, indice_peso, rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso]); //printf("gradiente applicato %f, sigmoide %f\n", gradienti[indice_layer][indice_percettrone], sigmoidi[indice_layer][indice_percettrone]); } - rete->layers[indice_layer].percettroni[indice_percettrone].bias -= (gradienti[indice_layer][indice_percettrone] * LRE); + rete->layers[indice_layer].percettroni[indice_percettrone].bias += (gradienti[indice_layer][indice_percettrone] * LRE); //printf("bias: %f\n", rete->layers[indice_layer].percettroni[indice_percettrone].bias); } } @@ -187,9 +187,9 @@ void correggi_layer_input(Layer *layer, double **gradienti, double **sigmoidi, b for(int indice_peso = 0; indice_peso < layer->percettroni->size; indice_peso++) { //Numero pesi gradienti[indice_layer][indice_percettrone] = gradienti[n_layers-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone])); - layer->percettroni[indice_percettrone].pesi[indice_peso] -= (gradienti[indice_layer][indice_percettrone] * LRE * inputs[indice_peso]); + layer->percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * inputs[indice_peso]); } - layer->percettroni[indice_percettrone].bias -= (gradienti[indice_layer][indice_percettrone] * LRE); + layer->percettroni[indice_percettrone].bias += (gradienti[indice_layer][indice_percettrone] * LRE); } }