Genann เป็นห้องสมุดที่ได้รับการทดสอบอย่างดีน้อยที่สุดสำหรับการฝึกอบรมและการใช้เครือข่ายประสาทเทียม Feedforward (ANN) ใน C ใน C มันมุ่งเน้นไปที่ความเรียบง่ายรวดเร็วเชื่อถือได้และแฮ็กได้ มันประสบความสำเร็จโดยการจัดหาฟังก์ชั่นที่จำเป็นและพิเศษเล็กน้อย
Genann มีอยู่ในสองไฟล์: genann.c และ genann.h หากต้องการใช้ Genann เพียงเพิ่มไฟล์สองไฟล์ลงในโครงการของคุณ
โปรแกรมตัวอย่างสี่รายการรวมอยู่ในซอร์สโค้ด
example1.c - ฝึก ANN บนฟังก์ชั่น XOR โดยใช้ backpropagationexample2.c - ฝึก ANN บนฟังก์ชั่น XOR โดยใช้การค้นหาแบบสุ่มexample3.c - โหลดและเรียกใช้ ANN จากไฟล์example4.c - ฝึก ANN บนชุดข้อมูลไอริสโดยใช้ backpropagation เราสร้าง ANN ที่ใช้ 2 อินพุตมี 1 ชั้นของเซลล์ประสาทที่ซ่อนอยู่ 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 ); การสร้างแอนใหม่จะทำด้วยฟังก์ชั่น genann_init() อาร์กิวเมนต์ของมันคือจำนวนอินพุตจำนวนเลเยอร์ที่ซ่อนอยู่จำนวนเซลล์ประสาทในแต่ละชั้นที่ซ่อนอยู่และจำนวนเอาต์พุต มันส่งคืนตัวชี้ Struct 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() จะ preform หนึ่งอัปเดตโดยใช้ backpropogation มาตรฐาน มันควรจะถูกเรียกโดยผ่านในอาร์เรย์ของอินพุตอาร์เรย์ของเอาต์พุตที่คาดหวังและอัตราการเรียนรู้ ดู ตัวอย่าง 1.c สำหรับตัวอย่างการเรียนรู้ด้วย backpropogation
เป้าหมายการออกแบบหลักของ Genann คือการจัดเก็บน้ำหนักเครือข่ายทั้งหมดไว้ในหน่วยความจำที่ต่อเนื่องกัน สิ่งนี้ทำให้ง่ายและมีประสิทธิภาพในการฝึกฝนน้ำหนักเครือข่ายโดยใช้อัลจี ธ ลิมส์การเพิ่มประสิทธิภาพเชิงตัวเลขโดยตรงเช่นการปีนเขาอัลกอริทึมทางพันธุกรรมการหลอมจำลอง ฯลฯ วิธีการเหล่านี้สามารถใช้โดยการค้นหาน้ำหนักของแอนโดยตรง ทุก genann struct มีสมาชิก int total_weights; และ double *weight; - *weight เป็นอาร์เรย์ขนาด total_weights ซึ่งมีน้ำหนักทั้งหมดที่ใช้โดย Ann ดู ตัวอย่าง 2.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() บนแอนที่ผ่านการฝึกอบรมเพื่อเรียกใช้ผ่านฟีดไปข้างหน้าในชุดอินพุตที่กำหนด genann_run() จะให้ตัวชี้ไปยังอาร์เรย์ของเอาต์พุตที่คาดการณ์ไว้ (ของความยาว ann->outputs )
genann_COMP.AI.Neural-Nets FAQ เป็นทรัพยากรที่ยอดเยี่ยมสำหรับการแนะนำเครือข่ายประสาทเทียม
หากคุณต้องการไลบรารีเครือข่ายประสาทขนาดเล็กให้ตรวจสอบห้องสมุดชั้นเดียวที่ซ่อนอยู่ที่ยอดเยี่ยม
หากคุณกำลังมองหาห้องสมุดเครือข่ายประสาทที่มีความคิดเห็นที่หนักกว่าและมีความคิดเห็นมากขึ้นใน C ฉันขอแนะนำห้องสมุด Fann ห้องสมุดที่ดีอีกอย่างหนึ่งคือเครือข่ายประสาทที่มีน้ำหนักเบาของ Peter Van Rossum ซึ่งแม้จะมีชื่อก็หนักกว่าและมีคุณสมบัติมากกว่า Genann