pusho per testare nel threadripper
This commit is contained in:
74
dataset_manager.h
Normal file
74
dataset_manager.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#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 main() {
|
||||
char *path = "cifar-10-batches/data_batch_1.bin";
|
||||
|
||||
//Carico il dataset e controllo che non sia nullo
|
||||
Dataset *dataset = get_dataset(path);
|
||||
if(dataset == NULL) {
|
||||
printf("Oggetto dataset nullo\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//Lo copio in una seconda variabile per non dover mettere sempre * davanti al nome e libero la memoria occupata dal puntatore
|
||||
Dataset set = *dataset;
|
||||
free(dataset);
|
||||
|
||||
//Stampa di debug
|
||||
for(int i = 0; i < set.size; i++) {
|
||||
printf("n: %d. Categoria: %d\n", i, (int)set.istanze[i].categoria);
|
||||
}
|
||||
} */
|
||||
Reference in New Issue
Block a user