correggere aggiornamento dei pesi
This commit is contained in:
BIN
mnist/dataset_sette.bin
Normal file
BIN
mnist/dataset_sette.bin
Normal file
Binary file not shown.
BIN
mnist/mnist_manager
Executable file
BIN
mnist/mnist_manager
Executable file
Binary file not shown.
@@ -27,6 +27,7 @@ typedef unsigned char byte;
|
||||
// Singola istanza del dataset.
|
||||
typedef struct
|
||||
{
|
||||
int size;
|
||||
byte classificazione;
|
||||
byte dati[N_INPUTS];
|
||||
} Istanza;
|
||||
@@ -39,6 +40,8 @@ typedef struct
|
||||
} Dataset;
|
||||
|
||||
Dataset *get_dataset(char *, char *);
|
||||
void salva_dataset(const char*, Dataset*);
|
||||
Dataset *carica_dataset(const char*);
|
||||
|
||||
// Questo metodo legge il file in questione e restituisce un puntatore a Dataset se il file esiste, altrimenti NULL
|
||||
// Ritorna un puntatore perchè in questo caso posso gestire il ritorno NULL.
|
||||
@@ -64,14 +67,16 @@ Dataset *get_dataset(char *path_mnist, char *path_categoria)
|
||||
int numero_righe = 0;
|
||||
|
||||
//Leggo male il file, cambiare in base alle dichiarazioni sopra
|
||||
if(fread(istanze[numero_righe].dati, sizeof(byte), 16, file) == 16 && fread(&istanze[numero_righe].classificazione, sizeof(byte), 8, categorie) == 8)
|
||||
if(fread(istanze[numero_righe].dati, sizeof(byte), 16, file) == 16 && fread(&istanze[numero_righe].classificazione, sizeof(byte), 8, categorie) == 8) {
|
||||
while (fread(istanze[numero_righe].dati, sizeof(byte), N_INPUTS, file) == N_INPUTS)
|
||||
{
|
||||
if(fread(&istanze[numero_righe].classificazione, sizeof(byte), 1, categorie) == 1) {
|
||||
numero_righe++;
|
||||
istanze = (Istanza *)realloc(istanze, sizeof(Istanza) * (numero_righe + 1));
|
||||
istanze[numero_righe].size = N_INPUTS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dataset set;
|
||||
(*set).size = numero_righe;
|
||||
@@ -81,19 +86,19 @@ Dataset *get_dataset(char *path_mnist, char *path_categoria)
|
||||
|
||||
//Trasformo tutto in 0 e 1
|
||||
|
||||
/* for(int indice_immagine = 0; indice_immagine < set->size; indice_immagine++) {
|
||||
for(int indice_immagine = 0; indice_immagine < set->size; indice_immagine++) {
|
||||
for(int indice_byte = 0; indice_byte < N_INPUTS; indice_byte++) {
|
||||
if(set->istanze[indice_immagine].dati[indice_byte] >= 128)
|
||||
set->istanze[indice_immagine].dati[indice_byte] = 1;
|
||||
else
|
||||
set->istanze[indice_immagine].dati[indice_byte] = 0;
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
return set;
|
||||
}
|
||||
|
||||
/* void salva_dataset(const char *filename, Dataset *set)
|
||||
void salva_dataset(const char *filename, Dataset *set)
|
||||
{
|
||||
FILE *file = fopen(filename, "wb");
|
||||
if (!file)
|
||||
@@ -104,21 +109,76 @@ Dataset *get_dataset(char *path_mnist, char *path_categoria)
|
||||
|
||||
for (int indice_istanze = 0; indice_istanze < set->size; indice_istanze++)
|
||||
{
|
||||
fwrite(&set->istanze[indice_istanze].classificazione, sizeof(byte), 1, file);
|
||||
fwrite(&set->istanze[indice_istanze].dati, sizeof(byte), N_INPUTS, file);
|
||||
if(set->istanze[indice_istanze].classificazione == 7) {
|
||||
fwrite(&set->istanze[indice_istanze].classificazione, sizeof(byte), 1, file);
|
||||
fwrite(&set->istanze[indice_istanze].dati, sizeof(byte), N_INPUTS, file);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
} */
|
||||
}
|
||||
|
||||
Dataset *carica_dataset(const char *filename) {
|
||||
FILE *file = fopen(filename, "rb");
|
||||
if (!file) {
|
||||
perror("Errore nell'apertura del file");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Creazione di un dataset vuoto
|
||||
Dataset *set = (Dataset *)malloc(sizeof(Dataset));
|
||||
if (!set) {
|
||||
perror("Errore nell'allocazione del dataset");
|
||||
fclose(file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
set->size = 0;
|
||||
set->istanze = NULL;
|
||||
|
||||
// Variabile temporanea per leggere ogni istanza
|
||||
Istanza temp;
|
||||
|
||||
// Leggi il file fino alla fine
|
||||
while (1) {
|
||||
// Prova a leggere la classificazione
|
||||
size_t letti_classificazione = fread(&temp.classificazione, sizeof(byte), 1, file);
|
||||
// Prova a leggere i dati
|
||||
size_t letti_dati = fread(&temp.dati, sizeof(byte), N_INPUTS, file);
|
||||
|
||||
// Se non riesci a leggere un'intera istanza, esci dal ciclo
|
||||
if (letti_classificazione != 1 || letti_dati != N_INPUTS) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Aumenta la dimensione del dataset
|
||||
set->size++;
|
||||
// Rialloca la memoria per le istanze
|
||||
set->istanze = (Istanza *)realloc(set->istanze, set->size * sizeof(Istanza));
|
||||
if (!set->istanze) {
|
||||
perror("Errore nella riallocazione della memoria");
|
||||
fclose(file);
|
||||
free(set);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Aggiungi l'istanza letta al dataset
|
||||
set->istanze[set->size - 1] = temp;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
return set;
|
||||
}
|
||||
|
||||
/* void main() {
|
||||
Dataset *set = get_dataset("t10k-images.idx3-ubyte", "t10k-labels.idx1-ubyte");
|
||||
Dataset *set = get_dataset(file_immagini, file_label);
|
||||
|
||||
if(set == NULL) {
|
||||
printf("Nullo esco\n");
|
||||
return;
|
||||
}
|
||||
|
||||
salva_dataset("dataset_sette.bin", set);
|
||||
|
||||
for(int i = 0; i < set->size; i++) {
|
||||
printf("immagine %d - valore rappresentato: %d\n", i, set->istanze[i].classificazione);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user