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 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é)
|
|
|
|
*/
|
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
|