settata topologia deep feed forward

This commit is contained in:
2025-02-22 20:04:07 +01:00
parent e513fa4bf7
commit 7ba92b7a6d
4 changed files with 25 additions and 2 deletions

Binary file not shown.

View File

@@ -4,7 +4,7 @@
// Scelgo quale categoria voglio identificare. nel caso dello xor -1 // Scelgo quale categoria voglio identificare. nel caso dello xor -1
#define CATEGORIA 7 #define CATEGORIA 7
#define NUM_LAYERS 4 #define NUM_LAYERS 4
#define PERCETTRONI_LAYER_0 64 #define PERCETTRONI_LAYER_0 32
#define MAX_EPOCHE 100 #define MAX_EPOCHE 100
//1 relu, 2 sigmoide //1 relu, 2 sigmoide
@@ -80,6 +80,8 @@ void main()
errore_totale += pow(gradiente_errore, 2) * 0.5; errore_totale += pow(gradiente_errore, 2) * 0.5;
// Derivata funzione attivazione // Derivata funzione attivazione
double derivata_funzione_out = derivata_sigmoide(funzioni_attivazione[NUM_LAYERS - 1][0]); double derivata_funzione_out = derivata_sigmoide(funzioni_attivazione[NUM_LAYERS - 1][0]);
// if (derivata_funzione_out == 0.0) derivata_funzione_out = 1; // if (derivata_funzione_out == 0.0) derivata_funzione_out = 1;
@@ -87,8 +89,11 @@ void main()
// Gradiente del percettrone output // Gradiente del percettrone output
gradienti[NUM_LAYERS - 1][0] = gradiente_errore * derivata_funzione_out; 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); 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 // A questo punto ho tutti i gradienti dei percettroni, non mi resta che trovare i gradienti dei pesi e correggerli
// Correggo il livello output // Correggo il livello output

View File

@@ -108,7 +108,7 @@ ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_i
r.size = numero_layers; r.size = numero_layers;
// Funzione esponenziale inversa layer 5 // 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 esponente = (double)livello / (double)numero_layers;
double frazione = (double)1 / (double)numero_percettroni_iniziali; 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); r.layers[livello] = inizializza_layer(numero_percettroni_livello, numero_input);
else else
r.layers[livello] = inizializza_layer(numero_percettroni_livello, r.layers[livello - 1].size); 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; return r;

Binary file not shown.