【Windows】 MNIST For ML Beginnersの学習経過をTensorBoardで視覚化
はじめに
前回の記事で、なんとかTensorBoardを表示することはできたが、作成したモデルのグラフ(流れ図のようなもの)のみしか表示することが出来なかったので今回は本当に学習経過をTensorBoardで確認していきたいと思います。
ソースコード
使用するプログラムはMNIST For ML Beginnersのチュートリアルプログラムをメインプログラムとし、このプログラムにTensorBoard用のプログラムを追加したものが次になります。
実行結果
pythonプログラムを実行すると以下のような出力になります。
また、コマンドプロンプトの出力とは別にlogディレクトリにevents.out.tfevents.・・・が生成されます。
C:\Users\Documents\Python Scripts>mnist_for_ml_beginners.py I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties: name: GeForce GTX 1060 6GB major: 6 minor: 1 memoryClockRate (GHz) 1.8095 pciBusID 0000:01:00.0 Total memory: 6.00GiB Free memory: 5.00GiB I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0 I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0: Y I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1060 6GB, pci b us id: 0000:01:00.0) 0.9122
TensorBoardの起動
logの書き出しが終了したならば、そのlogデータを用いて学習経過を視覚化していきます
コマンドプロンプトで以下を実行します。
C:\Users\Documents\Python Scriptsl>tensorboard --logdir=log
そうすると次のような出力がされます。
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally Starting TensorBoard b'39' on port 6006 (You can navigate to http://192.168.99.1:6006)
そして、エラーがないのであればhttp://192.168.99.1:6006にアクセスします。
WARNING対策
何回かlogを生成し、TensorBoardを起動してみると以下のようなメッセージが表示された
WARNING:tensorflow:Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events. Overwriting the graph with the newest event. WARNING:tensorflow:Found more than one metagraph event per run. Overwriting the metagraph with the newest event.
これは以前作成したログファイルをすべて削除するか別のディレクトリに移動すれば表示されないようになりました。
TensorBoard 画面説明
TensorBoardのタブには計7個の項目があるのですが、今回はそのうちの4つを使用しています。他の3つの項目については全くわからない状態なので今後勉強していきたいと思います
SCALARS
上のグラフはtrainingデータでの精度を表し、下のグラフは損失関数である交差エントロピー誤差を示します。
このグラフを見ると反復回数が1000回としていますが、200回を超えたあたりから精度はそこまで向上していないことがわかります。
GRAPHS
こちらは前回と比べて複雑なグラフになっていることがわかります。
そして、自分の作成したモデルを確認したい場合はここをまず見ることになると思います。
DISTRIBUTIONS(分布)
今回、この画面ではbiases,weights,yの分布を表示することができますが、縦長画像になってしまいますので、上二つのみを表示しています。
バイアスbと重みWは0で初期化されているので、x軸の反復回数が0のときはy軸の値は0となっており、その後学習が進みにつれて値が変化していることがわかる。
HISTOGRAMS
こちらはバイアスと重みを度数分布にしたものです。
おわりに
TensorBoardを用いてチュートリアルであるmnist_for_ml_beginnersの学習経過を視覚化することができました
視覚化したことでわかったことは重みの値はそこまで変化せずバイアスの値が大きく変化するということがわかりました。(他のプログラムではわからないです)
この記事を書く際に、他の方の記事を参考にプログラムの実装を行っていたのですが、2016/11/30以降ではメソッド名が変化しているものもあったので、昔の記事を参考にプログラムを打つ方はその辺りを気を付けたほうが良いと思います。
また、TensorBoardの画面も
EVENTS ➔ SCALARS
HISTOGRAMS ➔ DISTRIBUTIONS
に変更され、HISTOGRAMSが三次元のデータになっています。
次回は、CNNを用いたexpertsの学習経過をTensorBoardで確認したいと思います。
参考にさせていただいたサイト
・
TensorFlow : How To : TensorBoard: 学習を視覚化する – TensorFlow
・
[TF]Tensorboardを使って学習結果をVisualizationしてみた - Qiita
・
TensorBoardで処理を可視化する | mwSoft