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更重,並且具有更多功能。