前回やった配列
可視化してみたいと思います。
[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 件のコメント:
コメントを投稿