From 828d7b83ccb2607e35275bb8b93c3395fd23e45e Mon Sep 17 00:00:00 2001 From: augustin64 Date: Fri, 3 Jun 2022 15:47:02 +0200 Subject: [PATCH] Add comments in headers files --- src/mnist/include/main.h | 67 ++++++++++++++++++++++++++++++++++++++- src/mnist/include/mnist.h | 21 +++++++++++- src/mnist/mnist.c | 8 ++--- 3 files changed, 90 insertions(+), 6 deletions(-) diff --git a/src/mnist/include/main.h b/src/mnist/include/main.h index 6a35049..d8a6105 100644 --- a/src/mnist/include/main.h +++ b/src/mnist/include/main.h @@ -1,6 +1,9 @@ #ifndef DEF_MAIN_H #define DEF_MAIN_H +/* +* Structure donnée en argument à la fonction 'train_images' +*/ typedef struct TrainParameters { Network* network; int*** images; @@ -12,16 +15,78 @@ typedef struct TrainParameters { float accuracy; } TrainParameters; - +/* +* Affiche une image ainsi que les prévisions faites par le réseau de neurones sur sa valeur +* width, height: dimensions de l'image +* image: tableau 2*2 contenant l'image +* previsions: prévisions faites par le réseau neuronal +*/ void print_image(unsigned int width, unsigned int height, int** image, float* previsions); + +/* +* Renvoie l'indice de l'élément maximum d'un tableau de taille n +*/ int indice_max(float* tab, int n); + +/* +* Affiche un message d'aide +* call: chaîne de caractères utilisées pour appeler le programme +*/ void help(char* call); + +/* +* Écrit l'image les valeurs d'un tableau dans la première couche d'un réseau neuronal +* image: tableau contenant l'image +* network: réseau neuronal +* height, width: dimensions de l'image +*/ void write_image_in_network(int** image, Network* network, int height, int width); + +/* +* Sous fonction de 'train' assignée à un thread +* parameters: voir la structure 'TrainParameters' +*/ void* train_images(void* parameters); + +/* +* Fonction d'entraînement du réseau +* epochs: nombre d'époques +* layers: nombre de couches +* neurons: nombre de neurones sur la première couche +* recovery: nom du fichier contenant un réseau sur lequel continuer l'entraînement (Null si non utilisé) +* image_file: nom du fichier contenant les images +* label_file: nom du fichier contenant les labels associés +* out: nom du fichier dans lequel écrire le réseau entraîné +* delta: nom du fichier où écrire le réseau différentiel (utilisation en parallèle avec d'autres clients) (Null si non utilisé) +* nb_images_to_process: nombre d'images sur lesquelles entraîner le réseau (-1 si non utilisé) +* start: index auquel démarrer si nb_images_to_process est utilisé (0 si non utilisé) +*/ void train(int epochs, int layers, int neurons, char* recovery, char* image_file, char* label_file, char* out, char* delta, int nb_images_to_process, int start); + +/* +* Reconnaissance d'un set d'images, renvoie un tableau de float contentant les prédictions +* modele: nom du fichier contenant le réseau neuronal +* entree: nom du fichier contenant les images à reconnaître +*/ float** recognize(char* modele, char* entree); + +/* +* Renvoie les prédictions d'images sur stdout +* modele: nom du fichier contenant le réseau neuronal +* entree: fichier contenant les images +* sortie: vaut 'text' ou 'json', spécifie le format auquel afficher les prédictions +*/ void print_recognize(char* modele, char* entree, char* sortie); + +/* +* Teste un réseau neuronal avec un fichier d'images ainsi que leurs propriétés +* modele: nom du fichier contenant le réseau neuronal +* fichier_images: nom du fichier contenant les images +* fichier_labels: nom du fichier contenant les labels +* preview_fails: faut-il afficher les images qui ne sont pas correctement reconnues ? +*/ void test(char* modele, char* fichier_images, char* fichier_labels, bool preview_fails); + int main(int argc, char* argv[]); #endif \ No newline at end of file diff --git a/src/mnist/include/mnist.h b/src/mnist/include/mnist.h index f33311b..15214fd 100644 --- a/src/mnist/include/mnist.h +++ b/src/mnist/include/mnist.h @@ -7,11 +7,30 @@ #define DEF_MNIST_H uint32_t swap_endian(uint32_t val); + +/* +* Renvoie le nombre d'éléments dans un set de labels au format IDX +*/ uint32_t read_mnist_labels_nb_images(char* filename); + +/* +* Lit et renvoie une image dans un fichier spécifié par ptr +*/ int** read_image(unsigned int width, unsigned int height, FILE* ptr); + +/* +* Renvoie les paramètres [nb_elem, width, height] +*/ int* read_mnist_images_parameters(char* filename); -int* read_mnist_labels_parameters(char* filename); + +/* +* Charge dans la mémoire des images du set de données MNIST au format IDX +*/ int*** read_mnist_images(char* filename); + +/* +* Charge dans la mémoire des labels du set de données MNIST au format IDX +*/ unsigned int* read_mnist_labels(char* filename); #endif \ No newline at end of file diff --git a/src/mnist/mnist.c b/src/mnist/mnist.c index 34768f3..597e30b 100644 --- a/src/mnist/mnist.c +++ b/src/mnist/mnist.c @@ -11,7 +11,6 @@ uint32_t swap_endian(uint32_t val) { } -// Renvoie une image sous forme d'un int** int** read_image(unsigned int width, unsigned int height, FILE* ptr) { unsigned char buffer[width*height]; int** image = (int**)malloc(sizeof(int*)*height); @@ -30,7 +29,7 @@ int** read_image(unsigned int width, unsigned int height, FILE* ptr) { return image; } -// renvoie [nb_elem, width, height] + int* read_mnist_images_parameters(char* filename) { int* tab = (int*)malloc(sizeof(int)*3); FILE *ptr; @@ -62,6 +61,7 @@ int* read_mnist_images_parameters(char* filename) { return tab; } + uint32_t read_mnist_labels_nb_images(char* filename) { FILE *ptr; @@ -84,7 +84,7 @@ uint32_t read_mnist_labels_nb_images(char* filename) { return number_of_images; } -// Lit un set de données images sous format de la base de données MNIST + int*** read_mnist_images(char* filename) { FILE *ptr; @@ -120,7 +120,7 @@ int*** read_mnist_images(char* filename) { return tab; } -// Renvoie des labels formattés sous le format de la base MNIST +// Renvoie des labels formatés sous le format de la base MNIST unsigned int* read_mnist_labels(char* filename) { FILE* ptr;