
TINN(Tiny Neural Network)は、C99で書かれた200ライン依存性のない無料のニューラルネットワークライブラリです。
手書きの数字を学習する方法に関するデモについては、トレーニングデータを取得します。
wget http://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.data
make; ./test
トレーニングデータは、ゆっくりと迅速に書かれた手書きの数字で構成されています。データセットの各行は、1つの手書きの数字に対応しています。各数字はサイズが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コンパイラが存在する場所を実行します。
シグモイド活性化。
1つの隠されたレイヤー。
Tinnは、C標準ライブラリ以上のものを使用することはありません。
Tinnは、組み込みシステムに最適です。強力なデスクトップでモデルをトレーニングし、マイクロコントローラーにロードし、アナログからデジタルコンバーターを使用してリアルタイムイベントを予測します。
TINNソースコードは常に200行未満になります。 TINNヘッダーの外部関数は、外部TINNのXTネームスペースが立っていることで保護されています。
Tinnは、少しの独創性で簡単にマルチリードできますが、マスターブランチは、組み込みシステムの開発を支援するために単一のスレッドのままです。
Tinnは乱数ジェネレーターをシードしません。自分でそうすることを忘れないでください。
常に入力データをシャッフルしてください。トレーニングのすべての反復の後、再びシャッフルします。
学習率をアニーリングすることにより、トレーニングの正確性を高めます。たとえば、トレーニングの反復ごとに学習率を0.99に掛けます。これは、優れた学習最小値にゼロになります。
ティンはミニマリズムの実践です。
Tinnは、KannやGenannのような完全に機能するニューラルネットワークCライブラリではありません。
https://github.com/attractivechaos/kann
https://github.com/codeplea/genann
Rust: https://github.com/dvdplm/rustinn
TINN NNおよびCTYPESを使用したチュートリアル
200行のコードの小さなニューラルネットワークライブラリ