0README_ja.txt / NNによる数字文字認識
ニューラルネットワークによる数字文字認識
Naruaki TOMA
tnal@ie.u-ryukyu.ac.jp
http://www.eva.ie.u-ryukyu.ac.jp/~tnal/
Thu May 18 17:48:53 JST 2009
<目次>
<本文>
0. これは何?
タイトルのままですが,ニューラルネットワークを用いた文字認識用の
プログラムです.代表的なモデルである入力・中間・出力の3階層で構成
される階層型ニューラルネットを用い,学習には逐次型バックプロパゲー
ションを用いています.これで通じない人は
ニューラルネット, 階層型, バックプロパゲーション
(artificial) neural network, hierarchical, back propagation
あたりのキーワードで検索エンジンを利用すると良いでしょう.ついで
に,src java class 等のキーワードを付加すると,公開されているソー
スを簡単に探し出すことが出来ます.シンプルな階層型で十分であるなら
http://www.eva.ie.u-ryukyu.ac.jp/~tnal/Job/NN/basic/
にある一連のソースも役に立つかもしれません.
1. 何のために作ったの?
学生実験用に,インタラクティブに
・指定した試行回数分重みを学習し
・学習事例を用いた学習度合いを確認,または
・未知事例を用いた柔軟さの確認
といった事を出来るように作りました.シェルスクリプトで学習ステップ
数毎の誤差推移図を作成するようにしてたりしますが,情報工学科の学生
実験という意味では復習のために書いてみたぐらいの意味合いです.
2. 開発環境
OS: Mac OS X バージョン 10.5.6
gcc: gcc version 4.0.1 (Apple Inc. build 5490)
make: GNU Make 3.81
gnuplot: gnuplot 3.8k patchlevel 3+0.10
bash: GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0)
動作確認は Mac OS X でしかやっていませんが,ANSI標準ライブラリしか
使ってないので,環境に依存せずコンパイルできると思います.多分.
bash や gnuplot はシェルスクリプトを使わないのであれば必要ありません.
3. ファイル
./0README_ja.txt このファイル.
./sample-output
./sample-output/result.data 図作成用データ(ステップ毎のエラー).
./sample-output/result.learned 学習事例に対する学習度合いのチェック結果.
./sample-output/result.png ステップ毎のエラー推移図.
./sample-output/result.txt run_nn.bash 利用時の出力例.
./src
./src/.gnuplot 作図用スクリプト(run_bash.bashで自動生成).
./src/data データ保存用ディレクトリ.
./src/data/eva1-1.txt learn?.txt を学習用事例として用います.
eva* はファイル名は何でも構いません.
認識精度を確認用に未知事例として作ったものです.
./src/data/learn0.txt 教師用事例データは正答+入力パターンで構成され,
./src/data/learn1.txt 正答は半角英数字1文字
./src/data/learn2.txt 入力パターンは parameter.h で指定した
./src/data/learn3.txt サイズで指定する必要があります.
./src/ex_bp_o.c 3階層型NN+BPのサンプル.このプログラムでは未使用.
./src/Makefile
./src/num.c メインプログラム.
./src/parameter.h 各種パラメータ等.
./src/problem_list.txt 学習用事例リスト.教師データ
./src/run_nn.bash 作図用スクリプト.
./src/set_problem.c 主に事例読み込み部.
./src/sigmoid.c シグモイド関数.
4. コンパイル方法
4.1 数字文字認識の場合
数字文字認識用のデータが data/ に置いてあります。
これを用いて実験する場合は、
特に変更する事無しに、src ディレクトリにて make コマンドを実行。
prompt> make
4.2 平仮名文字認識の場合
平仮名文字認識用のデータが data.ja/ に置いてあります。
これを用いて実験する場合は、
(1) parameter.h 内の "problem_list.txt" を "problem_list.ja.txt" に変更。
(2) make コマンドを実行。
4.3 アルファベット文字認識の場合
アルファベット文字認識用のデータが data.en/ に置いてあります。
これを用いて実験する場合は、
(1) parameter.h 内の "problem_list.txt" を "problem_list.en.txt" に変更。
(2) make コマンドを実行。
4.4 漢字文字認識の場合
アルファベット文字認識用のデータが data.kanji/ に置いてあります。
これを用いて実験する場合は、
(1) parameter.h 内の
- "problem_list.txt" を "problem_list.en.txt" に変更。
- SIZE_X を 17 に変更。
- SIZE_Y を 19 に変更。
(2) make コマンドを実行。
5. 使い方
prompt> ./run_nn.bash
とすると,学習用事例を読み込み,usage を出力しますので,それに
従ってインタラクティブに動かしてみいて下さい.直接 a.out を実行
することも可能ですが,出力が2回繰り返されますので読み難くなりま
す.同じ出力が2回繰り返されるのは,スクリプト実行時に保存用を出
力しているためです(邪魔ならコメントアウトしてください).
usageは以下のようになっています.
===== USAGE =====
learn: nn> l
check: nn> c
evaluation: nn> e
after that, input filename defined test-pattern
=================
指定した試行回数分,学習させるには「l」.
学習事例に対する学習度合いを確認するには「c」.
未知事例に対する適応度合いを確認するには「e」を入力後,
ファイル名を促すプロンプトが出力されますので,未知事例を
保存したファイル名を入力してください.サンプルとしては data/eva1-1.txt
を用意してあります.
なお,「l」で学習させる際には1000回重みを更新したら一度停止するように
なっています.これが邪魔に感じる場合には src/parameter.h 内の
ITERATIONS を適当な値に変更してください.
6. 教師データ(学習事例)を増やすには?
(手順1) src/data ディレクトリにファイルを追加する形で作成する.
(手順2) src/problem_list.txt ファイルを編集し,追加した事例ファイルを
列挙する.
(手順3) src/parameter.h ファイルを編集し,学習事例数(CTC)を変更する.
(手順4) make し直す.
7. 最後に
質問・ご指摘等は當間(tnal@ie.u-ryukyu.ac.jp)まで.
更新するかどうかは(私に取っての)重要度と気分次第ですが・・・.
個人的利用以外の使用については連絡してもらえるとうれしいかも.
単純にどういう所で使われるのかが興味があるだけで,制約・制限
等を課す意図は全くありません.
X. 考えてはいたけどやらなかったTODO
・Java か cocoa で NN の視覚化.
GUIなプログラミングは嫌いなんです・・
・重みの save/restore.
今回は必要なかったので.
・事例データ作成ツール.
面倒ですが,サンプルなので手動で頑張る方向で.
supported by Naruaki TOMA (tnal@ie.u-ryukyu.ac.jp), last modified: 2013-01-04