TensorFlow-6-TensorBoard 可視化學(xué)習(xí)

學(xué)習(xí)資料:
https://www.tensorflow.org/get_started/summaries_and_tensorboard

中文翻譯:
http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/summaries_and_tensorboard.html

今天學(xué)的內(nèi)容是 TensorBoard
它的作用就是可以把復(fù)雜的神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程給可視化,可以更好地理解 調(diào)試 優(yōu)化程序。

在之前的幾節(jié),我們都只是建立了模型,例如這個代碼:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py

這一節(jié)我們我們可以把想看的東西顯示出來,如 accuracy,cross entropy,bias 和 weights 等等。

先來看效果:

如下圖,就可以在 Tensorboard 的 scalars 下看到 accuracy,cross entropy,dropout,layer1 和 layer2 的 bias 和 weights 的趨勢


主要用到的了下面四個方法
其他可以看 Summary Operations:
https://www.tensorflow.org/api_guides/python/summary

  • tf.summary.scalar
  • tf.summary.histogram
  • tf.summary.merge_all
  • tf.summary.FileWriter

1. tf.summary.scalar

當(dāng)你想知道 learning rate 如何變化時,目標(biāo)函數(shù)如何變化時,就可以通過向節(jié)點附加 tf.summary.scalar 操作來分別輸出學(xué)習(xí)速度和期望誤差,可以給每個 scalary_summary 分配一個有意義的標(biāo)簽為 'learning rate' 和 'loss function',執(zhí)行后就可以看到可視化的圖表。

2. tf.summary.histogram

當(dāng)你想看 activations, gradients 或者 weights 的分布時,可以用 tf.summary.histogram 。
如下圖,顯示了每一步的分布,越靠前面就是越新的步數(shù)的結(jié)果。

3. tf.summary.merge_all

在 TensorFlow 中,所有的操作只有當(dāng)你執(zhí)行,或者一個操作依賴于它的輸出時才會運行。為了生成 summaries,我們需要運行所有 summary nodes,所以就用 tf.summary.merge_all 來將它們合并為一個操作,這樣就可以產(chǎn)生所有的 summary data。

4. tf.summary.FileWriter

最后,為了將 summary data 寫入磁盤,需要將 Summary protobuf 對象傳遞給 tf.summary.FileWriter。在這個造函數(shù)中包含了參數(shù) logdir,這個 logdir 很重要,所有事件都會寫到它所指的目錄下。


那么上面的圖是怎么產(chǎn)生的呢?

完整代碼有點長,請前往鏈接:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py

如果是 mac 的話,可以在終端運行上述代碼:

$ python mnist_with_summaries.py

然后就可以看到打印過程:

注意代碼里將 log dir 定義為下面這個地址:

所以在打開 tensorboard 時,輸入相應(yīng)的位置:

$ tensorboard --logdir=/tmp/tensorflow/mnist/logs/mnist_with_summaries

輸入上述命令后,會打印一個 IP 地址,在瀏覽器打開

這樣,就可以看到 bar 上的幾個板塊了:

除上面幾個外,還可以在 graphs 里可以看到 TensorFlow model。
更詳細(xì)的可以查看:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tensorboard


再聊細(xì)一點:

關(guān)于 scalars 的生成
代碼中有這樣幾行:

      with tf.name_scope('weights'):
        weights = weight_variable([input_dim, output_dim])
        variable_summaries(weights)
      with tf.name_scope('biases'):
        biases = bias_variable([output_dim])
        variable_summaries(biases)

在這里對 wights 和 bias 作用了 variable_summaries
variable_summaries 里面有計算 mean,max,min,stddev 的 tf.summary.scalar 操作。

  def variable_summaries(var):
    """Attach a lot of summaries to a Tensor (for TensorBoard visualization)."""
    with tf.name_scope('summaries'):
      mean = tf.reduce_mean(var)
      tf.summary.scalar('mean', mean)
      with tf.name_scope('stddev'):
        stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
      tf.summary.scalar('stddev', stddev)
      tf.summary.scalar('max', tf.reduce_max(var))
      tf.summary.scalar('min', tf.reduce_min(var))
      tf.summary.histogram('histogram', var)

執(zhí)行后,就可以看到下圖:


TensorFlow 系
TensorFlow-5: 用 tf.contrib.learn 來構(gòu)建輸入函數(shù)
TensorFlow-4: tf.contrib.learn 快速入門
TensorFlow-3: 用 feed-forward neural network 識別數(shù)字
TensorFlow-2: 用 CNN 識別數(shù)字
TensorFlow-1: 如何識別數(shù)字


推薦閱讀 歷史技術(shù)博文鏈接匯總
http://www.lxweimin.com/p/28f02bb59fe5
也許可以找到你想要的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容