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
#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

View File

@@ -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;

Binary file not shown.