物知らずPGの覚え書き

「理解したこと」や「こうやって使えた」などのプログラムの覚え書きとなります

【Windows】 MNIST For ML Beginnersの学習経過をTensorBoardで視覚化

はじめに

前回の記事で、なんとかTensorBoardを表示することはできたが、作成したモデルのグラフ(流れ図のようなもの)のみしか表示することが出来なかったので今回は本当に学習経過をTensorBoardで確認していきたいと思います。

ソースコード

使用するプログラムはMNIST For ML Beginnersチュートリアルプログラムをメインプログラムとし、このプログラムにTensorBoard用のプログラムを追加したものが次になります。  


TensorBoard用プログラムの追加ver

実行結果

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回を超えたあたりから精度はそこまで向上していないことがわかります。


f:id:YoiTaka:20161228230958p:plain

GRAPHS

こちらは前回と比べて複雑なグラフになっていることがわかります。 
そして、自分の作成したモデルを確認したい場合はここをまず見ることになると思います。 

f:id:YoiTaka:20161228231645p:plain

DISTRIBUTIONS(分布)

今回、この画面ではbiases,weights,yの分布を表示することができますが、縦長画像になってしまいますので、上二つのみを表示しています。
バイアスbと重みWは0で初期化されているので、x軸の反復回数が0のときはy軸の値は0となっており、その後学習が進みにつれて値が変化していることがわかる。

f:id:YoiTaka:20161228232729p:plain

HISTOGRAMS

こちらはバイアスと重みを度数分布にしたものです。

f:id:YoiTaka:20161228233451p:plain

おわりに

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

/* パンくずリスト*/ /* カテゴリ階層化*/