Genann é uma biblioteca mínima e bem testada para treinamento e uso de redes neurais artificiais do FeedForward (RNA) em C. Seu foco principal é ser simples, rápido, confiável e hackeable. Consegue isso fornecendo apenas as funções necessárias e pouco extras.
Genann é independente em dois arquivos: genann.c e genann.h . Para usar o Genann, basta adicionar esses dois arquivos ao seu projeto.
Quatro programas de exemplo estão incluídos no código -fonte.
example1.c - Treina uma Ann na função XOR usando backpropagation.example2.c - Treina uma RNA na função XOR usando pesquisa aleatória.example3.c - Carrega e executa uma Ann a partir de um arquivo.example4.c - Treina uma RNA no conjunto de dados da IRIS usando backpropagation. Criamos uma Ann recebendo 2 entradas, com 1 camada de 3 neurônios ocultos e fornecendo 2 saídas. Tem a seguinte estrutura:

Em seguida, treinamos -o em um conjunto de dados rotulados usando retropacagação e pedimos que eles prevejam em um ponto de dados de teste:
#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 exemplo é mostrar o uso da API, ele não está mostrando boas técnicas de aprendizado de máquina. Em um aplicativo real, você provavelmente gostaria de aprender nos dados do teste em uma ordem aleatória. Você também gostaria de monitorar o aprendizado para evitar excesso 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 ); Criar uma nova Ann é feita com a função genann_init() . Seus argumentos são o número de entradas, o número de camadas ocultas, o número de neurônios em cada camada oculta e o número de saídas. Retorna um ponteiro de estrutura genann .
Calling genann_copy() criará uma cópia profunda de uma estrutura genann existente.
Ligue genann_free() quando terminar de uma Ann retornada por genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() prenderá uma atualização usando o backpropogação padrão. Deve ser chamado pela passagem de uma variedade de entradas, uma variedade de saídas esperadas e uma taxa de aprendizado. Consulte o Exemplo1.c para um exemplo de aprendizado com retropropatação.
Um objetivo de design primário da Genann era armazenar todos os pesos da rede em um bloco de memória contigioso. Isso torna fácil e eficiente treinar os pesos da rede usando algorthims de otimização numérica de pesquisa direta, como escalada, o algoritmo genético, recozimento simulado, etc. Esses métodos podem ser usados diretamente nos pesos da RNA. Todo genann Struct contém os membros int total_weights; e double *weight; . *weight aponta para uma matriz de tamanho total_weights , que contém todos os pesos usados pela RNA. Consulte Exemplo2.C para um exemplo de treinamento usando a busca aleatória de escalada.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); O Genann fornece as funções genann_read() e genann_write() para carregar ou salvar uma RNA em um formato baseado em texto.
double const * genann_run ( genann const * ann , double const * inputs ); Ligue para genann_run() em uma RNA treinada para executar um passe para feed-forward em um determinado conjunto de entradas. genann_run() fornecerá um ponteiro para a matriz de saídas previstas (do comprimento ann->outputs ).
genann_ .As perguntas frequentes do Comp.ai.Neural-Nets são um excelente recurso para uma introdução às redes neurais artificiais.
Se você precisar de uma biblioteca de rede neural ainda menor, consulte a excelente biblioteca de camada única de camada oculta.
Se você está procurando uma biblioteca de rede neural mais pesada e opinativa em C, recomendo a biblioteca Fann. Outra boa biblioteca é a rede neural leve de Peter Van Rossum, que, apesar do nome, é mais pesada e tem mais recursos que a Genann.