1. 程式人生 > >tensorflow學習筆記(二十一):tensorflow視覺化

tensorflow學習筆記(二十一):tensorflow視覺化

tensorflow的視覺化是使用summarytensorboard合作完成的.

基本用法

首先明確一點,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)

    :tensor,必須4維,形狀[batch_size, height, width, channels],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中寫資料,並清空物件快取

注意

  1. 如果使用writer.add_summary(summary,global_step)時沒有傳global_step引數,會使scarlar_summary變成一條直線。

  2. 只要是在計算圖上的Summary op,都會被merge_all捕捉到, 不需要考慮變數生命週期問題!

  3. 如果執行一次,disk上沒有儲存Summary資料的話,可以嘗試下file_writer.flush()

小技巧

如果想要生成的summary有層次的話,記得在summary外面加一個name_scope

with tf.name_scope("summary_gradients"):
    tf.summary.histgram("name", gradients)

這樣,tensorboard在顯示的時候,就會有一個sumary_gradients一級目錄。

tensorboard中distribution圖的意義