forse funziona

This commit is contained in:
2025-02-08 19:44:09 +01:00
parent 7c242fabfa
commit e4d41d2003
3 changed files with 11 additions and 11 deletions

Binary file not shown.

View File

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

View File

@@ -12,7 +12,7 @@
#include <math.h>
#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);
}
}