您將使用TensorFlow進行的計算 - 如訓練大量的深度神經網絡 - 可能會非常復雜和令人困惑。 為了便于理解,調試和優化TensorFlow程序,我們包含了一套名為TensorBoard的可視化工具。 您可以使用TensorBoard來顯示您的TensorFlow圖形,繪制關于圖形執行的量化指標,并顯示通過它的圖像數據。 當TensorBoard全部配置時,看起來像這樣:
序列化數據
TensorBoard通過讀取TensorFlow事件文件進行操作,TensorFlow事件文件包含運行TensorFlow時所生成的摘要數據。 以下是TensorBoard中摘要數據的一般生命周期。
首先,創建您希望從中收集摘要數據的TensorFlow graph,然后決定使用摘要操作(summary operations)注解哪些節點。
例如,假設您正在訓練用于識別MNIST數字的卷積神經網絡。 您想記錄學習率隨時間的變化,以及目標函數如何變化。 通過將tf.summary.scalar分別附加到輸出learning rate和loss的節點來收集這些信息。 然后,給每個scalar_summary總結一個有意義的標簽,如“learning rate”或“loss function”。
也許你也想看到一個指定層的激活分布,或梯度或權重的分布。 通過將tf.summary.histogram附加到梯度輸出和權重的變量來收集這些數據。
有關所有摘要操作(summary operations)的詳細信息,請查看有關摘要操作(summary operations)的文檔。
在運行之前,TensorFlow中的操作不會執行任何操作,或者依賴于其輸出的操作。 我們剛剛創建的摘要節點是graph之外的:您當前正在運行的所有操作都不依賴于它們。 所以,為了生成摘要,我們需要運行所有這些匯總節點。 手工管理它們會很麻煩,所以使用tf.summary.merge_all將它們組合成一個單獨的操作來生成所有的匯總數據。
然后,您可以運行合并的摘要操作,該操作將在給定的步驟中生成包含所有摘要數據的序列化的Summary?protobuf對象。 最后,為了將這個總結數據寫入磁盤,將總結的protobuf傳遞給tf.summary.FileWriter。
FileWriter在其構造函數中使用了logdir - 這個logdir非常重要,它是所有事件將被寫出的目錄。 另外,FileWriter可以選擇在其構造函數中使用Graph。 如果它接收到一個Graph對象,那么TensorBoard會將您的圖形與張量形狀信息一起可視化。 這將使您更好地理解圖中流動的情況:請參閱張量形狀信息(Tensor shape information)。
現在你已經修改了你的圖形,并有一個FileWriter,你已經準備好開始運行你的網絡! 如果你愿意,你可以每一步都運行合并的摘要操作,并記錄大量的訓練數據。 雖然這可能是比你需要更多的數據。 相反,請考慮每n步運行合并的摘要操作。
下面的代碼示例是對簡單MNIST教程的修改,我們在其中添加了一些summary操作,并且每十步執行一次。 如果你運行這個程序,然后啟動tensorboard --logdir=/tmp/tensorflow/mnist,你將可以看到統計數據,例如訓練過程中權重或準確率的變化。 下面的代碼是摘錄; 完整的源代碼在這里。
(代碼略,格式太亂,看完整代碼吧)
在初始化FileWriters之后,我們必須在我們訓練和測試模型時將sumamries添加到FileWriters。
(代碼略,格式太亂,看完整代碼吧)
您現在已經開始使用TensorBoard將這些數據可視化了。
啟動TensorBoard
要運行TensorBoard,使用下面的命令(或者python -m tensorboard.main)
tensorboard --logdir=path/to/log-directory
其中logdir指向FileWriter序列化其數據的目錄。 如果此logdir目錄包含子目錄,里面是不同的序列化數據,則TensorBoard將可視化所有這些數據。 一旦TensorBoard啟動,瀏覽您的Web瀏覽器到localhost:6006以查看TensorBoard。
在看TensorBoard時,您會看到右上角的導航標簽。 每個選項卡代表一組可以可視化的序列化數據。
有關如何使用圖形選項卡可視化圖形的深入信息,請參閱TensorBoard:圖形可視化。
有關TensorBoard的更多使用信息,請參閱TensorBoard的GitHub。