Genann은 C.에서 Feedforward 인공 신경망 (ANN)을 사용하고 사용하기위한 최소한의 잘 테스트 된 라이브러리입니다. 주요 초점은 단순하고 빠르고 신뢰할 수 있으며 해킹 가능합니다. 필요한 기능 만 제공하면서도이를 달성합니다.
Genann은 genann.c 와 genann.h 두 파일에 자체 포함됩니다. Genann을 사용하려면이 두 파일을 프로젝트에 추가하십시오.
소스 코드에는 4 가지 예제 프로그램이 포함되어 있습니다.
example1.c 역전술을 사용하여 XOR 함수에서 Ann을 훈련시킵니다.example2.c 임의의 검색을 사용하여 XOR 함수에서 Ann을 훈련시킵니다.example3.c 파일에서 앤을로드하고 실행합니다.example4.c 역전술을 사용하여 홍채 데이터 세트에서 ANN을 훈련시킵니다. 우리는 2 개의 입력을 복용하고 1 개의 숨겨진 뉴런의 1 층을 갖고 2 개의 출력을 제공합니다. 다음 구조가 있습니다.

그런 다음 역전술을 사용하여 라벨이 붙은 데이터 세트에 대해 교육하고 테스트 데이터 포인트를 예측하도록 요청합니다.
#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() 함수로 새 Ann을 만들어냅니다. 인수는 입력 수, 숨겨진 층의 수, 각 숨겨진 층의 뉴런 수 및 출력 수입니다. 그것은 genann Struct 포인터를 반환합니다.
genann_copy() 호출하면 기존의 genann Struct의 심층이 생성됩니다.
genann_free() 에 의해 반환 된 ann으로 끝나면 genann_init() 를 호출하십시오.
void genann_train ( genann const * ann , double const * inputs ,
double const * desired_outputs , double learning_rate ); genann_train() 표준 역전을 사용하여 하나의 업데이트를 미리 형성합니다. 입력 배열, 예상 출력 배열 및 학습 속도를 전달하여 호출해야합니다. 역전 학습의 예는 Example1.c를 참조하십시오.
Genann의 주요 설계 목표는 모든 네트워크 가중치를 연속 메모리 블록에 저장하는 것이 었습니다. 이를 통해 Hill Climbing, 유전자 알고리즘, 시뮬레이션 된 어닐링 등과 같은 직접 검색 숫자 최적화 Algorthims를 사용하여 네트워크 가중치를 훈련시키는 것이 쉽고 효율적입니다. 이러한 방법은 ANN의 가중치를 직접 검색하여 사용할 수 있습니다. 모든 genann Struct에는 멤버 int total_weights; 그리고 double *weight; . *weight Ann이 사용하는 모든 무게를 포함하는 total_weights 크기의 배열을 가리 킵니다. 임의의 언덕 등반 검색을 사용한 훈련의 예는 example2.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.aure-nets FAQ는 인공 신경망을 소개하기위한 훌륭한 리소스입니다.
더 작은 신경 네트워크 라이브러리가 필요한 경우 우수한 단일 숨겨진 계층 라이브러리 이니문을 확인하십시오.
C에서 더 무겁고 의견이 많은 신경망 라이브러리를 찾고 있다면 FANN 라이브러리를 추천합니다. 또 다른 좋은 도서관은 Peter Van Rossum의 가벼운 신경망으로, 이름에도 불구하고 Genann보다 더 많은 기능이 있습니다.