92 lines
3.2 KiB
C
Raw Normal View History

2022-06-01 21:31:32 +02:00
#ifndef DEF_MAIN_H
#define DEF_MAIN_H
2022-06-03 15:47:02 +02:00
/*
* Structure donnée en argument à la fonction 'train_images'
*/
2022-06-01 21:31:32 +02:00
typedef struct TrainParameters {
Network* network;
int*** images;
int* labels;
int start;
int nb_images;
int height;
int width;
float accuracy;
} TrainParameters;
2022-06-03 15:47:02 +02:00
/*
* 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
*/
2022-06-01 21:31:32 +02:00
void print_image(unsigned int width, unsigned int height, int** image, float* previsions);
2022-06-03 15:47:02 +02:00
/*
* Renvoie l'indice de l'élément maximum d'un tableau de taille n
*/
2022-06-01 21:31:32 +02:00
int indice_max(float* tab, int n);
2022-06-03 15:47:02 +02:00
/*
* Affiche un message d'aide
* call: chaîne de caractères utilisées pour appeler le programme
*/
2022-06-01 21:31:32 +02:00
void help(char* call);
2022-06-03 15:47:02 +02:00
/*
* É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
*/
2022-06-01 21:31:32 +02:00
void write_image_in_network(int** image, Network* network, int height, int width);
2022-06-03 15:47:02 +02:00
/*
* Sous fonction de 'train' assignée à un thread
* parameters: voir la structure 'TrainParameters'
*/
2022-06-01 21:31:32 +02:00
void* train_images(void* parameters);
2022-06-03 15:47:02 +02:00
/*
* 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 é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é)
*/
2022-06-01 21:31:32 +02:00
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);
2022-06-03 15:47:02 +02:00
/*
* 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
*/
2022-06-01 21:31:32 +02:00
float** recognize(char* modele, char* entree);
2022-06-03 15:47:02 +02:00
/*
* 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
*/
2022-06-01 21:31:32 +02:00
void print_recognize(char* modele, char* entree, char* sortie);
2022-06-03 15:47:02 +02:00
/*
* 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 ?
*/
2022-06-01 21:31:32 +02:00
void test(char* modele, char* fichier_images, char* fichier_labels, bool preview_fails);
2022-06-03 15:47:02 +02:00
2022-06-01 21:31:32 +02:00
int main(int argc, char* argv[]);
#endif