前回やった配列
可視化してみたいと思います。
[3, 4, 5]
の2乗した値の平均値を算出するデータフローグラフを可視化してみたいと思います。
可視化するに当たってTensorBoardというツールを使用します。
Tensorflowをインストールすると使えます。
Tensorflowをインストールすると使えます。
基本的な使い方は
$ tensorboard --logdir=<ログディレクトリのパス>
として実行し、ブラウザで
可視化されたものが見られます。
http://0.0.0.0:6006
にアクセスすると可視化されたものが見られます。
可視化する為にコード修正
まずは修正前のコードです。
# coding: UTF-8
import tensorflow as tf
array = tf.constant([3,4,5])
square = tf.square(array)
reduce = tf.reduce_mean(square)
sess = tf.Session()
ret = sess.run(reduce)
print(ret) # => 16
このコードを可視化する為にちょこっと修正します。
# coding: UTF-8
import tensorflow as tf
array = tf.constant([3,4,5])
square = tf.square(array)
reduce = tf.reduce_mean(square)
sess = tf.Session()
ret = sess.run(reduce)
# 以下の行を追加
tf.train.SummaryWriter('report', sess.graph)
print(ret) # => 16
tf.train.SummaryWriter
クラスを作成する行を追加のしています。上では第一引数でイベントファイルを出力するディレクトリ名を、
第二引数でセッションのグラフを渡しています。
今回は単純にグラフを表示させるだけです。
TensorBoardで確認
修正したコードを実行すると
report
ディレクトリが作られているかと思います。--logdir
にreportディレクトリのパスを指定してTensorBoardを起動してみます。
↓ブラウザでアクセスし
GRAPH
のタグを表示させた結果です。
それっぽいのが表示されています。
丸が定数のノードで、楕円が計算処理を行うノードです。
丸が定数のノードで、楕円が計算処理を行うノードです。
次に各ノードをクリックして詳細を見てみます。
まずは
まずは
Const
つまりは配列の[3,4,5]
です。クリックすると
右上に詳細が表示されています。
Attributes
にデータ型と値が確認できます。
次は
Square
をクリックしてみます。二乗の計算処理を行うノードです。
Inputが先ほどの
Const
でOutputがRank
とMean
となっています。Mean
は最終的な平均値を求める計算処理を行うノードというのは想像できるんですが、 他のRank
とrange
は、、?
調べてみると、
の引数を与えることができるようです。
tf.reduce_mean
は引数としてreduction_indices
とkeep_dims
の引数を与えることができるようです。
例)
>>> import tensorflow as tf
>>> array = tf.constant([[3.,4.],[5.,6.],[7.,8.]])
>>> reduce = tf.reduce_mean(array)
>>> reduce0 = tf.reduce_mean(array, 0)
>>> reduce1 = tf.reduce_mean(array, 1)
>>> sess = tf.Session()
>>> ret = sess.run(reduce)
>>> ret0 = sess.run(reduce0)
>>> ret1 = sess.run(reduce1)
>>> print(ret)
5.5
>>> print(ret0)
[ 5. 6.]
>>> print(ret1)
[ 3.5 5.5 7.5]
tf.reduce_mean
の第二引数で渡しているreduction_indices
の値が何も指定しない場合は、
(3 + 4 + 5 + 6 + 7 + 8) / 6 = 5.5
となります。
0の場合、(3, 5, 7), (4, 6, 8)の平均値を求めます。
(3 + 5 + 7) / 3 = 5
, (4 + 6 + 8) / 3 = 6
1の場合、(3, 4)、(5, 6), (7, 8)の平均値を求めます。
(3 + 4) / 2 = 3.5
, (5 + 6) / 2 = 5.5
, (7 + 8) / 2 = 7.5
どういった平均を求めるか設定してるようです。
今回のサンプルでは
設定していない為、
として計算されています。
reduction_indices
に値を設定していない為、
[9,16,25](square)
が(9 + 16 + 25) / 3 = 16.66...
として計算されています。
Rank
はtf.rank
という次元数を求めるもので、range
はtf.range
というその名の通り範囲を求めるものです。
reduction_indices
を指定しなかった場合のみ表示されるので、tf.rank
とtf.range
の結果を内部で使っているのではないか・・・と思います。
具体的にここで使ってる!!というのを見つけたかったのですが今回はここまで。
0 件のコメント:
コメントを投稿