TensorFlow で MLP と CNN
Mac に TensorFlow をインストールしてロジスティック回帰させてみた - まんぼう日記 のつづき.ロジスティック回帰のプログラムを改造して隠れ層を追加することからはじめ,TensorFlow の API ドキュメント( https://www.tensorflow.org/api_docs/python/ )を参考にちまちまプログラミング.隠れ層を追加して MLP を作った後,畳み込み層を使って CNN も作りました.
(2017-08-17 追記: TensorFlow で MLP と CNN (2) - まんぼう日記 により新しいプログラムがあります)
前回は入力に重みを掛けてバイアスを加える計算とか自分で書きましたが,今回は
などを使って楽をしました.tf.layers.ほげ
の他に tf.contrib.layers.ほげ
ってのもあって,どっちも使ってみましたが,前者の方が標準っぽかったので,最終的にそっちに統一.後者の方にしかない関数もいくつか使ってますが.
ソースはこちら: 00_CNNbyTensorFlow.md · GitHub
以下,MNIST 使って実験してみた結果を載せときます.
まずはロジスティック回帰.epoch毎の交差エントロピーや誤識別率を出力してます.accTがテストデータに対する誤識別率.
# nncfg: <class 'mlp170415.LogisticRegression'> # nn: <class 'nnlearner170415.NNLearner'> # ceL accL ceV accV ceT accT 0 2.390957 93.36 2.387799 92.89 1 0.303419 8.71 0.293427 8.32 : 10 0.252759 7.06 0.264854 7.32 20 0.240434 6.64 0.269577 7.44 0.277376 7.66 CPU times: user 25.6 s, sys: 6.32 s, total: 31.9 s Wall time: 18 s
そこに隠れ層ひとつ追加.つまり2層のMLP.隠れ層のニューロンはReLUで,ニューロン数は1024です.
# nncfg: <class 'mlp170415.MLP2'> # nn: <class 'nnlearner170415.NNLearner'> # ceL accL ceV accV ceT accT 0 2.331943 90.57 2.335567 90.88 1 0.091150 2.74 0.114948 3.43 : 10 0.001529 0.00 0.066747 1.66 20 0.000611 0.00 0.071750 1.68 0.063062 1.60 CPU times: user 8min 46s, sys: 34.5 s, total: 9min 20s Wall time: 1min 18s
同じ構造の隠れ層をもうひとつ追加.
# nncfg: <class 'mlp170415.MLP3'> # nn: <class 'nnlearner170415.NNLearner'> # ceL accL ceV accV ceT accT 0 2.310501 90.04 2.311282 90.08 1 0.069830 2.16 0.092541 2.87 : 10 0.000602 0.01 0.079922 1.63 20 0.000047 0.00 0.088163 1.54 0.074268 1.55 CPU times: user 19min 27s, sys: 58.5 s, total: 20min 25s Wall time: 2min 26s
最後はCNN.conv-pool-conv-pool-fc-softmax.細かいパラメータはソースを参照して下さい.
# nncfg: <class 'cnn170415.CNN'> # nn: <class 'nnlearner170415.NNLearner'> # ceL accL ceV accV ceT accT 0 2.304340 92.57 2.304393 93.10 1 0.055175 1.58 0.065980 1.69 2 0.031726 0.97 0.056063 1.63 3 0.018410 0.54 0.050434 1.44 4 0.010353 0.30 0.042201 1.13 5 0.009955 0.29 0.053747 1.34 6 0.009532 0.35 0.064481 1.24 7 0.009785 0.33 0.065854 1.41 8 0.016824 0.58 0.076978 1.51 9 0.004220 0.14 0.059005 1.16 10 0.003715 0.14 0.052485 1.14 20 0.000019 0.00 0.065079 0.96 0.040852 0.73 CPU times: user 20min 20s, sys: 4min 58s, total: 25min 19s Wall time: 3min 28s
次の目標は,GPU上で動かすことです.でもその前に,GPGPUマシンの環境整備からやらな.さらにその前にあの仕事とその仕事とこの仕事片付けて….ああ,いつになることやら.