
Tinn (Tiny Neural Network)은 C99로 작성된 200 라인 의존성 무료 신경망 라이브러리입니다.
손으로 작성된 숫자를 배우는 방법에 대한 데모의 경우 교육 데이터를 얻으십시오.
wget http://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.data
make; ./test
훈련 데이터는 천천히 그리고 빠르게 작성된 손으로 작성된 숫자로 구성됩니다. 데이터 세트의 각 라인은 하나의 필기 숫자에 해당합니다. 각 숫자는 16x16 픽셀이며 신경망에 256 개의 입력을 제공합니다.
줄 10 자리가 끝날 때 손으로 작성된 숫자를 나타냅니다.
0: 1 0 0 0 0 0 0 0 0 0
1: 0 1 0 0 0 0 0 0 0 0
2: 0 0 1 0 0 0 0 0 0 0
3: 0 0 0 1 0 0 0 0 0 0
4: 0 0 0 0 1 0 0 0 0 0
...
9: 0 0 0 0 0 0 0 0 0 1
이것은 신경망에 10 개의 출력을 제공합니다. 테스트 프로그램은 각 숫자의 정확도를 출력합니다. 올바른 숫자의 경우 99% 이상의 정확도가 예상되고 다른 숫자의 경우 0.1% 미만입니다.
휴대용 - C99 또는 C ++ 98 컴파일러가있는 곳에서 실행됩니다.
Sigmoidal 활성화.
하나의 숨겨진 층.
Tinn은 C 표준 라이브러리보다 더 많이 사용하지 않습니다.
Tinn은 임베디드 시스템에 적합합니다. 강력한 데스크탑에서 모델을 훈련시키고 마이크로 컨트롤러에로드하고 아날로그에서 디지털 변환기를 사용하여 실시간 이벤트를 예측하십시오.
TINN 소스 코드는 항상 200 줄 미만입니다. Tinn 헤더에서 외부인 함수는 XT 의 네임 스페이스로 보호됩니다.
Tinn은 약간의 독창성으로 다중 스레드를 쉽게 할 수 있지만 마스터 브랜치는 내장 시스템의 개발을 돕기 위해 단일 스레드로 유지됩니다.
Tinn은 랜덤 숫자 생성기를 시드하지 않습니다. 그렇게하는 것을 잊지 마십시오.
항상 입력 데이터를 셔플하십시오. 훈련 반복마다 다시 셔플하십시오.
학습 속도를 어닐링하여 더 큰 훈련 정확도를 얻으십시오. 예를 들어, 학습 속도에 각 훈련 반복마다 0.99를 곱하십시오. 이것은 좋은 학습 미니 마에서 제로가 될 것입니다.
Tinn은 미니멀리즘의 관행입니다.
Tinn은 Kann 또는 Genann과 같은 완전히 특징된 신경망 C 라이브러리가 아닙니다.
https://github.com/attractivechaos/kann
https://github.com/codeplea/genann
Rust: https://github.com/dvdplm/rustinn
Tinn NN 및 CTypes를 사용한 튜토리얼
200 줄의 코드의 작은 신경망 라이브러리