niente da fare non funge, riprovo ad addestrarla

This commit is contained in:
2025-02-09 00:16:05 +01:00
parent b6f19921ba
commit 7c7fcedbaa
11 changed files with 241 additions and 135 deletions

View File

@@ -1,50 +1,54 @@
#include <stdlib.h>
#include <stdio.h>
#define N_PIXEL 3072 //1024 pixel * 3 (R, G, B)
#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
// 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 {
typedef struct
{
byte categoria;
byte immagine[N_PIXEL];
} Istanza;
//Questo tipo fornisce il vettore delle istanze e il size (dimensione) del vettore
typedef struct {
// Questo tipo fornisce il vettore delle istanze e il size (dimensione) del vettore
typedef struct
{
int size;
Istanza *istanze;
} Dataset;
Dataset* get_dataset(char *);
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));
// 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)
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 ++;
// 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);
// printf("Caricata nel sistema riga %d\n", numero_righe);
}
}
//Dataset set;
// Dataset set;
(*set).size = numero_righe;
(*set).istanze = istanze;
@@ -53,22 +57,57 @@ Dataset* get_dataset(char *path) {
return set;
}
/* void main() {
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);
}
/* void main()
{
char *path = "cifar-10-batches/data_batch_1.bin";
//Carico il dataset e controllo che non sia nullo
// Carico il dataset e controllo che non sia nullo
Dataset *dataset = get_dataset(path);
if(dataset == NULL) {
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 cavalli;
cavalli.size = 1;
cavalli.istanze = (Istanza *)malloc(sizeof(Istanza) * cavalli.size);
int indice_cavalli = 0;
// 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);
// Stampa di debug
for (int i = 0; i < set.size; i++)
{
if (set.istanze[i].categoria == 7)
{
cavalli.size++;
cavalli.istanze[indice_cavalli] = set.istanze[i];
cavalli.istanze = (Istanza *)realloc(cavalli.istanze, sizeof(Istanza) * cavalli.size);
printf("n: %d. Categoria: %d\n", indice_cavalli, cavalli.istanze[indice_cavalli].categoria);
indice_cavalli++;
}
}
salva_dataset("cavalli.bin", &cavalli);
} */