Genann是一个最小,经过良好测试的文库,用于培训,并在C中使用前馈性人工神经网络(ANN)。其主要重点是简单,快速,可靠和可黑客。它通过仅提供必要的功能和几乎没有额外的功能来实现这一目标。
Genann在两个文件中是独立的: genann.c和genann.h 。要使用Genann,只需将这两个文件添加到您的项目中。
源代码包含四个示例程序。
example1.c使用反向传播在XOR函数上训练ANN。example2.c使用随机搜索在XOR函数上训练ANN。example3.c加载并从文件中运行ANN。example4.c使用反向传播在虹膜数据集上训练ANN。 我们创建一个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结构指针。
呼叫genann_copy()将创建现有genann结构的深层拷贝。
当您使用GenAnn_Init genann_free() genann_init() 。
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train()将使用标准反向物质预定一个更新。应该通过传递一系列输入,一系列预期输出和学习率来调用它。请参阅示例1.c ,以获取重新推广的学习示例。
Genann的主要设计目标是将所有网络权重存储在一个杂物的一个记忆块中。这使得使用直接搜索数字优化的Algorthims(例如爬山,遗传算法,模拟退火等)训练网络权重变得容易,有效。可以通过直接搜索ANN的权重来使用这些方法。每个genann结构都包含成员int total_weights;和double *weight; 。 *weight重点是一个total_weights大小的数组,其中包含ANN使用的所有权重。有关使用随机爬山搜索训练的示例,请参见emess2.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 );在训练有素的ANN上致电genann_run()在给定的一组输入上运行馈电通票。 genann_run()将提供指向预测输出数组( ann->outputs长度)的指针。
genann_开头。Comp.AI.Neur-Nets常见问题解答是人工神经网络介绍的绝佳资源。
如果您需要一个较小的神经网络库,请查看出色的单隐藏库图书馆TINN。
如果您正在寻找C中较重,更有意义的神经网络库,我建议您使用范例库。另一个不错的图书馆是彼得·范·罗斯姆(Peter Van Rossum)的轻量级神经网络,尽管它的名称,但它比Genann更重,并且具有更多功能。