Genann adalah perpustakaan minimal, teruji dengan baik untuk pelatihan dan menggunakan Feedforward Buatan Jaringan Saraf (JST) di C. Fokus utamanya adalah menjadi sederhana, cepat, andal, dan dapat diretas. Ini mencapai ini dengan hanya menyediakan fungsi yang diperlukan dan sedikit tambahan.
Genann mandiri dalam dua file: genann.c dan genann.h . Untuk menggunakan Genann, cukup tambahkan kedua file tersebut ke proyek Anda.
Empat program contoh disertakan dengan kode sumber.
example1.c - Melatih Ann pada fungsi XOR menggunakan backpropagation.example2.c - Melatih Ann pada fungsi XOR menggunakan pencarian acak.example3.c - Memuat dan menjalankan JST dari file.example4.c - Melatih Ann pada data IRIS yang menggunakan backpropagation. Kami membuat JST mengambil 2 input, memiliki 1 lapisan 3 neuron tersembunyi, dan menyediakan 2 output. Itu memiliki struktur berikut:

Kami kemudian melatihnya pada satu set data berlabel menggunakan backpropagation dan memintanya untuk memprediksi pada titik data uji:
#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 );Contoh ini adalah untuk menunjukkan penggunaan API, itu tidak menunjukkan teknik pembelajaran mesin yang baik. Dalam aplikasi nyata Anda mungkin ingin belajar pada data uji dalam urutan acak. Anda juga ingin memantau pembelajaran untuk mencegah kelebihan pas.
genann * genann_init ( int inputs , int hidden_layers , int hidden , int outputs );
genann * genann_copy ( genann const * ann );
void genann_free ( genann * ann ); Membuat JST baru dilakukan dengan fungsi genann_init() . Argumennya adalah jumlah input, jumlah lapisan tersembunyi, jumlah neuron di setiap lapisan tersembunyi, dan jumlah output. Ini mengembalikan pointer genann Struct.
Memanggil genann_copy() akan menciptakan salinan dalam dari struktur genann yang ada.
Hubungi genann_free() ketika Anda selesai dengan Ann yang dikembalikan oleh genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() akan membentuk satu pembaruan menggunakan backpropogasi standar. Itu harus dipanggil dengan melewati array input, berbagai output yang diharapkan, dan tingkat pembelajaran. Lihat Contoh1.c Untuk contoh belajar dengan backpropogation.
Tujuan desain utama Genann adalah menyimpan semua bobot jaringan dalam satu blok memori yang berdekatan. Ini membuatnya mudah dan efisien untuk melatih bobot jaringan menggunakan algorthim optimasi numerik pencarian langsung, seperti pendakian bukit, algoritma genetika, anil simulasi, dll. Metode ini dapat digunakan dengan mencari pada bobot JST secara langsung. Setiap genann Struct berisi anggota int total_weights; dan double *weight; . *weight menunjuk ke serangkaian ukuran total_weights yang berisi semua bobot yang digunakan oleh JST. Lihat Contoh2.C Untuk contoh pelatihan menggunakan pencarian pendakian bukit acak.
genann * genann_read ( FILE * in );
void genann_write ( genann const * ann , FILE * out ); Genann menyediakan fungsi genann_read() dan genann_write() untuk memuat atau menyimpan JST dalam format berbasis teks.
double const * genann_run ( genann const * ann , double const * inputs ); Hubungi genann_run() pada JST terlatih untuk menjalankan umpan umpan-maju pada set input yang diberikan. genann_run() akan memberikan pointer ke array output yang diprediksi (panjang ann->outputs ).
genann_ .FAQ COMP.AIUR-NETS adalah sumber yang bagus untuk pengantar jaringan saraf buatan.
Jika Anda memerlukan perpustakaan jaringan saraf yang lebih kecil, lihat tinn tinn yang sangat baik.
Jika Anda mencari perpustakaan jaringan saraf yang lebih berat dan lebih banyak di atas C, saya merekomendasikan perpustakaan Fann. Perpustakaan yang bagus lainnya adalah jaringan saraf ringan Peter Van Rossum, yang terlepas dari namanya, lebih berat dan memiliki lebih banyak fitur daripada Genann.