Genannは、Cでフィードフォワードの人工ニューラルネットワーク(ANN)をトレーニングおよび使用するための最小限の十分にテストされたライブラリです。その主な焦点は、シンプルで、速く、信頼性があり、ハッキング可能です。これは、必要な機能と余分なもののみを提供することでこれを達成します。
Genannは、 genann.cとgenann.h 2つのファイルに自己完結型です。 Genannを使用するには、これらの2つのファイルをプロジェクトに追加するだけです。
ソースコードには、4つのサンプルプログラムが含まれています。
example1.c backpropagationを使用してxor関数でアンをトレーニングします。example2.c 2.C-ランダム検索を使用してXOR関数でANNをトレーニングします。example3.cファイルからアンをロードして実行します。example4.cバックプロパゲーションを使用して、IRISデータセットでANNをトレーニングします。 2つの入力を取得するANNを作成し、3つの隠れたニューロンの1層を持ち、2つの出力を提供します。次の構造があります。

次に、backpropagationを使用してラベル付きデータのセットでトレーニングし、テストデータポイントで予測するように依頼します。
#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_init genann_free() genann_init()を呼び出します。
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train()標準のbackpropogationを使用して1つの更新を事前に実行します。入力の配列、予想される出力の配列、および学習率を渡すことにより、呼び出す必要があります。 Backpropogationを使用した学習の例については、例1.cを参照してください。
Genannの主な設計目標は、すべてのネットワークの重みを1つの隣接するメモリブロックに保存することでした。これにより、ヒルクライミング、遺伝的アルゴリズム、シミュレートされたアニーリングなど、直接検索数値最適化アルゴルチムを使用してネットワークの重みを簡単かつ効率的にトレーニングできます。これらの方法は、ANNの重量を直接検索することで使用できます。すべてのgenann構造体には、メンバーint total_weights;およびdouble *weight; 。 *weight ANNが使用するすべての重みを含むtotal_weightsサイズの配列を指します。ランダムヒルクライミング検索を使用したトレーニングの例については、例2.cを参照してください。
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genannは、テキストベースの形式でANNをロードまたは保存するために、 genann_read()およびgenann_write()関数を提供します。
double const * genann_run ( genann const * ann , double const * inputs );訓練されたANNでgenann_run()を呼び出して、特定の入力セットでフィードフォワードパスを実行します。 genann_run()予測される出力の配列( ann->outputs長さ)の配列へのポインターを提供します。
genann_で始まります。comp.ai.neural-nets FAQは、人工ニューラルネットワークを紹介するための優れたリソースです。
さらに小さなニューラルネットワークライブラリが必要な場合は、優れた単一層層ライブラリTINNをご覧ください。
Cでより重い、より意見のあるニューラルネットワークライブラリを探している場合は、Fann Libraryをお勧めします。もう1つの優れたライブラリは、ピーターヴァンロッサムの軽量ニューラルネットワークです。その名前にもかかわらず、Genannよりも重く、より多くの機能を備えています。