settata topologia deep feed forward
This commit is contained in:
Binary file not shown.
@@ -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,8 +89,11 @@ 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
|
||||
|
||||
// Correggo il livello output
|
||||
|
||||
@@ -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;
|
||||
|
||||
BIN
visualizzatore
BIN
visualizzatore
Binary file not shown.
Reference in New Issue
Block a user