2016年2月1日月曜日

MNIST上位版の場合

鉄は熱いうちに打て!さっそくTensorFlowのMNIST上位版を触ってみた。まだ感覚が残っているので、今回のは短時間で簡易版と同じ実装に至ることができた。その後問題が発生したが...

実装について

評価関数が細かくなっているが実装方法自体はほぼ同等なので省略。

  print sess.run(tf.argmax(y_conv, 1), feed_dict = {x: images, keep_prob: 1.0})

feed_dictの引数が一つ増えている点が異なるくらい。

変更点

前回のものは答えだけを表示させたが、以下の一文を加えることで、機械学習の結果の詳細が得られることが分かった。

  print sess.run(y_conv, feed_dict = {x: images, keep_prob: 1.0})

前回よく分からずに流し読みしたすぎゃーんメモ TensorFlowでのMNIST学習結果を、実際に手書きして試すAdd Starを読み返したら判明した。

[[  2.50205858e-06   5.92452241e-04   7.84925942e-04   3.16733262e-04
    3.76264034e-05   1.76606735e-03   6.70433510e-04   6.46211265e-05
    9.94571865e-01   1.19276694e-03]]

こんな感じで返ってくる。

また、以下のようにy_convをargmaxで評価すると与えた画像の数字(上のリストの中でもっとも大きな値の番号)が返ってくる仕掛けであることが理解できた。前回のものはこれのみだった。

  print sess.run(tf.argmax(y_conv, 1), feed_dict = {x: images, keep_prob: 1.0})

評価

正解率が向上したという体感はある。大きく書いたり、端に書いたり、少し傾けてみても、簡易版と比較すれば飛躍的に向上していると思われる。備え付けテストのスコアは99.2パーセントほど。

その他

時間がかかるようなので放置していたら強制終了しており学習結果をロストしていた。苦肉の策としてステップごとに学習を保存するように書き換えて再挑戦した。再び強制終了したが学習結果は残せた。

眺めていたら学習には問題なく、テスト時にメモリ不足になっているようなので、2GB振ってテストのみやり直したがやはり強制終了。4GBを割り当てたところスワップを侵食したがパスできた。8GBしかないのでギリギリだったかも。

うちの環境では一回の学習に2時間もかかるのでこの類の失敗は辛い。メモリ増やすとかGPU処理を試すとか、本題ではない問題が生まれてしもた。