TensorBoard:可視化學習
數據序列化
TensorBoard 通過讀取 TensorFlow 的事件文件來運行。TensorFlow 的事件文件包括了你會在 TensorFlow 運行中涉及到的主要數據。下面是 TensorBoard 中匯總數據(Summary data)的大體生命周期。
首先,創建你想匯總數據的 TensorFlow 圖,然後再選擇你想在哪個節點進行匯總(summary)操作。
比如,假設你正在訓練一個卷積神經網絡,用於識別 MNISt 標簽。你可能希望記錄學習速度(learning rate)的如何變化,以及目標函數如何變化。通過向節點附加scalar_summary操作來分別輸出學習速度和期望誤差。然後你可以給每個 scalary_summary 分配一個有意義的 標簽
‘learning rate‘
和 ‘loss function‘
。
或者你還希望顯示一個特殊層中激活的分布,或者梯度權重的分布。可以通過分別附加 histogram_summary 運算來收集權重變量和梯度輸出。
所有可用的 summary 操作詳細信息,可以查看summary_operation文檔。
在TensorFlow中,所有的操作只有當你執行,或者另一個操作依賴於它的輸出時才會運行。我們剛才創建的這些節點(summary nodes)都圍繞著你的圖像:沒有任何操作依賴於它們的結果。因此,為了生成匯總信息,我們需要運行所有這些節點。這樣的手動工作是很乏味的,因此可以使用tf.merge_all_summaries來將他們合並為一個操作。
然後你可以執行合並命令,它會依據特點步驟將所有數據生成一個序列化的Summary
protobuf對象。最後,為了將匯總數據寫入磁盤,需要將匯總的protobuf對象傳遞給tf.train.Summarywriter。
SummaryWriter
的構造函數中包含了參數 logdir。這個 logdir 非常重要,所有事件都會寫到它所指的目錄下。此外,SummaryWriter
中還包含了一個可選擇的參數 GraphDef
。如果輸入了該參數,那麽 TensorBoard 也會顯示你的圖像。
現在已經修改了你的圖,也有了 SummaryWriter
,現在就可以運行你的神經網絡了!如果你願意的話,你可以每一步執行一次合並匯總,這樣你會得到一大堆訓練數據。這很有可能超過了你想要的數據量。你也可以每一百步執行一次合並匯總。
1. Tensorboard介紹
1.1 Tensorboard的數據形式
Tensorboard可以記錄與展示以下數據形式:
(1)標量Scalars
(2)圖片Images
(3)音頻Audio
(4)計算圖Graph
(5)數據分布Distribution
(6)直方圖Histograms
(7)嵌入向量Embeddings
1.2 Tensorboard的可視化過程
(1)首先肯定是先建立一個graph,你想從這個graph中獲取某些數據的信息
(2)確定要在graph中的哪些節點放置summary operations以記錄信息
使用tf.summary.scalar記錄標量
使用tf.summary.histogram記錄數據的直方圖
使用tf.summary.distribution記錄數據的分布圖
使用tf.summary.image記錄圖像數據
(3)operations並不會去真的執行計算,除非你告訴他們需要去run,或者它被其他的需要run的operation所依賴。而我們上一步創建的這些summary operations其實並不被其他節點依賴,因此,我們需要特地去運行所有的summary節點。但是呢,一份程序下來可能有超多這樣的summary 節點,要手動一個一個去啟動自然是及其繁瑣的,因此我們可以使用tf.summary.merge_all去將所有summary節點合並成一個節點,只要運行這個節點,就能產生所有我們之前設置的summary data。
(4)使用tf.summary.FileWriter將運行後輸出的數據都保存到本地磁盤中
(5)運行整個程序,並在命令行輸入運行tensorboard的指令,之後打開web端可查看可視化的結果
使用tensorboard --logdir=來進行展示
TensorBoard:可視化學習