Genann هي مكتبة الحد الأدنى والمختبرة جيدًا للتدريب واستخدام الشبكات العصبية الاصطناعية (ANN) في C. إنه يحقق هذا من خلال توفير الوظائف اللازمة فقط والضغط الإضافي.
Genann مكتفية ذاتيا في ملفين: genann.c و genann.h . لاستخدام Genann ، ما عليك سوى إضافة هذين الملفين إلى مشروعك.
يتم تضمين أربعة مثال على رمز المصدر.
example1.c - يدرب ANN على وظيفة XOR باستخدام backpropagation.example2.c - يدرب ANN على وظيفة XOR باستخدام بحث عشوائي.example3.c - تحميل وتشغيل ANN من ملف.example4.c . نقوم بإنشاء ANN تأخذ 2 مدخلات ، ولديها طبقة واحدة من 3 الخلايا العصبية المخفية ، وتوفير 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 );هذا المثال هو إظهار استخدام واجهة برمجة التطبيقات ، فهو لا يعرض تقنيات جيدة للتعلم الآلي. في تطبيق حقيقي ، من المحتمل أن ترغب في تعلم بيانات الاختبار بترتيب عشوائي. قد ترغب أيضًا في مراقبة التعلم لمنع الإفراط في التنسيق.
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_free() عند الانتهاء من ANN التي تم إرجاعها بواسطة genann_init() .
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() سوف يقوم بتأمين تحديث واحد باستخدام Backpropogation القياسي. يجب أن يطلق عليه تمريره في مجموعة من المدخلات ، ومجموعة من المخرجات المتوقعة ، ومعدل التعلم. انظر example1.c للحصول على مثال على التعلم مع backpropogation.
كان الهدف الأساسي للتصميم لجينان هو تخزين جميع أوزان الشبكة في كتلة واحدة من الذاكرة. هذا يجعل من السهل وفعال تدريب أوزان الشبكة باستخدام algorthims تحسين الأبحاث المباشرة ، مثل تسلق التل ، والخوارزمية الوراثية ، والصلصة المحاكاة ، وما إلى ذلك. يمكن استخدام هذه الطرق عن طريق البحث على أوزان آن مباشرة. يحتوي كل بنية genann على الأعضاء int total_weights; double *weight; . *weight إلى مجموعة من حجم total_weights التي تحتوي على جميع الأوزان التي تستخدمها ANN. انظر example2.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 ); اتصل بـ genann_run() على ANN مدربة لتشغيل تمريرة التغذية على مجموعة معينة من المدخلات. سيوفر genann_run() مؤشرًا لمجموعة من المخرجات المتوقعة (بطول ann->outputs ).
genann_ .تعتبر الأسئلة الشائعة عن شركات comp.ai.aiural-nets مورد ممتازًا لتقديم الشبكات العصبية الاصطناعية.
إذا كنت بحاجة إلى مكتبة شبكات عصبية أصغر ، تحقق من TINN المكتبة الممتازة ذات الطبقة المسبقة.
إذا كنت تبحث عن مكتبة شبكة عصبية أثقل وأكثر رأي في C ، فإنني أوصي بمكتبة فان. مكتبة جيدة أخرى هي الشبكة العصبية الخفيفة في بيتر فان روسوم ، والتي على الرغم من اسمها ، أثقل ولديها ميزات أكثر من جينان.