Genann-это минимальная, хорошо проверяемая библиотека для обучения и использования искусственных нейронных сетей (ANN) в C. В C. Основное внимание уделяется тому, чтобы быть простым, быстрым, надежным и взломанным. Это достигает этого, предоставляя только необходимые функции и мало дополнительных.
Генанн самодостаточен в двух файлах: genann.c и genann.h . Чтобы использовать Genann, просто добавьте эти два файла в свой проект.
Четыре примера программы включены в исходный код.
example1.c - тренирует ANN на функцию XOR, используя BackPropagation.example2.c - тренирует ANN на функцию XOR, используя случайный поиск.example3.c - загружает и запускает ANN из файла.example4.c - обучает ANN на набор данных IRIS, используя обратное распространение. Мы создаем ANN, принимающую 2 входа, имея 1 слой из 3 скрытых нейронов и обеспечивая 2 выхода. Он имеет следующую структуру:

Затем мы обучаем его наборе помеченных данных с использованием обратного распространения и просим их предсказать в точке тестовых данных:
#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 );Этот пример - показать использование API, он не показывает хороших методов машинного обучения. В реальном приложении вы, скорее всего, захотите узнать по тестовым данным в случайном порядке. Вы также захотите отслеживать обучение, чтобы предотвратить переоборудование.
genann * genann_init ( int inputs , int hidden_layers , int hidden , int outputs );
genann * genann_copy ( genann const * ann );
void genann_free ( genann * ann ); Создание новой ANN выполняется с функцией genann_init() . Его аргументы - это количество входов, количество скрытых слоев, количество нейронов в каждом скрытом слое и количество выходов. Он возвращает указатель genann Struct.
Вызов genann_copy() создаст глубокую копию существующей структуры genann .
Позвоните genann_free() , когда вы закончите с Ann, возвращенной genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() будет преформировать одно обновление с использованием стандартного обратного процесса. Это должно быть вызвано путем прохождения в массиве входов, массива ожидаемых результатов и скорости обучения. См . Пример1.c для примера обучения с обратной задачей.
Основной целью Genann было хранить все веса сети в одном смешном блоке памяти. Это позволяет легко и эффективно обучить веса сети, используя алгортимы с прямой поиском численной оптимизации, такие как скалолазание на холме, генетический алгоритм, моделируемый отжиг и т. Д. Эти методы могут использоваться путем поиска на весах ANN напрямую. Каждая структура genann содержит элементы int total_weights; и double *weight; Полем *weight указывает на массив размера total_weights , который содержит все веса, используемые ANN. См . Пример2.c для примера обучения, используя случайный поиск по скалолазанию.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genann предоставляет функции genann_read() и genann_write() для загрузки или сохранения ANN в текстовом формате.
double const * genann_run ( genann const * ann , double const * inputs ); Вызовите genann_run() на обученную ANN, чтобы запустить проход для подачи на заданный набор входов. genann_run() предоставит указатель на массив прогнозируемых выходов (длины ann->outputs ).
genann_ .Comp.ai.Neural Nets Faq является отличным ресурсом для введения в искусственные нейронные сети.
Если вам нужна еще небольшая библиотека нейронной сети, ознакомьтесь с отличной библиотекой с одним скрытым слоем Tinn.
Если вы ищете более тяжелую, более самоуверенную библиотеку нейронной сети в C, я рекомендую библиотеку Fann. Другая хорошая библиотека - легкая нейронная сеть Питера Ван Россума, которая, несмотря на ее название, более тяжелая и имеет больше функций, чем Генанн.