integrazione mnist

This commit is contained in:
2025-02-13 21:17:57 +01:00
parent 7c7fcedbaa
commit 55b0e97546
19 changed files with 70119 additions and 54 deletions
+10
View File
@@ -0,0 +1,10 @@
airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck
+76
View File
@@ -0,0 +1,76 @@
#include <stdlib.h>
#include <stdio.h>
#define N_PIXEL 3072 // 1024 pixel * 3 (R, G, B)
// 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;
// Singola istanza del dataset.
typedef struct
{
byte categoria;
byte immagine[N_PIXEL];
} Istanza;
// Questo tipo fornisce il vettore delle istanze e il size (dimensione) del vettore
typedef struct
{
int size;
Istanza *istanze;
} Dataset;
Dataset *get_dataset(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.
Dataset *get_dataset(char *path)
{
Dataset *set = (Dataset *)malloc(sizeof(Dataset));
FILE *file;
Istanza istanza;
Istanza *istanze = (Istanza *)malloc(sizeof(Istanza));
file = fopen(path, "rb");
if (file == NULL)
return NULL;
int numero_righe = 0;
// Fino a quando questo fread restituisce 1 significa che il file contiene ancora roba
while (fread(&istanze[numero_righe].categoria, sizeof(byte), 1, file) == 1)
{
if (fread(istanze[numero_righe].immagine, sizeof(byte), N_PIXEL, file) == N_PIXEL)
{
numero_righe++;
istanze = (Istanza *)realloc(istanze, sizeof(Istanza) * (numero_righe + 1));
// printf("Caricata nel sistema riga %d\n", numero_righe);
}
}
// Dataset set;
(*set).size = numero_righe;
(*set).istanze = istanze;
fclose(file);
return set;
}
void salva_dataset(const char *filename, Dataset *set)
{
FILE *file = fopen(filename, "wb");
if (!file)
{
perror("Errore nell'apertura del file");
exit(EXIT_FAILURE);
}
for (int indice_istanze = 0; indice_istanze < set->size; indice_istanze++)
{
fwrite(&set->istanze[indice_istanze].categoria, sizeof(byte), 1, file);
fwrite(&set->istanze[indice_istanze].immagine, sizeof(byte), N_PIXEL, file);
}
fclose(file);
}
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.