Genann es una biblioteca mínima y bien probada para el entrenamiento y el uso de redes neuronales artificiales de avance (ANN) en C. Su enfoque principal es ser simple, rápido, confiable y hackable. Logra esto al proporcionar solo las funciones necesarias y poco extra.
Genann es autónomo en dos archivos: genann.c y genann.h . Para usar Genann, simplemente agregue esos dos archivos a su proyecto.
Se incluyen cuatro programas de ejemplo con el código fuente.
example1.c : entrena una ANN en la función XOR usando Backpropagation.example2.c : entrena una ANN en la función XOR usando una búsqueda aleatoria.example3.c : carga y ejecuta una ANN desde un archivo.example4.c : entrena una ANN en el conjunto de datos del Iris utilizando backpropagation. Creamos una ANN tomando 2 entradas, con 1 capa de 3 neuronas ocultas y proporcionando 2 salidas. Tiene la siguiente estructura:

Luego lo capacitamos en un conjunto de datos etiquetados usando backpropagation y le pedimos que prediga en un punto de datos de prueba:
#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 );Este ejemplo es mostrar el uso de API, no muestra buenas técnicas de aprendizaje automático. En una aplicación real, probablemente desee aprender sobre los datos de la prueba en un orden aleatorio. También querrá monitorear el aprendizaje para evitar el exceso de ajuste.
genann * genann_init ( int inputs , int hidden_layers , int hidden , int outputs );
genann * genann_copy ( genann const * ann );
void genann_free ( genann * ann ); La creación de una nueva ANN se realiza con la función genann_init() . Sus argumentos son el número de entradas, el número de capas ocultas, el número de neuronas en cada capa oculta y el número de salidas. Devuelve un puntero de Struct genann .
Llamar genann_copy() creará una copia profunda de una estructura genann existente.
Llame genann_free() cuando haya terminado con un ANN devuelto por genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() preformará una actualización utilizando BackPropogation estándar. Debe llamarse pasando en una matriz de entradas, una matriz de resultados esperados y una tasa de aprendizaje. Vea Ejemplo1.c para un ejemplo de aprendizaje con backpropogation.
Un objetivo de diseño principal de Genann era almacenar todos los pesos de la red en un bloque contigioso de la memoria. Esto hace que sea fácil y eficiente entrenar los pesos de la red utilizando Algorthims de optimización numérica de búsqueda directa, como la escalada de colinas, el algoritmo genético, el recocido simulado, etc. Estos métodos se pueden utilizar buscando directamente los pesos de la ANN. Cada estructura genann contiene los miembros int total_weights; y double *weight; . *weight apunta a una matriz de tamaño total_weights que contiene todos los pesos utilizados por la ANN. Vea el ejemplo2.c para un ejemplo de entrenamiento utilizando la búsqueda aleatoria de escalada.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genann proporciona las funciones genann_read() y genann_write() para cargar o guardar una ANN en un formato basado en texto.
double const * genann_run ( genann const * ann , double const * inputs ); Llame genann_run() en una ANN entrenada para ejecutar un pase de feed-forward en un conjunto dado de entradas. genann_run() proporcionará un puntero a la matriz de salidas predichas (de longitud ann->outputs ).
genann_ .Las preguntas frecuentes de Comp.AI.Neural-Nets es un excelente recurso para una introducción a las redes neuronales artificiales.
Si necesita una biblioteca de red neuronal aún más pequeña, consulte la excelente biblioteca de capa oculta Tinn.
Si está buscando una biblioteca de redes neuronales más pesadas y obstinadas en C, le recomiendo la Biblioteca Fann. Otra buena biblioteca es la red neuronal ligera de Peter Van Rossum, que a pesar de su nombre es más pesado y tiene más características que Genann.