學(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.reibang.com/p/28f02bb59fe5
也許可以找到你想要的