tensorflow筆記(三)之 tensorboard的使用


tensorflow筆記(三)之 tensorboard的使用

版權聲明:本文為博主原創文章,轉載請指明轉載地址

http://www.cnblogs.com/fydeblog/p/7429344.html

前言

這篇博客將介紹tensorflow當中一個非常有用的可視化工具tensorboard的使用,它將對我們分析訓練效果,理解訓練框架和優化算法有很大的幫助

還記得我的第一篇tensorflow博客上的的例子嗎?這篇博客會以第一篇tensorflow博客的tensorboard圖為例進行展開。

我會把這篇博客的相關代碼(代碼也會貼在博客上,可以直接copy生成py文件用)和notebook放在文后的百度雲鏈接上,歡迎下載!

1. 實踐1--矩陣相乘

相應的代碼

 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)

具體運行過程如下(中間的警告請忽略,我把上面的代碼命名為1.py運行的)

可以看到最后一行出現了鏈接,復制那個鏈接,推薦用google瀏覽器打開(火狐我試過也行),也可以直接打開鏈接http://localhost:6006,這樣更方便!

如果出現下圖,則證明打開成功

2. 實踐2---線性擬合(一)

上面那一個是小試牛刀,比較簡單,沒有任何訓練過程,下面將第一篇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部分

具體東西還請自己展開看看,不難理解

2. 實踐2---線性擬合(二)

我們在對上面的代碼進行再修改修改,試試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

 

 

 

 

 

 

 

 

 

打賞

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2021 CODEPRJ.COM