tensorflow筆記(三)之 tensorboard的使用
html
版權聲明:本文爲博主原創文章,轉載請指明轉載地址python
http://www.cnblogs.com/fydeblog/p/7429344.html 算法
這篇博客將介紹tensorflow當中一個很是有用的可視化工具tensorboard的使用,它將對咱們分析訓練效果,理解訓練框架和優化算法有很大的幫助。瀏覽器
還記得個人第一篇tensorflow博客上的的例子嗎?這篇博客會以第一篇tensorflow博客的tensorboard圖爲例進行展開。框架
我會把這篇博客的相關代碼(代碼也會貼在博客上,能夠直接copy生成py文件用)和notebook放在文後的百度雲連接上,歡迎下載!dom
相應的代碼函數
1 import tensorflow as tf 2 3 with tf.name_scope('graph') as scope: 4 matrix1 = tf.constant([[3., 3.]],name ='matrix1') #1 row by 2 column 5 matrix2 = tf.constant([[2.],[2.]],name ='matrix2') # 2 row by 1 column 6 product = tf.matmul(matrix1, matrix2,name='product') 7 8 sess = tf.Session() 9 10 writer = tf.summary.FileWriter("logs/", sess.graph) 11 12 init = tf.global_variables_initializer() 13 14 sess.run(init)
這裏相對於第一篇tensorflow多了一點東西,tf.name_scope函數是做用域名,上述代碼斯即在graph做用域op下,又有三個op(分別是matrix1,matrix2,product),用tf函數內部的name參數命名,這樣會在tensorboard中顯示,具體圖像還請看下面。工具
很重要:運行上面的代碼,查詢當前目錄,就能夠找到一個新生成的文件,已命名爲logs,咱們需在終端上運行tensorboard,生成本地連接,具體看我截圖,固然你也能夠將上面的代碼直接生成一個py文檔在終端運行,也會在終端當前目錄生成一個logs文件,而後運行tensorboard --logdir logs指令,就能夠生成一個連接,複製那個連接,在google瀏覽器(我試過火狐也行)粘貼顯示,對於tensorboard 中顯示的網址打不開的朋友們, 請使用 http://localhost:6006 (若是這個沒有成功,我以前沒有安裝tensorboard,也出現連接,但那個連接點開什麼都沒有,因此還有一種可能就是你沒有安裝tensorboard,使用pip install tensorboard安裝tensorboard,python3用pip3 install tensorboard)oop
具體運行過程以下(中間的警告請忽略,我把上面的代碼命名爲1.py運行的)性能
能夠看到最後一行出現了連接,複製那個連接,推薦用google瀏覽器打開(火狐我試過也行),也能夠直接打開連接http://localhost:6006,這樣更方便!
若是出現下圖,則證實打開成功
上面那一個是小試牛刀,比較簡單,沒有任何訓練過程,下面將第一篇tensorflow筆記中的第二個例子來畫出它的流動圖(哦,對了,之全部說是流動圖,這是因爲tensorflow的名字就是張量在圖形中流動的意思)
代碼以下:(命名文件2.py)
1 import tensorflow as tf 2 import numpy as np 3 4 ## prepare the original data 5 with tf.name_scope('data'): 6 x_data = np.random.rand(100).astype(np.float32) 7 y_data = 0.3*x_data+0.1 8 ##creat parameters 9 with tf.name_scope('parameters'): 10 weight = tf.Variable(tf.random_uniform([1],-1.0,1.0)) 11 bias = tf.Variable(tf.zeros([1])) 12 ##get y_prediction 13 with tf.name_scope('y_prediction'): 14 y_prediction = weight*x_data+bias 15 ##compute the loss 16 with tf.name_scope('loss'): 17 loss = tf.reduce_mean(tf.square(y_data-y_prediction)) 18 ##creat optimizer 19 optimizer = tf.train.GradientDescentOptimizer(0.5) 20 #creat train ,minimize the loss 21 with tf.name_scope('train'): 22 train = optimizer.minimize(loss) 23 #creat init 24 with tf.name_scope('init'): 25 init = tf.global_variables_initializer() 26 ##creat a Session 27 sess = tf.Session() 28 ##initialize 29 writer = tf.summary.FileWriter("logs/", sess.graph) 30 sess.run(init) 31 ## Loop 32 for step in range(101): 33 sess.run(train) 34 if step %10==0 : 35 print step ,'weight:',sess.run(weight),'bias:',sess.run(bias)
運行這個程序會打印一些東西,看過第一篇tensorflow筆記的人應該知道
具體輸出以下:
具體的運行過程以下圖,跟第一個差很少
打開連接後,會出現下圖
這個就是上面代碼的流動圖,先初始化參數,算出預測,計算損失,而後訓練,更新相應的參數。
固然這個圖還能夠進行展開,裏面有更詳細的流動(截圖沒法全面,還請本身運行出看看哦)
Parameters部分
y_prediction部分和init部分
loss部分
還有最後的train部分
具體東西還請本身展開看看,不難理解
咱們在對上面的代碼進行再修改修改,試試tensorboard的其餘功能,例如scalars,distributions,histograms,它們對咱們分析學習算法的性能有很大幫助。
代碼以下:(命名文件3.py)
1 import tensorflow as tf 2 import numpy as np 3 4 ## prepare the original data 5 with tf.name_scope('data'): 6 x_data = np.random.rand(100).astype(np.float32) 7 y_data = 0.3*x_data+0.1 8 ##creat parameters 9 with tf.name_scope('parameters'): 10 with tf.name_scope('weights'): 11 weight = tf.Variable(tf.random_uniform([1],-1.0,1.0)) 12 tf.summary.histogram('weight',weight) 13 with tf.name_scope('biases'): 14 bias = tf.Variable(tf.zeros([1])) 15 tf.summary.histogram('bias',bias) 16 ##get y_prediction 17 with tf.name_scope('y_prediction'): 18 y_prediction = weight*x_data+bias 19 ##compute the loss 20 with tf.name_scope('loss'): 21 loss = tf.reduce_mean(tf.square(y_data-y_prediction)) 22 tf.summary.scalar('loss',loss) 23 ##creat optimizer 24 optimizer = tf.train.GradientDescentOptimizer(0.5) 25 #creat train ,minimize the loss 26 with tf.name_scope('train'): 27 train = optimizer.minimize(loss) 28 #creat init 29 with tf.name_scope('init'): 30 init = tf.global_variables_initializer() 31 ##creat a Session 32 sess = tf.Session() 33 #merged 34 merged = tf.summary.merge_all() 35 ##initialize 36 writer = tf.summary.FileWriter("logs/", sess.graph) 37 sess.run(init) 38 ## Loop 39 for step in range(101): 40 sess.run(train) 41 rs=sess.run(merged) 42 writer.add_summary(rs, step)
閒麻煩,我把打印的去掉了,這裏多了幾個函數,tf.histogram(對應tensorboard中的scalar)和tf.scalar函數(對應tensorboard中的distribution和histogram)是製做變化圖表的,二者差很少,使用方式能夠參考上面代碼,通常是第一項字符命名,第二項就是要記錄的變量了,最後用tf.summary.merge_all對全部訓練圖進行合併打包,最後必須用sess.run一下打包的圖,並添加相應的記錄。
運行過程與上面兩個同樣
下面來看看tensorboard中的訓練圖吧
scalar中的loss訓練圖
distribution中的weight和bias的訓練圖
histogram中的weight和bias的訓練圖
咱們能夠根據訓練圖,對學習狀況進行評估,好比咱們看損失訓練圖,能夠看到如今是一條慢慢減少的曲線,最後的值趨近趨近於0(這裏趨近於0是因爲我選的模型太容易訓練了,偏差能夠逼近0,同時又能很好的表徵系統的模型,在現實狀況,每每都有偏差,趨近於0反而是過擬合),這符合本意,就是要最小化loss,若是loss的曲線最後沒有平滑趨近一個數,則說明訓練的力度還不夠,還有加大次數,若是loss還很大,說明學習算法不太理想,需改變當前的算法,去實現更小的loss,另外兩幅圖與loss相似,最後都是要趨近一個數的,沒有趨近和上下浮動都是有問題的。
結尾
tensorboard的博客結束了,我寫的只是基礎部分,更多東西還請看官方的文檔和教程,但願這篇博客能對你學習tensorboard有幫助!
notebook連接: https://pan.baidu.com/s/1o8lzN1g 密碼: mbv8