tensorflow學習筆記(二十一):tensorflow視覺化
tensorflow
的視覺化是使用summary
和tensorboard
合作完成的.
基本用法
首先明確一點,summary
也是op
.
輸出網路結構
with tf.Session() as sess:
writer = tf.summary.FileWriter(your_dir, sess.graph)
命令列執行tensorboard --logdir your_dir
,然後瀏覽器輸入127.0.1.1:6006
注:tf1.1.0 版本的tensorboard埠換了(0.0.0.0:6006)
這樣你就可以在tensorboard
中看到你的網路結構圖了
視覺化引數
#ops
loss = ...
tf.summary.scalar("loss", loss)
merged_summary = tf.summary.merge_all()
init = tf.global_variable_initializer()
with tf.Session() as sess:
writer = tf.summary.FileWriter(your_dir, sess.graph)
sess.run(init)
for i in xrange(100):
_,summary = sess.run([train_op,merged_summary], feed_dict)
writer.add_summary(summary, i)
這時,開啟tensorboard
,在EVENTS
可以看到loss
隨著i
的變化了,如果看不到的話,可以在程式碼最後加上writer.flush()
試一下,原因後面說明。
函式介紹
tf.summary.merge_all
: 將之前定義的所有summary op
整合到一起FileWriter
: 建立一個file writer
用來向硬碟寫summary
資料,tf.summary.scalar(summary_tags, Tensor/variable, collections=None)
: 用於標量的summary
tf.summary.image(tag, tensor, max_images=3, collections=None, name=None)
max_images
(最多隻能生成3張圖片的summary
),覺著這個用在卷積中的kernel
視覺化很好用.max_images
確定了生成的圖片是[-max_images: ,height, width, channels],還有一點就是,TensorBord
中看到的image summary
永遠是最後一個global step
的tf.summary.histogram(tag, values, collections=None, name=None)
:values,任意形狀的tensor
,生成直方圖summary
tf.summary.audio(tag, tensor, sample_rate, max_outputs=3, collections=None, name=None)
解釋collections引數:它是一個list
,如果不指定collections, 那麼此summary會被新增到f.GraphKeys.SUMMARIES
中,如果指定了,就會放在的collections
中。
FileWriter
注意:add_summary
僅僅是向FileWriter
物件的快取中存放event data
。而向disk
上寫資料是由FileWrite物件
控制的。下面通過FileWriter
的建構函式來介紹這一點!!!
tf.summary.FileWriter.__init__(logdir, graph=None, max_queue=10, flush_secs=120, graph_def=None)
Creates a FileWriter and an event file.
# max_queue: 在向disk寫資料之前,最大能夠快取event的個數
# flush_secs: 每多少秒像disk中寫資料,並清空物件快取
注意
如果使用
writer.add_summary(summary,global_step)
時沒有傳global_step
引數,會使scarlar_summary
變成一條直線。只要是在計算圖上的
Summary op
,都會被merge_all
捕捉到, 不需要考慮變數生命週期問題!- 如果執行一次,
disk
上沒有儲存Summary
資料的話,可以嘗試下file_writer.flush()
小技巧
如果想要生成的summary有層次的話,記得在summary
外面加一個name_scope
with tf.name_scope("summary_gradients"):
tf.summary.histgram("name", gradients)
這樣,tensorboard
在顯示的時候,就會有一個sumary_gradients
一級目錄。