Genann est une bibliothèque minimale et bien testée pour la formation et l'utilisation de réseaux de neurones artificiels à la recherche de nourriture (ANN) dans C. Son objectif principal est d'être simple, rapide, fiable et piratable. Il y parvient en ne fournissant que les fonctions nécessaires et peu de plus.
Genann est autonome dans deux fichiers: genann.c et genann.h . Pour utiliser Genann, ajoutez simplement ces deux fichiers à votre projet.
Quatre exemples de programmes sont inclus avec le code source.
example1.c - Formente un Ann sur la fonction XOR en utilisant la rétropropagation.example2.c - Formaux un ann sur la fonction XOR en utilisant la recherche aléatoire.example3.c - Charge et exécute un ann à partir d'un fichier.example4.c - Formente un ANN sur l'ensemble de données de l'iris à l'aide de la rétro-propagation. Nous créons un ANN prenant 2 entrées, ayant 1 couche de 3 neurones cachés et fournissant 2 sorties. Il a la structure suivante:

Nous le formons ensuite sur un ensemble de données étiquetées à l'aide de rétro-propagation et lui demandons de prédire sur un point de données de test:
#include "genann.h"
/* Not shown, loading your training and test data. */
double * * training_data_input , * * training_data_output , * * test_data_input ;
/* New network with 2 inputs,
* 1 hidden layer of 3 neurons each,
* and 2 outputs. */
genann * ann = genann_init ( 2 , 1 , 3 , 2 );
/* Learn on the training set. */
for ( i = 0 ; i < 300 ; ++ i ) {
for ( j = 0 ; j < 100 ; ++ j )
genann_train ( ann , training_data_input [ j ], training_data_output [ j ], 0.1 );
}
/* Run the network and see what it predicts. */
double const * prediction = genann_run ( ann , test_data_input [ 0 ]);
printf ( "Output for the first test data point is: %f, %fn" , prediction [ 0 ], prediction [ 1 ]);
genann_free ( ann );Cet exemple est de montrer l'utilisation de l'API, il ne montre pas de bonnes techniques d'apprentissage automatique. Dans une application réelle, vous voudriez probablement apprendre sur les données de test dans un ordre aléatoire. Vous voudriez également surveiller l'apprentissage pour empêcher un sur-ajustement.
genann * genann_init ( int inputs , int hidden_layers , int hidden , int outputs );
genann * genann_copy ( genann const * ann );
void genann_free ( genann * ann ); La création d'un nouvel ANN est réalisée avec la fonction genann_init() . Ses arguments sont le nombre d'entrées, le nombre de couches cachées, le nombre de neurones dans chaque couche cachée et le nombre de sorties. Il renvoie un pointeur genann Struct.
Appeler genann_copy() créera une copie profonde d'une structure genann existante.
Appelez genann_free() lorsque vous avez terminé avec un Ann renvoyé par genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() préformera une mise à jour en utilisant la rétro-propulgation standard. Il doit être appelé en passant dans un tableau d'entrées, un tableau de sorties attendues et un taux d'apprentissage. Voir Exemple1.c pour un exemple d'apprentissage avec une rétro-proporgation.
Un objectif de conception principal de Genann était de stocker tous les poids du réseau dans un bloc de mémoire continu. Cela facilite et efficace pour former les poids du réseau en utilisant des algoRMS d'optimisation numérique de recherche directe, tels que l'escalade, l'algorithme génétique, le recuit simulé, etc. Ces méthodes peuvent être utilisées en recherchant directement les poids de l'ANN. Chaque structure genann contient les membres int total_weights; et double *weight; . *weight pointe vers un tableau de taille total_weights qui contient tous les poids utilisés par l'ANN. Voir l'exemple2.c pour un exemple de formation en utilisant la recherche aléatoire d'escalade.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genann fournit les fonctions genann_read() et genann_write() pour charger ou enregistrer un ann dans un format textuel.
double const * genann_run ( genann const * ann , double const * inputs ); Appelez genann_run() sur une ANN formée pour exécuter une passe de Feed-Forward sur un ensemble donné d'entrées. genann_run() fournira un pointeur sur le tableau des sorties prévues (de la longueur ann->outputs ).
genann_ .La FAQ comp.ai.neural-nets est une excellente ressource pour une introduction aux réseaux de neurones artificiels.
Si vous avez besoin d'une bibliothèque de réseaux neuronaux encore plus petite, consultez l'excellente bibliothèque de couches simples.
Si vous recherchez une bibliothèque de réseaux neuronaux plus lourde et plus avisée en C, je recommande la bibliothèque Fann. Une autre bonne bibliothèque est le réseau neuronal léger de Peter Van Rossum qui, malgré son nom, est plus lourd et a plus de fonctionnalités que Genann.