まんぼう日記

takataka's diary

TensorFlow で MLP と CNN (2)

TensorFlow で MLP と CNN - まんぼう日記 のつづきです.

 

tf.train.Saver 使って学習後のネットワークパラメータを save & restore できるようにしようと,以前のプログラムをいじってたんですが,どうもうまくいきません.どこを間違えてんのか,3回に1回だけ正しく動くという妙なことに….直す気力をなくして,Saver 使うのやめることにしました.ネットワークパラメータを NumPy の array として取り出して  numpy.savez_compressed するように方針変更です.ついでに,昨日 TensorFlow 使えるようにしたばかりのGPGPUマシン( cf. GPGPUマシンの更新(4) TensorFlow を使えるようにする - まんぼう日記 )で GPU 使ってみる実験もしました.

 

 

主なポイントはこんなん:

  • これまでは全結合層に tf.layers.dense 使ってたが,これだと重みやバイアスが隠蔽されてるので,それらを自分で変数として定義し,tf.matmul やら tf.nn.reluやら使って計算するようにした.
  • 同様に,tf.layers.conv2dtf.layers.max_pooling2dのかわりに tf.nn.conv2dtf.nn.max_pool使うようにした.
  • 重みやバイアスを求める計算グラフを定義して,得られた値を返す関数 getWeight を定義した.
  • 重みやバイアスの値の辞書を引数として渡すと tf.assignしてくれる関数 setWeight を定義した.
  • コマンドライン引数で GPU デバイスを指定できるようにした.

というわけで,こんなんできました:  https://gist.github.com/takatakamanbou/3ff46118fc4e798ca8c43dafd67efc68

 

GPGPUマシンで実行して時間測ってみました.まずは CPU で

In [3]: %time %run ex170817mlpL.py
#     ceL accL       ceV accV
0 0 2.3555366156 6.496 2.35637270432 6.45
500 63808 0.092499746201 97.128 0.107396060586 96.74
   :
9000 1150656 6.13513418444e-05 100.0 0.0866725751117 98.51
9500 1214608 5.54295608489e-05 100.0 0.0867583423773 98.49
CPU times: user 25min 33s, sys: 45 s, total: 26min 18s
Wall time: 3min 2s
In [5]: %time %run ex170817cnnL.py
#     ceL accL       ceV accV
0 0 2.30353644867 10.39 2.30287331848 10.94
500 63712 0.0529104816699 98.304 0.0640928661048 98.08
   :
9000 1150368 0.000801627419269 99.974 0.0712650403303 98.89
9500 1214368 0.00163371050193 99.956 0.0699203371461 98.9
CPU times: user 27min 26s, sys: 5min 1s, total: 32min 28s
Wall time: 4min 14s

つづいてGPUで.GeForce GTX 1080 使いました.

In [4]: %time %run ex170817mlpL.py /gpu:0     # GeForce GTX 1080
  :
9500 1215040 5.42799999355e-05 100.0 0.0863653538564 98.43
CPU times: user 1min 10s, sys: 6.76 s, total: 1min 17s
Wall time: 47.8 s
In [6]: %time %run ex170817cnnL.py /gpu:0     # GeForce GTX 1080
  :
9500 1214944 0.00201407230972 99.932 0.0669418959407 98.97
CPU times: user 1min 42s, sys: 9.94 s, total: 1min 52s
Wall time: 1min 8s

 

Theano や Caffe で同じ条件でやった実験結果がないのでなんとも言えませんが,計算速度はまあこんなもんでしょうか.