まんぼう日記

takataka's diary

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マシンの環境整備からやらな.さらにその前にあの仕事とその仕事とこの仕事片付けて….ああ,いつになることやら.