Genann ist eine minimale, gut getestete Bibliothek für das Training und die Verwendung von künstlichen Neuralnetzwerken (ANN) in Feedforward in C. Sein Hauptaugenmerk liegt darauf, einfach, schnell, zuverlässig und hackbar zu sein. Es erreicht dies, indem es nur die notwendigen Funktionen und wenig zusätzlich bereitstellt.
Genann ist in zwei Dateien in sich geschlossen: genann.c und genann.h . Um Genann zu verwenden, fügen Sie einfach diese beiden Dateien Ihrem Projekt hinzu.
Vier Beispielprogramme sind im Quellcode enthalten.
example1.c - trainiert eine ANN auf der XOR -Funktion mit Backpropagation.example2.c - trainiert eine ANN in der XOR -Funktion mit der zufälligen Suche.example3.c - lädt und führt eine ANN aus einer Datei aus.example4.c - trainiert eine ANN auf dem IRIS -Datensatz mithilfe von Backpropagation. Wir erstellen eine Ann, die 2 Eingänge mit 1 Schicht mit 3 verborgenen Neuronen mit 2 Ausgängen enthält. Es hat die folgende Struktur:

Anschließend trainieren wir es mithilfe von Backpropagation auf einer Reihe von markierten Daten und bitten sie, einen Testdatenpunkt vorherzusagen:
#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 );In diesem Beispiel wird die API -Verwendung angezeigt, es zeigt keine guten Techniken für maschinelles Lernen. In einer realen Anwendung möchten Sie wahrscheinlich in einer zufälligen Reihenfolge in den Testdaten lernen. Sie möchten auch das Lernen überwachen, um eine Überanpassung zu verhindern.
genann * genann_init ( int inputs , int hidden_layers , int hidden , int outputs );
genann * genann_copy ( genann const * ann );
void genann_free ( genann * ann ); Das Erstellen einer neuen Ann erstellt mit der Funktion genann_init() . Seine Argumente sind die Anzahl der Eingänge, die Anzahl der versteckten Schichten, die Anzahl der Neuronen in jeder versteckten Schicht und die Anzahl der Ausgänge. Es gibt einen genann Struct -Zeiger zurück.
Das Aufrufen genann_copy() erzeugt eine tiefe Kopie einer vorhandenen genann Struktur.
Rufen Sie genann_free() an, wenn Sie mit einer Ann fertig sind, die von genann_init() zurückgegeben wurde.
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() wird ein Update mithilfe von Standard -Backpropogation vorstellen. Es sollte aufgerufen werden, indem eine Reihe von Eingängen, eine Reihe erwarteter Ausgänge und eine Lernrate übergeben werden. In Beispiel1.c finden Sie ein Beispiel des Lernens mit Backpropogation.
Ein primäres Designziel von Genann bestand darin, alle Netzwerkgewichte in einem anhaltenden Speicherblock zu speichern. Dies erleichtert es einfach und effizient, die Netzwerkgewichte mithilfe der numerischen Optimierungsalgorthims der Direktsearch zu trainieren, wie z. B. Hill Climbing, den genetischen Algorithmus, simuliertes Annealing usw. Diese Methoden können verwendet werden, indem Sie direkt nach den Gewichten der ANN suchen. Jede genann -Struktur enthält die Mitglieder int total_weights; und double *weight; . *weight Gewichtspunkte auf eine Reihe von total_weights -Größe, die alle von der Ann verwendeten Gewichte enthält. In Beispiel2.c finden Sie ein Beispiel für ein Training mit der zufälligen Hill Climbing Search.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genann bietet die Funktionen genann_read() und genann_write() zum Laden oder Speichern einer ANN in einem textbasierten Format.
double const * genann_run ( genann const * ann , double const * inputs ); Rufen Sie genann_run() auf einer geschulten Ann an, um einen Feed-Forward-Pass auf einen bestimmten Satz von Eingängen auszuführen. genann_run() liefert einen Zeiger auf das Array der vorhergesagten Ausgänge (von ann->outputs Länge).
genann_ .Die FAQ der Comp.Ai.neural-Nets sind eine hervorragende Ressource für eine Einführung in künstliche neuronale Netze.
Wenn Sie eine noch kleinere Bibliothek für neuronale Netzwerke benötigen, lesen Sie die exzellente Bibliothek mit einer versteckten Schicht.
Wenn Sie nach einer schwereren, mehr Meinung in C -Bibliothek in C suchen, empfehle ich die FANN -Bibliothek. Eine weitere gute Bibliothek ist das leichte neuronale Netz von Peter Van Rossum, das trotz seines Namens schwerer ist und mehr Funktionen als Genann aufweist.