thorikawaさんの追体験をすると宣言して、

http://d.hatena.ne.jp/thorikawa/20090908/p1
出来たんだけど
腹減りすぎて、発表せずに退散してしまいました。
(っていうか、人前で発表するの苦手です。)

実装経験少ない人向けに、書いてみました。

環境:

上の環境は、あらかじめインストール済みです。

MNISTの手書き文字から学習データ準備の後追い


OpenCV処理は順調

VC環境設定

あと、C:\opencv\binのdllファイルを実行ファイルと同じ所にコピペしないと動かない

さて、次は学習プログラムをRで作成開始するが難航した。

はじめは、オリジナル画像で学習を行った。
パラメータも同じにした。

画像の枚数は以下のとおり
読み方はmnist_test数字.jpg xCount:水平方向の枚数 yCount:垂直方向の枚数

mnist_train0.jpg xCount = 31 yCount = 32
mnist_train1.jpg xCount = 34 yCount = 34
mnist_train2.jpg xCount = 32 yCount = 33
mnist_train3.jpg xCount = 32 yCount = 32
mnist_train4.jpg xCount = 31 yCount = 32
mnist_train5.jpg xCount = 30 yCount = 30
mnist_train6.jpg xCount = 31 yCount = 31
mnist_train7.jpg xCount = 32 yCount = 33
mnist_train8.jpg xCount = 31 yCount = 32
mnist_train9.jpg xCount = 32 yCount = 32

1時間以上経過しても終わんない。
仕方ないので
Rで書かれた学習関数(learn.r)のパラメータ数を減らした。
ソースは thorikawaさんblog見てください。

-----------------------------------------
#number of hidden unit
省略
save(w1, w2, logsumexp, softmax, neuro_func, file="C:\\src\\readybinary_img\\release\\nnet_image.rdata")まで
-----------------------------------------

ただし、
MAX_EPOCH 1000を100

#sample 1000 training data
sample_index = sample(1:nrow(digit_data), 1000)
の1000を100に減らした。

Rのコンソール上で
source(c:\\パス\\learn.r)って入力してリターンすれば学習開始される。

それでも終わらないので

mnist_train0.jpg xCount = 7 yCount = 8
mnist_train1.jpg xCount = 8 yCount = 8
mnist_train2.jpg xCount = 8 yCount = 8
mnist_train3.jpg xCount = 8 yCount = 8
mnist_train4.jpg xCount = 7 yCount = 8
mnist_train5.jpg xCount = 7 yCount = 7
mnist_train6.jpg xCount = 7 yCount = 7
mnist_train7.jpg xCount = 8 yCount = 8
mnist_train8.jpg xCount = 7 yCount = 8
mnist_train9.jpg xCount = 8 yCount = 8

にしてようやく1時間以内で学習終える 13:30ごろ

nnet_image.rdataをエディタで開くと、バイナリっぽい。

テストプログラムの作成着手
ソースは thorikawaさんblog見てください。
テストプログラムってところ。
これもエディタで記述して、拡張子rで保存
Rコンソール上でsource(c:\\パス\\test.r)って入力してリターン

時間かかるのが予想されたので
テストデータは、少なめに設定

【test data detail】
mnist_test0.jpg xCount = 3 yCount = 4
mnist_test1.jpg xCount = 4 yCount = 4
mnist_test2.jpg xCount = 4 yCount = 4
mnist_test3.jpg xCount = 4 yCount = 4
mnist_test4.jpg xCount = 3 yCount = 4
mnist_test5.jpg xCount = 3 yCount = 3
mnist_test6.jpg xCount = 3 yCount = 3
mnist_test7.jpg xCount = 4 yCount = 4
mnist_test8.jpg xCount = 3 yCount = 4
mnist_test9.jpg xCount = 4 yCount = 4

にした


■結果 MNIST画像幅/8の場合
correct case= 107 , wrong case = 26
correct rate = 80%

じゃあ少し多めにしたら、結構時間かかった

【test data detail】
mnist_test0.jpg xCount = 7 yCount = 8
mnist_test1.jpg xCount = 8 yCount = 8
mnist_test2.jpg xCount = 8 yCount = 8
mnist_test3.jpg xCount = 8 yCount = 8
mnist_test4.jpg xCount = 7 yCount = 8
mnist_test5.jpg xCount = 7 yCount = 7
mnist_test6.jpg xCount = 7 yCount = 7
mnist_test7.jpg xCount = 8 yCount = 8
mnist_test8.jpg xCount = 7 yCount = 8
mnist_test9.jpg xCount = 8 yCount = 8

■結果 MNIST画像幅/4の場合

correct case= 3579 , wrong case = 581
correct rate = 86%

正解率は少し上がった。

わかったこと
画素を特徴にした学習は、時間がかかりすぎる
だから、認識系のアプリは実用に耐えるように
画素以外の特徴(次元圧縮)で学習させている(・・・のかな?)

Rの文法とかOpenCVの関数とかよくわからなくても
とりあえず半日あれば、動かせる。
動きを見てみて、教科書のみの勉強会よりは
体感できるので、なんとなくわかるような気がした。(あくまで気がしたですが。。。)
まだ、数式とコードとの関係がぼやけている状況です。
しぐまがふぉーに脳内変換できるレベル