From b2d3a6371132a416dbdc09c51c6a2249dffdceca Mon Sep 17 00:00:00 2001 From: mirimatcode Date: Thu, 20 Feb 2025 21:54:37 +0100 Subject: [PATCH] aggiustamento codice --- layer_multi | Bin 25768 -> 25416 bytes layer_multi.c | 60 ++++++++++++++++++++++++++++++++------------------ percettrone.h | 6 ++--- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/layer_multi b/layer_multi index 824f3c4438a567b3a739e4eec9ff869aa72a883b..bf55e548b42ae4b734ef430e0aa440a0fe3c4968 100755 GIT binary patch literal 25416 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 Yrd%V)+ciT(vhpui5~pM+WT4`|0W5swG5`Po diff --git a/layer_multi.c b/layer_multi.c index b7ebbc6..deb0681 100644 --- a/layer_multi.c +++ b/layer_multi.c @@ -2,7 +2,7 @@ #include "percettrone.h" #include "grafico.h" -int MAX_EPOCHE = 10000; +int MAX_EPOCHE = 100000; /* il tipo indica quali punti vogliamo disegnare nel grafico: @@ -19,10 +19,10 @@ void main() { srand(time(NULL)); - allegro_init(); + /* allegro_init(); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0); - cls(tipo, 1); + cls(tipo, 1); */ int output[4]; switch (tipo) @@ -106,8 +106,8 @@ void main() if (corrette == 4) { printf("\nEpoche necessarie: %d\n", i); - stampa_risultati_layer_multi(p_ext_1, p_ext_2, pout); - + //stampa_risultati_layer_multi(p_ext_1, p_ext_2, pout); + /* for (int z = 0; z < i; z++) { cls(tipo, 1); @@ -122,12 +122,13 @@ void main() sleep_ms(10); } - readkey(); + readkey(); */ break; } - printf("\nEpoca %d\n", i); + //printf("\nEpoca %d\n", i); corrette = 0; + double errore_epoca = 0.0; for (int j = 0; j < 4; j++) { @@ -136,8 +137,6 @@ void main() double y_ext_2 = funzione_sigmoide(p_ext_2, x[j][0], x[j][1]); double yout = funzione_sigmoide(pout, y_ext_1, y_ext_2); - double errore = (output[j] - yout); - int previsione = -1; if (yout >= soglia_funzione_attivazione) @@ -149,9 +148,9 @@ void main() previsione = 0; } - stampa_layer_uno(p_ext_1, y_ext_1, x[j][0], x[j][1], errore); - stampa_layer_out(pout, previsione, y_ext_1, y_ext_2, errore); - stampa_layer_uno(p_ext_2, y_ext_2, x[j][0], x[j][1], errore); + //stampa_layer_uno(p_ext_1, y_ext_1, x[j][0], x[j][1], errore); + //stampa_layer_out(pout, previsione, y_ext_1, y_ext_2, errore); + //stampa_layer_uno(p_ext_2, y_ext_2, x[j][0], x[j][1], errore); if (previsione == output[j]) { @@ -159,22 +158,39 @@ void main() } else { + double errore = (output[j] - yout); + /* if(errore < 0) + errore = -errore; */ + errore_epoca += errore; + + double derivata_pout = yout * (1 - yout); + double derivata_p1 = y_ext_1 * (1 - y_ext_1); + double derivata_p2 = y_ext_2 * (1 - y_ext_2); + + if(derivata_pout == 0.0) + derivata_pout = 1; + if(derivata_p1 == 0.0) + derivata_p1 = 1; + if(derivata_p2 == 0.0) + derivata_p2 = 1; + + // Gradienti percettrone 1 - double gradiente_w1 = errore * yout * (1 - yout) * y_ext_1 * (1 - y_ext_1) * x[j][0] * pout.w1; - double gradiente_w2 = errore * yout * (1 - yout) * y_ext_1 * (1 - y_ext_1) * x[j][1] * pout.w1; - double gradiente_bias = errore * yout * (1 - yout) * y_ext_1 * (1 - y_ext_1) * pout.w1; + double gradiente_w1 = errore * derivata_pout * derivata_p1 * x[j][0]; + double gradiente_w2 = errore * derivata_pout * derivata_p1 * x[j][1]; + double gradiente_bias = errore * derivata_pout * derivata_p1; correggi_pesi(&p_ext_1, gradiente_w1, gradiente_w2, gradiente_bias); // Gradienti percettrone 2 - gradiente_w1 = errore * yout * (1 - yout) * y_ext_2 * (1 - y_ext_2) * x[j][0] * pout.w2; - gradiente_w2 = errore * yout * (1 - yout) * y_ext_2 * (1 - y_ext_2) * x[j][1] * pout.w2; - gradiente_bias = errore * yout * (1 - yout) * y_ext_2 * (1 - y_ext_2) * pout.w2; + gradiente_w1 = errore * derivata_pout * derivata_p2 * x[j][0]; + gradiente_w2 = errore * derivata_pout * derivata_p2 * x[j][1]; + gradiente_bias = errore * derivata_pout * derivata_p2; correggi_pesi(&p_ext_2, gradiente_w1, gradiente_w2, gradiente_bias); // Gradienti percettrone out - gradiente_w1 = errore * yout * (1 - yout) * y_ext_1; - gradiente_w2 = errore * yout * (1 - yout) * y_ext_2; - gradiente_bias = errore * yout * (1 - yout); + gradiente_w1 = errore * derivata_pout * y_ext_1; + gradiente_w2 = errore * derivata_pout * y_ext_2; + gradiente_bias = errore * derivata_pout; correggi_pesi(&pout, gradiente_w1, gradiente_w2, gradiente_bias); } @@ -205,5 +221,7 @@ void main() } } } + + printf("Errore: %f\n", errore_epoca); } } \ No newline at end of file diff --git a/percettrone.h b/percettrone.h index 2a01e33..d2176f1 100644 --- a/percettrone.h +++ b/percettrone.h @@ -61,9 +61,9 @@ double funzione_sigmoide(Percettrone p, double x1, double x2) { } void correggi_pesi(Percettrone *p, double grad_w1, double grad_w2, double grad_bias) { - (*p).bias = (*p).bias + (grad_bias * (*p).lre); - (*p).w1 = (*p).w1 + (grad_w1 * (*p).lre); - (*p).w2 = (*p).w2 + (grad_w2 * (*p).lre); + p->bias += (grad_bias * p->lre); + p->w1 += (grad_w1 * p->lre); + p->w2 += (grad_w2 * p->lre); } void stampa_layer_uno(Percettrone p, double y, int x1, int x2, double errore)