鍍金池/ 教程/ 人工智能/ TensorBoard: 圖表可視化 <a class="md-anchor" id="AUTOGENERATED-tensor
BibTex 引用<a class="md-anchor" id="AUTOGENERATED-bibtex-citation"
術(shù)語(yǔ)表
自定義數(shù)據(jù)讀取 <a class="md-anchor" id="AUTOGENERATED-custom-data-reade
使用 GPUs <a class="md-anchor" id="AUTOGENERATED-using-gpus"></a>
Vector Representations of Words <a class="md-anchor" id="AUTOGEN
TensorFlow 個(gè)人學(xué)習(xí)心得
共享變量<a class="md-anchor" id="AUTOGENERATED-sharing-variables"></
應(yīng)用實(shí)例 <a class="md-anchor" id="AUTOGENERATED-example-uses"></a>
其他資源 <a class="md-anchor" id="AUTOGENERATED-additional-resources
偏微分方程 <a class="md-anchor" id="AUTOGENERATED-partial-differentia
TensorBoard:可視化學(xué)習(xí) <a class="md-anchor" id="AUTOGENERATED-tensorb
TensorFlow運(yùn)作方式入門 <a class="md-anchor" id="AUTOGENERATED-tensorfl
常見(jiàn)問(wèn)題 <a class="md-anchor" id="AUTOGENERATED-frequently-asked-que
MNIST機(jī)器學(xué)習(xí)入門 <a class="md-anchor" id="AUTOGENERATED-mnist-for-ml-
曼德布洛特(Mandelbrot)集合 <a class="md-anchor" id="AUTOGENERATED-mande
變量:創(chuàng)建、初始化、保存和加載
TensorBoard: 圖表可視化 <a class="md-anchor" id="AUTOGENERATED-tensor
簡(jiǎn)介 <a class="md-anchor" id="AUTOGENERATED-introduction"></a>
張量的階、形狀、數(shù)據(jù)類型<a class="md-anchor" id="AUTOGENERATED-tensor-ranks-
線程和隊(duì)列 <a class="md-anchor" id="AUTOGENERATED-threading-and-queue
下載與安裝 <a class="md-anchor" id="AUTOGENERATED-download-and-setup"
常見(jiàn)問(wèn)題匯總
綜述
綜述 Overview
TensorFlow 相關(guān)資源
數(shù)據(jù)讀取 <a class="md-anchor" id="AUTOGENERATED-reading-data"></a>
遞歸神經(jīng)網(wǎng)絡(luò) <a class="md-anchor" id="AUTOGENERATED-recurrent-neural-n
深入MNIST <a class="md-anchor" id="AUTOGENERATED-deep-mnist-for-ex
增加一個(gè)新 Op <a class="md-anchor" id="AUTOGENERATED-adding-a-new-op"
卷積神經(jīng)網(wǎng)絡(luò) <a class="md-anchor" id="AUTOGENERATED-convolutional-neur
基本使用 <a class="md-anchor" id="AUTOGENERATED-basic-usage"></a>
MNIST 數(shù)據(jù)下載 <a class="md-anchor" id="AUTOGENERATED-mnist-data-dow

TensorBoard: 圖表可視化 <a class="md-anchor" id="AUTOGENERATED-tensor

TensorFlow 圖表計(jì)算強(qiáng)大而又復(fù)雜,圖表可視化在理解和調(diào)試時(shí)顯得非常有幫助。 下面是一個(gè)運(yùn)作時(shí)的可式化例子。

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/graph_vis_animation.gif" alt="一個(gè)TensorFlow圖表的可視化" /> "一個(gè)TensorFlow圖表的可視化") 一個(gè)TensorFlow圖表的可視化。

為了顯示自己的圖表,需將 TensorBoard 指向此工作的日志目錄并運(yùn)行,點(diǎn)擊圖表頂部窗格的標(biāo)簽頁(yè),然后在左上角的菜單中選擇合適的運(yùn)行。想要深入學(xué)習(xí)關(guān)于如何運(yùn)行 TensorBoard 以及如何保證所有必要信息被記錄下來(lái),請(qǐng)查看 Summaries 和 TensorBoard.

名稱域(Name scoping)和節(jié)點(diǎn)(Node)

典型的 TensorFlow 可以有數(shù)以千計(jì)的節(jié)點(diǎn),如此多而難以一下全部看到,甚至無(wú)法使用標(biāo)準(zhǔn)圖表工具來(lái)展示。為簡(jiǎn)單起見(jiàn),我們?yōu)樽兞棵麆澏ǚ秶?,并且可視化把該信息用于在圖表中的節(jié)點(diǎn)上定義一個(gè)層級(jí)。默認(rèn)情況下, 只有頂層節(jié)點(diǎn)會(huì)顯示。下面這個(gè)例子使用tf.name_scopehidden命名域下定義了三個(gè)操作:

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')

結(jié)果是得到了下面三個(gè)操作名:

  • hidden/alpha
  • hidden/weights
  • hidden/biases

默認(rèn)地,三個(gè)操作名會(huì)折疊為一個(gè)節(jié)點(diǎn)并標(biāo)注為hidden。其額外細(xì)節(jié)并沒(méi)有丟失,你可以雙擊,或點(diǎn)擊右上方橙色的+來(lái)展開(kāi)節(jié)點(diǎn),然后就會(huì)看到三個(gè)子節(jié)點(diǎn)alphaweightsbiases了。

這有一個(gè)生動(dòng)的例子,例中有一個(gè)更復(fù)雜的節(jié)點(diǎn),節(jié)點(diǎn)處于其初始和展開(kāi)狀態(tài)。

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/pool1_collapsed.png" alt="未展開(kāi)的名稱域" title="未展開(kāi)的名稱域"> http://wiki.jikexueyuan.com/project/tensorflow-zh/images/pool1_expanded.png" alt="展開(kāi)的名稱域" title="展開(kāi)的名稱域">
頂級(jí)名稱域的初始視圖pool_1,點(diǎn)擊右上方橙色的+按鈕或雙擊節(jié)點(diǎn)來(lái)展開(kāi)。 展開(kāi)的pool_1名稱域視圖,點(diǎn)擊右上方橙色的-按鈕或雙擊節(jié)點(diǎn)來(lái)收起此名稱域。

通過(guò)名稱域把節(jié)點(diǎn)分組來(lái)得到可讀性高的圖表很關(guān)鍵的。如果你在構(gòu)建一個(gè)模型,名稱域就可以用來(lái)控制可視化結(jié)果。你的名稱域越好,可視性就越好。

上面的圖像例子說(shuō)明了可視化的另一方面, TensorFlow 圖表有兩種連接關(guān)系:數(shù)據(jù)依賴和控制依賴。數(shù)據(jù)依賴顯示兩個(gè)操作之間的tensor流程,用實(shí)心箭頭指示,而控制依賴用點(diǎn)線表示。在已展開(kāi)的視圖(上面的右圖)中,除了用點(diǎn)線連接的CheckNumericscontrol_dependency之外,所有連接都是數(shù)據(jù)依賴的。

還有一種手段用來(lái)簡(jiǎn)化布局。大多數(shù) TensorFlow 圖表有一部分節(jié)點(diǎn),這部分節(jié)點(diǎn)和其他節(jié)點(diǎn)之間有很多連接。比如,許多節(jié)點(diǎn)在初始化階段可能會(huì)有一個(gè)控制依賴,而繪制所有init節(jié)點(diǎn)的邊緣和其依賴可能會(huì)創(chuàng)造出一個(gè)混亂的視圖。

為了減少混亂,可視化把所有 high-degree 節(jié)點(diǎn)分離到右邊的一個(gè)從屬區(qū)域, 而不會(huì)繪制線條來(lái)表示他們的邊緣。線條也不用來(lái)表示連接了,我們繪制了小節(jié)點(diǎn)圖標(biāo)來(lái)指示這些連接關(guān)系。分離出從屬節(jié)點(diǎn)通常不會(huì)把關(guān)鍵信息刪除掉,因?yàn)檫@些節(jié)點(diǎn)和內(nèi)構(gòu)功能是相關(guān)的。

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/conv_1.png" alt="conv_1是主圖表的部分" title="conv_1是主圖表的部分"> http://wiki.jikexueyuan.com/project/tensorflow-zh/images/save.png" alt="save被抽出為從屬節(jié)點(diǎn)" title="save被抽出為從屬節(jié)點(diǎn)">
節(jié)點(diǎn)conv_1被連接到save,注意其右邊save節(jié)點(diǎn)圖標(biāo)。 save has a high degree, 并會(huì)作為從屬節(jié)點(diǎn)出現(xiàn),與conv_1的連接作為一個(gè)節(jié)點(diǎn)圖標(biāo)顯示在其左邊。為了繼續(xù)減少雜亂,既然save有很多連接,我們則只顯示前5個(gè),而把其余的縮略為... 12 more

最后一個(gè)結(jié)構(gòu)上的簡(jiǎn)化法叫做序列折疊(series collapsing)。 序列基序(Sequential motifs)是擁有相同結(jié)構(gòu)并且其名稱結(jié)尾的數(shù)字不同的節(jié)點(diǎn),它們被折疊進(jìn)一個(gè)單獨(dú)的節(jié)點(diǎn)塊(stack)中。對(duì)長(zhǎng)序列網(wǎng)絡(luò)來(lái)說(shuō),序列折疊極大地簡(jiǎn)化了視圖,對(duì)于已層疊的節(jié)點(diǎn),雙擊會(huì)展開(kāi)序列。

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/series.png" alt="節(jié)點(diǎn)序列" title="節(jié)點(diǎn)序列"> http://wiki.jikexueyuan.com/project/tensorflow-zh/images/series_expanded.png" alt="展開(kāi)的節(jié)點(diǎn)序列" title="展開(kāi)的節(jié)點(diǎn)序列">
一個(gè)節(jié)點(diǎn)序列的折疊視圖。 視圖的一小塊, 雙擊后展開(kāi)。

最后,針對(duì)易讀性的最后一點(diǎn)要說(shuō)到的是,可視化為常節(jié)點(diǎn)和摘要節(jié)點(diǎn)使用了特別的圖標(biāo),總結(jié)起來(lái)有下面這些節(jié)點(diǎn)符號(hào):

符號(hào) 意義
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/namespace_node.png" alt="名稱域" title="名稱域" /> High-level節(jié)點(diǎn)代表一個(gè)名稱域,雙擊則展開(kāi)一個(gè)高層節(jié)點(diǎn)。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/horizontal_stack.png" alt="斷線節(jié)點(diǎn)序列" title="斷線節(jié)點(diǎn)序列" /> 彼此之間不連接的有限個(gè)節(jié)點(diǎn)序列。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/vertical_stack.png" alt="相連節(jié)點(diǎn)序列" title="相連節(jié)點(diǎn)序列" /> 彼此之間相連的有限個(gè)節(jié)點(diǎn)序列。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/op_node.png" alt="操作節(jié)點(diǎn)" title="操作節(jié)點(diǎn)" /> 一個(gè)單獨(dú)的操作節(jié)點(diǎn)。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/constant.png" alt="常量節(jié)點(diǎn)" title="常量節(jié)點(diǎn)" /> 一個(gè)常量結(jié)點(diǎn)。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/summary.png" alt="摘要節(jié)點(diǎn)" title="摘要節(jié)點(diǎn)" /> 一個(gè)摘要節(jié)點(diǎn)。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/dataflow_edge.png" alt="數(shù)據(jù)流邊" title="數(shù)據(jù)流邊" /> 顯示各操作間的數(shù)據(jù)流邊。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/control_edge.png" alt="控制依賴邊" title="控制依賴邊" /> 顯示各操作間的控制依賴邊。
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/reference_edge.png" alt="引用邊" title="引用邊" /> 引用邊,表示出度操作節(jié)點(diǎn)可以使入度tensor發(fā)生變化。

交互

通過(guò)平移和縮放來(lái)導(dǎo)航圖表,點(diǎn)擊和拖動(dòng)用于平移,滾動(dòng)手勢(shì)用于縮放。雙擊一個(gè)節(jié)點(diǎn)或點(diǎn)擊其+按鈕來(lái)展開(kāi)代表一組操作的名稱域。右下角有一個(gè)小地圖可以在縮放和平移時(shí)方便的改變當(dāng)前視角。

要關(guān)閉一個(gè)打開(kāi)的節(jié)點(diǎn),再次雙擊它或點(diǎn)擊它的-按鈕,你也可以只點(diǎn)擊一次來(lái)選中一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的顏色會(huì)加深,并且會(huì)看到節(jié)點(diǎn)的詳情,其連接到的節(jié)點(diǎn)會(huì)在可視化右上角的詳情卡片顯現(xiàn)。

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/infocard.png" alt="一個(gè)名稱域的詳情卡片" title="一個(gè)名稱域的詳情卡片"> http://wiki.jikexueyuan.com/project/tensorflow-zh/images/infocard_op.png" alt="操作節(jié)點(diǎn)的詳情卡片" title="操作節(jié)點(diǎn)的詳情卡片">
詳情卡片展示conv2名稱域的詳細(xì)信息,名稱域中操作節(jié)點(diǎn)的輸入和輸出被結(jié)合在一起,適用于不顯示屬性的名稱域。 詳情卡片展示DecodeRaw操作節(jié)點(diǎn),除了輸入和輸出,卡片也會(huì)展示與當(dāng)前節(jié)點(diǎn)相關(guān)的設(shè)備和屬性。

選擇對(duì)于 high-degree 節(jié)點(diǎn)的理解也很有幫助,選擇任意節(jié)點(diǎn),則與它的其余連接相應(yīng)的節(jié)點(diǎn)也會(huì)選中,這使得在進(jìn)行例如查看哪一個(gè)節(jié)點(diǎn)是否已保存等操作時(shí)非常容易。

點(diǎn)擊詳情卡片中的一個(gè)節(jié)點(diǎn)名稱時(shí)會(huì)選中該節(jié)點(diǎn),必要的話,視角會(huì)自動(dòng)平移以使該節(jié)點(diǎn)可見(jiàn)。

最后,使用圖例上方的顏色菜單,你可以給你的圖表選擇兩個(gè)顏色方案。默認(rèn)的結(jié)構(gòu)視圖下,當(dāng)兩個(gè) high-level 節(jié)點(diǎn)顏色一樣時(shí),其會(huì)以相同的彩虹色彩出現(xiàn),而結(jié)構(gòu)唯一的節(jié)點(diǎn)顏色是灰色。還有一個(gè)視圖則展示了不同的操作運(yùn)行于什么設(shè)備之上。名稱域被恰當(dāng)?shù)母鶕?jù)其中的操作節(jié)點(diǎn)的設(shè)備片件來(lái)著色。

下圖是一張真實(shí)圖表的圖解:

http://wiki.jikexueyuan.com/project/tensorflow-zh/images/colorby_structure.png" alt="按結(jié)構(gòu)著色" title="按結(jié)構(gòu)著色"> http://wiki.jikexueyuan.com/project/tensorflow-zh/images/colorby_device.png" alt="按設(shè)備著色" title="按設(shè)備著色">
結(jié)構(gòu)視圖:灰色節(jié)點(diǎn)的結(jié)構(gòu)是唯一的。橙色的conv1conv2節(jié)點(diǎn)有相同的結(jié)構(gòu), 其他顏色的節(jié)點(diǎn)也類似。 設(shè)備視圖:名稱域根據(jù)其中的操作節(jié)點(diǎn)的設(shè)備片件來(lái)著色,在此紫色代表GPU,綠色代表CPU。

原文: TensorBoard: Graph Visualization 翻譯: @Warln 校對(duì): lucky521