From 2488b37d3505007cbd07a9d71d3e4fe5f8513e2b Mon Sep 17 00:00:00 2001 From: mirimatcode Date: Fri, 14 Feb 2025 15:09:58 +0100 Subject: [PATCH] aggiornato classificatore singolo per mnist --- classificatore_singolo | Bin 21184 -> 21184 bytes classificatore_singolo.c | 12 ++++++------ mnist/mnist_manager | Bin 16016 -> 15952 bytes mnist/mnist_manager.h | 31 +++++++++++++++++++++---------- percettroni.h | 3 +-- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/classificatore_singolo b/classificatore_singolo index 9d1630f7aa0da61aed062508a6cf4495a3fb6799..f4687ee668f1d8491be8c7c955cfa005730c9e9a 100755 GIT binary patch delta 1901 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 diff --git a/classificatore_singolo.c b/classificatore_singolo.c index 9520996..45b2c5e 100644 --- a/classificatore_singolo.c +++ b/classificatore_singolo.c @@ -77,20 +77,20 @@ void main() { int corrette = 0; - for(int indice_set = 0; indice_set < set.size; indice_set++) { - - printf("\timmagine: %d\n", indice_set); + for(int indice_set = 0; indice_set < set.size -1; indice_set++) { double **sigmoidi = (double **)malloc(sizeof(double*) * NUM_LAYERS); sigmoidi[0] = (double*)malloc(sizeof(double) * PERCETTRONI_LAYER_0); sigmoidi[0] = funzioni_attivazione_layer_byte(rete_neurale.layers[0], set.istanze[indice_set].immagine); - + for(int j = 1; j < NUM_LAYERS; j++) { sigmoidi[j] = (double*)malloc(sizeof(double) * rete_neurale.layers[j].size); sigmoidi[j] = funzioni_attivazione_layer_double(rete_neurale.layers[j], sigmoidi[j-1]); } + //printf("\timmagine: %d post sigmoidi\n", indice_set); + byte output_corretto = get_out_corretto(set.istanze[indice_set].categoria); @@ -103,7 +103,7 @@ void main() { gradienti[indice_layer] = (double*)malloc(sizeof(double) * rete_neurale.layers[indice_layer].size); } - gradienti[NUM_LAYERS-1][0] = output_corretto - sigmoidi[NUM_LAYERS-1][0]; + gradienti[NUM_LAYERS-1][0] = - (output_corretto - sigmoidi[NUM_LAYERS-1][0]); correggi_layer_interni(&rete_neurale, gradienti, sigmoidi); correggi_layer_input(&rete_neurale.layers[0], gradienti, sigmoidi, set.istanze[indice_set].immagine, NUM_LAYERS); @@ -113,7 +113,7 @@ void main() { corrette++; } - printf("\timmagine: %d post calcoli, indovinate: %d\n", indice_set, corrette); + //printf("\timmagine: %d post correzioni\n", indice_set); } printf("\tRisposte corrette: %d\n", corrette); diff --git a/mnist/mnist_manager b/mnist/mnist_manager index 040f5b42fc265fc728833c7723f2351f9e1a03a4..6ca176f17fba6efff1766a86a8e96b691e3d29f8 100755 GIT binary patch delta 1864 zcmZuyeN0nV6u-B$(BcOz(gETupv>sBuPtL(u~0H9*Nr8e2@7O%gH0E^WeyZFXJD{Y zx4je+@FWJezZMsxo0&lO2NP9;mf zK}bXJ5xr}>mM^45jLHTF%?iA2Xsc=}s^55ilwAF-_jn+0x*X1>Y^9$;r7;_WKd9HUE-Ac)_-cw!$9U>J3xqPg;v>S=hIOFPS{mvW!K1V<@P0 zKhDaVs;Z8e&OyJ;*%7|wXL9>xCby1U;5|^<|5H^a2b2po%u#tyNC_4RTxQ*N^Ku^W z7beG)-NG`nqA&iz_G|svYP+ZP3`Ma|`>+}2-RBj@hg%_+Dhfkw8)BHH1 z97Em$=W)vU4vqM=Akx-~aA1NWEj&UW-cr;Y<$iJ?fgbW0R@^Ak){0f0K;z?fd@xn4 zK&0yBk$l#aO@w3|dKu3Hvr;0p6S9>rSfn<=xL_Gk&oa zUl$g>WyRwBS}0!Ti+a#kc^WeMYuj<3=XJ~QJ&jFB)M}qihko;+Bl&xmg!Z>I?mgI; zU$iS7-pzl-P4iO9T-bFJJ~e-->Mq3lh&70R&#Gz{;)!`xJ&kzawyIu%qJlL~oDTD-5#)zIU#+)ujo74x|tMaaPbh;FTP-3hJf1c)y5I2aT@x={30Fs-{6Ga7#1} zFS%dmu?OATEaUnmGXT`Hjvj>d9`4rckzmMUg?^72@62J3WNYvz0}5<{Nl!N34wc2( z^iysAT$|7EId>H6vXUI~C~KTsSN@LHOtPHRWQkZ>|8O}&qdymaLZdAu*J(6Z+CXV1 z3~a`|`Pt$~;!T)CZ53Xrd?Ya+++NAHN7p9N1z>% delta 2136 zcmZ`)drXs86u-B$Kr5_Yp~z!GTb&zf>`Pb$Y`{n5bFY922`<@yD2_%&#Nv#>p{s0m z9SeA-VgD@bnZ5oP)*0usgiWT|k~$LySd>Fj zC|VQ_(>taqtD+@kB&4xW^VzwdzTE8jdUsuE@2}0D+?CpmzZ{11DQoD*uvVK3g4Rj> zY(+cy+zNZN)w<(IwHO99*^sBpgP1mtz6;k}g|JbZMFTv}smr55zG~EM78)A%2Aa0+ zXxQ4aqhWiKeL)g>Ti@WeyX~b&s38ly0|^rhyyVkR`>IOA2MT19e5wKrD%+ujIcse7paPo~|? ztWkYw2r)+1rte5QCd4x3r3V~@v>4DhSq0w+MKwoK2$6HXw-YkE-EOoT;f!LBw-#|? zkM1!h%Hn|>F|2zNL1K3_pqIyumO~6UtV+b&IKH$1Dol%LGt`@kmfu7?=~z`K2EFUp zQVjhZ$P~lgi>SysPMoE!vMgWLoq_?Az3cGpM%;@Sy70l@vMh!^8$hv53~QGb^H^Wp z6}`mjDAmm|fA?4DzhuG?X@g>jvbbMvf#M2E6mqo zzvz##-6A{RD2?IPP~nWBp|f4=cW{wS(g~I;7^fZXAdjUAMKDVL!=fDUJ!Nx@_y4o? z?5CKH7Xi}=xD_Q^F$?wzU1%^Ksl|pMiq$rJoSh*gsHzw~&i5UvNl(&@NEs|x!HeO# z_%?BcnfEK8lYYeLE5mizbuoC`Duxb9VyI(W4ErRk?Asa1?!19GG2|R>2)HU6Ie%68JnVTHM%){4H~B)@>|ytjaHUdEL{jW6YO@u|!v^rWet z7w^jQt*1tOv%E*;xT`o^%g%NhPZQ(mSlBnqd2VpV5#CqHg&{%TEEdrh50f(AZ0ETv z!;x3bQ-)*KRybgN`WgSOT}{vVTbr#*w^>(O_ciU@-QH|%Z)$66Z{FM78fXgaE=QMv z&<9g0N-#0I2%W#natq2Slr<TP@uRF{Yab9^(yY%+O}S1p($dKyGPfnJ-K%?L)cO+l!#Ov+ULVLO0Amk|7Sh>qLVjrf<9s1;349hA!`eK^`DUSFn zswr)Q!8HzjeU)OYhsiY_eWF?|u*_RYTfpzF)E{*!h(;LndJNJkMa$5@jQ3IfEPGjT JEQD#V #include @@ -29,7 +42,6 @@ Dataset *get_dataset(char *path_mnist, char *path_categoria) Dataset *set = (Dataset *)malloc(sizeof(Dataset)); FILE *file; FILE *categorie; - Istanza istanza; Istanza *istanze = (Istanza *)malloc(sizeof(Istanza)); file = fopen(path_mnist, "rb"); @@ -46,16 +58,15 @@ Dataset *get_dataset(char *path_mnist, char *path_categoria) int numero_righe = 0; - //printf("Scorro il while %d\n", fread(istanze[numero_righe].categoria, sizeof(byte), 2, categorie)); - - // Fino a quando questo fread restituisce 1 significa che il file contiene ancora roba - while (fread(istanze[numero_righe].immagine, sizeof(byte), N_PIXEL, file) == N_PIXEL) - { - if(fread(&istanze[numero_righe].categoria, sizeof(byte), 1, categorie) == 1) { - numero_righe++; - istanze = (Istanza *)realloc(istanze, sizeof(Istanza) * (numero_righe + 1)); + //Leggo male il file, cambiare in base alle dichiarazioni sopra + if(fread(istanze[numero_righe].immagine, sizeof(byte), 16, file) == 16) + while (fread(istanze[numero_righe].immagine, sizeof(byte), N_PIXEL, file) == N_PIXEL) + { + if(fread(&istanze[numero_righe].categoria, sizeof(byte), 1, categorie) == 1) { + numero_righe++; + istanze = (Istanza *)realloc(istanze, sizeof(Istanza) * (numero_righe + 1)); + } } - } // Dataset set; (*set).size = numero_righe; diff --git a/percettroni.h b/percettroni.h index 5a8b583..145b13c 100644 --- a/percettroni.h +++ b/percettroni.h @@ -107,7 +107,6 @@ double sigmoide_byte(Percettrone p, byte *valori, int n_input) { //Questa funzione viene usata per gli altri livelli dove gli input sono double, ossia i valori della sigmoide dei livelli precedenti double sigmoide_double(Percettrone p, double *valori, int n_input) { - double sommatoria = 0.0; for(int i = 0; i < n_input; i++) { sommatoria += (valori[i] * p.pesi[i]); @@ -126,7 +125,7 @@ double sigmoide_double(Percettrone p, double *valori, int n_input) { //Questa funzione calcola tutte le funzioni di attivazione dei percettroni del layer che prende dei byte come inputs double *funzioni_attivazione_layer_byte(Layer layer, byte *inputs) { - + double *funzioni = (double*)malloc(sizeof(double) * layer.size); for(int i = 0; i < layer.size; i++) {