第一階段-入門詳細圖文講解tensorflow1.4 -(十)TensorBoard: Graph Visualization

graph在調試,理解tensorflow程序有很大幫助。直觀,看下面這張圖
這裏寫圖片描述

看不懂不礙事,本blog就是引導大家看懂tensorflow的graph.

怎麼運行graph請看上篇blog。

看幾個關鍵的概念

一,Name scoping and nodes(命名空間和節點)

name scoping:是爲了簡化graph的顯示。將圖表中的節點上定義一個層級。
nodes:每一個圖標,就是一個節點。
例如:

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,weights,biases。
hidden/alpha
hidden/weights
hidden/biases
使用這種方式操作節點。

看個圖的例子。
這裏寫圖片描述
多個節點隱藏
這裏寫圖片描述
pool_1被展開

記住一條:The better your name scopes, the better your visualization.
越好的命名空間,越好的展示圖形。
其實這個概念很好理解。

1,還要考慮另外一方面
tensorflow有兩種鏈接方式
第一種:data dependencies( 數據依賴)使用solid arrows(實心箭頭)表示兩個張量直接的操作。
第二種:control dependencies(控制依賴)使用 dotted lines(點線(箭頭))。
觀察上圖只有CheckNumerics和control_dependency使用點線鏈接。
2,還有一方面可以簡化圖形
在節點初始化方面,會存在很多控制依賴。減少clutter(複雜),我們使用右邊區域繪製這些節點(high-degree 節點)。
這裏寫圖片描述

save節點:是一個high-degree 節點。是一個從屬節點。被放在conv_1的右邊。使用… 12 more簡略顯示。
這裏寫圖片描述

3,第三方面的簡化圖形series collapsing
擁有相同結構並且其名稱結尾的數字不同的節點,會摺疊成一個節點塊(stack)
這裏寫圖片描述

這裏寫圖片描述
上圖是展開stack的圖形

列舉一下節點摘要
這裏寫圖片描述

                             
英文名稱 意義
Name scope High-level節點代表一個名稱域,雙擊則展開一個高層節點
Sequence of unconnected nodes stack節點
Sequence of connected nodes stack節點
Operation node 獨立的操作節點
Constant node 常量節點
Summary node 摘要節點
Data flow edge 實心箭頭,表示兩個張量數據依賴
Control dependency edge 點線箭頭,表示兩個節點控制依賴
Reference edge 引用雙向箭頭,表示相互影響彼此的tensor

二,interaction(交互)
右下角的方框視圖:可以平移,縮放,拖動,自動平移到節點位置。
右上角的卡片詳情:包括節點輸入,輸出,參數。如下圖:
這裏寫圖片描述
展示conv2名稱域
這裏寫圖片描述
詳情卡DecodeRaw操作節點,輸入,輸出,相關的設備和屬性。

說說配色。
1,結構唯一的節點顏色是灰色。
2,兩個 high-level 節點顏色一樣
3,設備找色,紫色代表GPU,綠色代表CPU。

這裏寫圖片描述

這裏寫圖片描述

三,Tensor shape information(張量形狀信息)

當序列化的GraphDef包含張量形狀時,圖形可視化器標記具有張量維度的邊緣,邊緣厚度反映總張量大小。 要在GraphDef中包含張量形狀,在序列化圖形時將實際圖形對象(如sess.graph)傳遞給FileWriter。 下面的圖片顯示了具有張量形狀信息的CIFAR-10模型:
這裏寫圖片描述

四,Runtime statistics(運行期間的統計量)

爲運行收集運行時元數據通常是非常有用的,例如總內存使用量,總計算時間和節點的張量形狀。 下面的代碼示例是簡單的MNIST教程的修改的訓練和測試部分的一個片段,其中我們記錄了摘要和運行時統計信息。 有關如何記錄摘要的詳細信息,請參閱摘要教程。 完整的源代碼在這裏。

  # Train the model, and also write summaries.
  # Every 10th step, measure test-set accuracy, and write test summaries
  # All other steps, run train_step on training data, & add training summaries

  def feed_dict(train):
    """Make a TensorFlow feed_dict: maps data onto Tensor placeholders."""
    if train or FLAGS.fake_data:
      xs, ys = mnist.train.next_batch(100, fake_data=FLAGS.fake_data)
      k = FLAGS.dropout
    else:
      xs, ys = mnist.test.images, mnist.test.labels
      k = 1.0
    return {x: xs, y_: ys, keep_prob: k}

  for i in range(FLAGS.max_steps):
    if i % 10 == 0:  # Record summaries and test-set accuracy
      summary, acc = sess.run([merged, accuracy], feed_dict=feed_dict(False))
      test_writer.add_summary(summary, i)
      print('Accuracy at step %s: %s' % (i, acc))
    else:  # Record train set summaries, and train
      if i % 100 == 99:  # Record execution stats
        run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
        run_metadata = tf.RunMetadata()
        summary, _ = sess.run([merged, train_step],
                              feed_dict=feed_dict(True),
                              options=run_options,
                              run_metadata=run_metadata)
        train_writer.add_run_metadata(run_metadata, 'step%d' % i)
        train_writer.add_summary(summary, i)
        print('Adding run metadata for', i)
      else:  # Record a summary
        summary, _ = sess.run([merged, train_step], feed_dict=feed_dict(True))
        train_writer.add_summary(summary, i)

此代碼將從步驟99開始每100步發出運行時統計信息。

當啓動tensorboard並轉到圖表選項卡時,您現在將在“會話運行”下看到與添加運行元數據的步驟相對應的選項。 選擇其中一個運行將顯示在該步驟的網絡快照,淡出未使用的節點。 在左側的控件中,您可以通過總內存或總計算時間對節點着色。 此外,單擊節點將顯示確切的總內存,計算時間和張量輸出大小。

這裏寫圖片描述

本blog結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章