diff --git a/classificatore_singolo b/classificatore_singolo index 78ec9e8..43dd1e0 100755 Binary files a/classificatore_singolo and b/classificatore_singolo differ diff --git a/classificatore_singolo.c b/classificatore_singolo.c index 9c83241..333ea7a 100644 --- a/classificatore_singolo.c +++ b/classificatore_singolo.c @@ -4,7 +4,7 @@ // Scelgo quale categoria voglio identificare. nel caso dello xor -1 #define CATEGORIA 7 #define NUM_LAYERS 4 -#define PERCETTRONI_LAYER_0 64 +#define PERCETTRONI_LAYER_0 32 #define MAX_EPOCHE 100 //1 relu, 2 sigmoide @@ -80,6 +80,8 @@ void main() errore_totale += pow(gradiente_errore, 2) * 0.5; + + // Derivata funzione attivazione double derivata_funzione_out = derivata_sigmoide(funzioni_attivazione[NUM_LAYERS - 1][0]); // if (derivata_funzione_out == 0.0) derivata_funzione_out = 1; @@ -87,7 +89,10 @@ void main() // Gradiente del percettrone output gradienti[NUM_LAYERS - 1][0] = gradiente_errore * derivata_funzione_out; + //Crasha nella discesa del gradiente all'immagine indice 16 quando metto troppi percettroni discesa_gradiente(rete_neurale, funzioni_attivazione, gradienti, TIPO_FUNZIONE); + + // A questo punto ho tutti i gradienti dei percettroni, non mi resta che trovare i gradienti dei pesi e correggerli diff --git a/percettroni.h b/percettroni.h index e5e9350..450355f 100644 --- a/percettroni.h +++ b/percettroni.h @@ -108,7 +108,7 @@ ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_i r.size = numero_layers; // Funzione esponenziale inversa layer 5 - for (int livello = 0; livello < numero_layers; livello++) + /* for (int livello = 0; livello < numero_layers; livello++) { double esponente = (double)livello / (double)numero_layers; double frazione = (double)1 / (double)numero_percettroni_iniziali; @@ -124,6 +124,24 @@ ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_i r.layers[livello] = inizializza_layer(numero_percettroni_livello, numero_input); else r.layers[livello] = inizializza_layer(numero_percettroni_livello, r.layers[livello - 1].size); + } */ + + for (int livello = 0; livello < numero_layers; livello++) + { + if (livello == 0) { + printf("Layer %d -> percettroni: %d\n", livello, numero_percettroni_iniziali); + r.layers[livello] = inizializza_layer(numero_percettroni_iniziali, numero_input); + } + + else if(livello < numero_layers -1) { + printf("Layer %d -> percettroni: %d\n", livello, numero_percettroni_iniziali*2); + r.layers[livello] = inizializza_layer(numero_percettroni_iniziali * 2, r.layers[livello - 1].size); + } + + else { + printf("Layer %d -> percettroni: %d\n", livello, 1); + r.layers[livello] = inizializza_layer(1, r.layers[livello - 1].size); + } } return r; diff --git a/visualizzatore b/visualizzatore index ba15974..1e5dfca 100755 Binary files a/visualizzatore and b/visualizzatore differ