reinizio a metterci mano per completarlo

This commit is contained in:
2026-03-19 13:09:41 +01:00
parent da043d4d19
commit 488ba04b2f
2 changed files with 42 additions and 4 deletions
+17
View File
@@ -0,0 +1,17 @@
#include "percettroni.h"
#define EPOCHE 10
void main() {
ReteNeurale rete = inizializza_rete_neurale(3, 8, 2);
stampa_pesi_rete(rete);
Dataset *xor;
xor = crea_dataset_xor();
for(int epoca = 0; epoca < EPOCHE; epoca++) {
for(int indice_istanza = 0; indice_istanza < xor->size; indice_istanza++) {
elabora_sigmoidi(rete, xor->istanze[indice_istanza]);
}
}
}
+25 -4
View File
@@ -1,14 +1,15 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#include <time.h>
char *file_pesi = "rete_pesi.bin"; char *file_pesi = "rete_pesi.bin";
#include "mnist/mnist_manager.h" //#include "mnist/mnist_manager.h"
/* char *file_immagini = "mnist/t10k-images.idx3-ubyte"; /* char *file_immagini = "mnist/t10k-images.idx3-ubyte";
char *file_label = "mnist/t10k-labels.idx1-ubyte"; */ char *file_label = "mnist/t10k-labels.idx1-ubyte"; */
char *file_immagini = "mnist/train-images.idx3-ubyte"; //char *file_immagini = "mnist/train-images.idx3-ubyte";
char *file_label = "mnist/train-labels.idx1-ubyte"; //char *file_label = "mnist/train-labels.idx1-ubyte";
//#include "cifar-10/cifar10_manager.h"; //#include "cifar-10/cifar10_manager.h";
@@ -19,7 +20,7 @@ char *file_label = "mnist/train-labels.idx1-ubyte";
// char *file_immagini = "cifar-10/data_batch_5.bin"; // char *file_immagini = "cifar-10/data_batch_5.bin";
//char *file_immagini = "cifar-10/test_batch.bin"; //char *file_immagini = "cifar-10/test_batch.bin";
// #include "xor_manager.h" #include "xor_manager.h"
// Siccome il char è un byte che rappresenta il valore tra 0 e 255. Per evitare confusioni definisco il tipo "byte" come in Java // Siccome il char è un byte che rappresenta il valore tra 0 e 255. Per evitare confusioni definisco il tipo "byte" come in Java
typedef unsigned char byte; typedef unsigned char byte;
@@ -69,6 +70,8 @@ int previsione(double);
void salvaReteNeurale(const char *, ReteNeurale *); void salvaReteNeurale(const char *, ReteNeurale *);
ReteNeurale *caricaReteNeurale(const char *); ReteNeurale *caricaReteNeurale(const char *);
void stampa_pesi_rete(ReteNeurale);
/* /*
################# INIZIALIZZAZIONI ################################ ################# INIZIALIZZAZIONI ################################
*/ */
@@ -112,6 +115,7 @@ Layer inizializza_layer(int n_percettroni, int n_pesi)
ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_iniziali, int numero_input) ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_iniziali, int numero_input)
{ {
srand(time(NULL));
ReteNeurale r; ReteNeurale r;
r.layers = (Layer *)malloc(sizeof(Layer) * numero_layers); r.layers = (Layer *)malloc(sizeof(Layer) * numero_layers);
r.size = numero_layers; r.size = numero_layers;
@@ -394,3 +398,20 @@ ReteNeurale *caricaReteNeurale(const char *filename)
fclose(file); fclose(file);
return rete; return rete;
} }
/*
################ STAMPE ############################
*/
void stampa_pesi_rete(ReteNeurale rete) {
for(int indice_layer = 0; indice_layer < rete.size; indice_layer++) {
printf("\nLivello %d", indice_layer);
for(int indice_percettrone = 0; indice_percettrone < rete.layers[indice_layer].size; indice_percettrone++) {
printf("\n\tPercettrone %d", indice_percettrone);
for(int indice_peso = 0; indice_peso < rete.layers[indice_layer].percettroni[indice_percettrone].size; indice_peso++) {
printf("\n\t\tPeso %d: %f", indice_peso, rete.layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso]);
}
}
}
printf("\n");
}