734
技術社區[雲棲]
TensorFlow教程之進階指南 3.4 TensorBoard: 圖表可視化
本文檔為TensorFlow參考文檔,本轉載已得到TensorFlow中文社區授權。
TensorFlow 圖表計算強大而又複雜,圖表可視化在理解和調試時顯得非常有幫助。 下麵是一個運作時的可式化例子。
"一個TensorFlow圖表的可視化") 一個TensorFlow圖表的可視化。
為了顯示自己的圖表,需將 TensorBoard 指向此工作的日誌目錄並運行,點擊圖表頂部窗格的標簽頁,然後在左上角的菜單中選擇合適的運行。想要深入學習關於如何運行 TensorBoard 以及如何保證所有必要信息被記錄下來,請查看 Summaries 和 TensorBoard.
名稱域(Name scoping)和節點(Node)
典型的 TensorFlow 可以有數以千計的節點,如此多而難以一下全部看到,甚至無法使用標準圖表工具來展示。為簡單起見,我們為變量名劃定範圍,並且可視化把該信息用於在圖表中的節點上定義一個層級。默認情況下, 隻有頂層節點會顯示。下麵這個例子使用tf.name_scope
在hidden
命名域下定義了三個操作:
import tensorflow as tf
with tf.name_scope('hidden') as scope:
a = tf.constant(5, name='alpha')
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
b = tf.Variable(tf.zeros([1]), name='biases')
結果是得到了下麵三個操作名:
- hidden/alpha
- hidden/weights
- hidden/biases
默認地,三個操作名會折疊為一個節點並標注為hidden
。其額外細節並沒有丟失,你可以雙擊,或點擊右上方橙色的+
來展開節點,然後就會看到三個子節點alpha
,weights
和biases
了。
這有一個生動的例子,例中有一個更複雜的節點,節點處於其初始和展開狀態。
![]() |
![]() |
頂級名稱域的初始視圖pool_1 ,點擊右上方橙色的+ 按鈕或雙擊節點來展開。 |
展開的pool_1 名稱域視圖,點擊右上方橙色的- 按鈕或雙擊節點來收起此名稱域。 |
通過名稱域把節點分組來得到可讀性高的圖表很關鍵的。如果你在構建一個模型,名稱域就可以用來控製可視化結果。你的名稱域越好,可視性就越好。
上麵的圖像例子說明了可視化的另一方麵, TensorFlow 圖表有兩種連接關係:數據依賴和控製依賴。數據依賴顯示兩個操作之間的tensor流程,用實心箭頭指示,而控製依賴用點線表示。在已展開的視圖(上麵的右圖)中,除了用點線連接的CheckNumerics
和control_dependency
之外,所有連接都是數據依賴的。
還有一種手段用來簡化布局。大多數 TensorFlow 圖表有一部分節點,這部分節點和其他節點之間有很多連接。比如,許多節點在初始化階段可能會有一個控製依賴,而繪製所有init
節點的邊緣和其依賴可能會創造出一個混亂的視圖。
為了減少混亂,可視化把所有 high-degree 節點分離到右邊的一個從屬區域, 而不會繪製線條來表示他們的邊緣。線條也不用來表示連接了,我們繪製了小節點圖標來指示這些連接關係。分離出從屬節點通常不會把關鍵信息刪除掉,因為這些節點和內構功能是相關的。
![]() |
![]() |
節點conv_1 被連接到save ,注意其右邊save 節點圖標。 |
save has a high degree, 並會作為從屬節點出現,與conv_1 的連接作為一個節點圖標顯示在其左邊。為了繼續減少雜亂,既然save 有很多連接,我們則隻顯示前5個,而把其餘的縮略為... 12 more 。 |
最後一個結構上的簡化法叫做序列折疊(series collapsing)。 序列基序(Sequential motifs)是擁有相同結構並且其名稱結尾的數字不同的節點,它們被折疊進一個單獨的節點塊(stack)中。對長序列網絡來說,序列折疊極大地簡化了視圖,對於已層疊的節點,雙擊會展開序列。
![]() |
![]() |
一個節點序列的折疊視圖。 | 視圖的一小塊, 雙擊後展開。 |
最後,針對易讀性的最後一點要說到的是,可視化為常節點和摘要節點使用了特別的圖標,總結起來有下麵這些節點符號:
符號 | 意義 |
---|---|
![]() |
High-level節點代表一個名稱域,雙擊則展開一個高層節點。 |
![]() |
彼此之間不連接的有限個節點序列。 |
![]() |
彼此之間相連的有限個節點序列。 |
![]() |
一個單獨的操作節點。 |
![]() |
一個常量結點。 |
![]() |
一個摘要節點。 |
![]() |
顯示各操作間的數據流邊。 |
![]() |
顯示各操作間的控製依賴邊。 |
![]() |
引用邊,表示出度操作節點可以使入度tensor發生變化。 |
交互
通過平移和縮放來導航圖表,點擊和拖動用於平移,滾動手勢用於縮放。雙擊一個節點或點擊其+
按鈕來展開代表一組操作的名稱域。右下角有一個小地圖可以在縮放和平移時方便的改變當前視角。
要關閉一個打開的節點,再次雙擊它或點擊它的-
按鈕,你也可以隻點擊一次來選中一個節點,節點的顏色會加深,並且會看到節點的詳情,其連接到的節點會在可視化右上角的詳情卡片顯現。
![]() |
![]() |
詳情卡片展示conv2 名稱域的詳細信息,名稱域中操作節點的輸入和輸出被結合在一起,適用於不顯示屬性的名稱域。 |
詳情卡片展示DecodeRaw 操作節點,除了輸入和輸出,卡片也會展示與當前節點相關的設備和屬性。 |
選擇對於 high-degree 節點的理解也很有幫助,選擇任意節點,則與它的其餘連接相應的節點也會選中,這使得在進行例如查看哪一個節點是否已保存等操作時非常容易。
點擊詳情卡片中的一個節點名稱時會選中該節點,必要的話,視角會自動平移以使該節點可見。
最後,使用圖例上方的顏色菜單,你可以給你的圖表選擇兩個顏色方案。默認的結構視圖下,當兩個 high-level 節點顏色一樣時,其會以相同的彩虹色彩出現,而結構唯一的節點顏色是灰色。還有一個視圖則展示了不同的操作運行於什麼設備之上。名稱域被恰當的根據其中的操作節點的設備片件來著色。
下圖是一張真實圖表的圖解:
![]() |
![]() |
結構視圖:灰色節點的結構是唯一的。橙色的conv1 和conv2 節點有相同的結構, 其他顏色的節點也類似。 |
設備視圖:名稱域根據其中的操作節點的設備片件來著色,在此紫色代表GPU,綠色代表CPU。 |
最後更新:2017-08-22 16:08:53