この記事の目的はとにかく検索すると1.x系列の情報がまずヒットするので手の届くところに最小限の2.x系列で動くサンプルを置いておく事にある。
import tensorflow as tf a = tf.constant(10.1, dtype=tf.float32, name="a") b = tf.constant(20.2, dtype=tf.float32, name="b") c = tf.Variable(30.3, dtype=tf.float32, name="c") d = tf.Variable(40.4, dtype=tf.float32, name="d") # @tf.functionを付けると関数のような形で計算グラフを書ける @tf.function def f(): divop = tf.divide(a,b,name="a-div-b") addop = tf.math.add(divop,c,name="div-add-c") d.assign(addop,name="d-assign-add") # ここでrun f() tf.print(d)
import tensorflow as tf a = tf.constant(10.1, dtype=tf.float32, name="a") b = tf.constant(20.2, dtype=tf.float32, name="b") c = tf.Variable(30.3, dtype=tf.float32, name="c") d = tf.Variable(40.4, dtype=tf.float32, name="d") # @tf.functionを使わない場合。 divop = tf.divide(a,b,name="a-div-b") addop = tf.math.add(divop,c,name="div-add-c") d.assign(addop,name="d-assign-add") tf.print(d)
@tf.functionで書かないTensorBoard用出力の方法がどうしてもわからなかったのでとりあえず使ったもの。
この例ではグラフをカレントディレクトリの./output/に出力する
import tensorflow as tf import os
logdir = './output' writer = tf.summary.create_file_writer(logdir)
################################### a = tf.constant(10.1, dtype=tf.float32, name="a") b = tf.constant(20.2, dtype=tf.float32, name="b") c = tf.Variable(30.3, dtype=tf.float32, name="c") d = tf.Variable(40.4, dtype=tf.float32, name="d") @tf.function def f(): divop = tf.divide(a,b,name="a-div-b") addop = tf.math.add(divop,c,name="div-add-c") d.assign(addop,name="d-assign-add") ###################################
with writer.as_default(): tf.summary.graph(f.get_concrete_function().graph) writer.close()
以下のコマンドでtensorBoardを起動し、ブラウザでhttp://localhost:6006/ を開く。
なぜかconstantの名前が消えてx,yになる上にVariableは表示すらされない。散々調べたが表示する方法が見つからなかった。
計算グラフの表示に関してはtf.summary.trace_on(graph=True,profiler=False) でもできる。ちなみにprofiler=Trueにしたら私の環境ではエラーが出たので試せていない。
import tensorflow as tf import os logdir = './output' writer = tf.summary.create_file_writer(logdir)
tf.summary.trace_on(graph=True,profiler=False)
################################### a = tf.constant(0.01, dtype=tf.float32, name="a") s = tf.Variable(0.0, dtype=tf.float32, name="s") v = tf.Variable(0.0, dtype=tf.float32, name="v") @tf.function def f(): s.assign_add(a) v.assign(tf.sin(s)) ################################### f() # 一度は計算グラフを走らせないと出力できない with writer.as_default():
tf.summary.trace_export("summary", step=0, profiler_outdir="./output")
tf.summary.trace_off()
writer.close()
tensorflowはニューラルネットワークを組むために作られた計算グラフ作成ツールであり(という理解をしている)、同じ計算グラフを何度もrunさせて重みを調整していく事を想定しているので、繰り返した場合の値の変化をtensorBoardで確認してみる。
import tensorflow as tf import os logdir = './output' writer = tf.summary.create_file_writer(logdir) ################################### a = tf.constant(0.01, dtype=tf.float32, name="a") s = tf.Variable(0.0, dtype=tf.float32, name="s") v = tf.Variable(0.0, dtype=tf.float32, name="v") @tf.function def f(): s.assign_add(a) v.assign(tf.sin(s)) ################################### with writer.as_default(): for STEP in range(1000): # 1000 回繰り返し f() # 計算グラフ実行 tf.summary.scalar("s",s,step=STEP) # scalarを出力するときは、何回目のループなのかを表すstepを指定しなければいけない tf.summary.scalar("v",v,step=STEP) writer.flush() writer.close()