tensorboard基礎使用


github上的tensorboard項目:https://github.com/tensorflow/tensorboard/blob/master/README.md

目錄

  • 基礎介紹
  • 基本使用
  • 幾種圖
  • 實例源碼

一、基本介紹

tensorboard:一個網頁應用,可以方便觀察TensorFlow的運行過程和網絡結構等(過程可視化)

工作流程

  • Summary Ops:從TensorFlow獲取數據

Ops是指tf.matmul、tf.nn.relu等,也就是在TensorFlow圖中的操作

執行過程中的張量包含序列化的原始緩存,它會被寫到磁盤並傳給TensorBoard。然后需要執行summary op,來恢復這些結果,實現對TensorBoard中的數據可視化

summary ops包括:tf.summary.scalar, tf.summary.image, tf.summary.audio, tf.summary.text, tf.summary.histogram

  • tags:給數據一個名字

當進行summary op時,也可以給一個tag。這個tag是該op記錄的數據的名字,作為一種標識

  • Event Files和logDir:如何加載數據

summary.FileWriters從TensorFlow把summary 數據寫到磁盤中特定的目錄,也就是logDir。數據是以追加的方式寫入,文件名中有"tfevents"。TensorBoard從一個完整的目錄中讀取數據,並組織成一次TensorFlow執行過程

說明

  • 為什么不是從一個獨立文件讀取?

如果你用superviosr.py來跑模型,當TensorFlow崩潰,superviso將從一個checkpoint重新開始跑。因為重新開始,就會產生一個新的event 文件,然后TensorBoard就可以把這些不同的event文件組織成一個連續的歷史

  • 執行:比較模型的不同執行

比如對某個超參數做了調整,想要比較該超參數不同值的執行效果。希望可視化的時候,可以同時展示這兩個效果

實現方法:給TensorBoard傳一個參數logdir,它將遞歸查找,每次遇到一個子目錄,就會把它當成一個新的執行。

例:下面有run1和run2兩個結果

/some/path/mnist_experiments/   

  /some/path/mnist_experiments/run1/     

    /some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name     

    /some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name   

  /some/path/mnist_experiments/run2/     

    /some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name

/tensorboard --logdir /some/path/mnist_experiments

二、基本操作

  1. 定一個writer(log位置),用來寫summary結果train_writer = tf.summary.FileWriter("./resource/logdir", sess.graph)
  2. 對要統計的變量使用summary操作:比如               tf.summary.scalar("accuarcy_train", accuracy_train)  對精確度的統計,第一個參數是名字,第二個參數是變量名
  3. 把所有summary操作merge起來:                           merged = tf.summary.merge_all()
  4. 執行過程中fetch merged獲得想要的變量值:        summary, _ = sess.run([merged, train_step], feed_dict={x: batch_xs, y_: batch_ys})
  5. 把第i次迭代的結果summary添加到train_writer:   train_writer.add_summary(summary, i)
  6. 關閉寫                                                                       train_writer.close()
  7. 啟動tensorboard

    • windows:進入{path}/Anaconda/Scripts,執行 ./tensorboard.exe --logdir={path}/resource/logdir/
    • ubuntu:進入{path}/Anaconda/envs/tensorflow/bin,執行 ./tensorboard --logdir={path}/resource/logdir/

   根據提示,訪問網頁即可結果

三、幾種圖

Scalar Dashboard: tf.summary.scalar

將標量值隨時間時間變化進行可視化,如losss或學習率


Histogram Dashboard: tf.summary.histogram

張量隨時間變化的分布情況。每個圖表是數據的臨時切片,每個切片是特定一步的張量的柱狀圖。越早的時間步結果越靠后

overlay-step                                                                                                     offset-step

 

Distribution Dashboard: tf.summary.histogram

tf.summary.histogram的另一種展示方式。每一行代表一個值隨時間步的變化情況。最下面是最小的值,向上值不斷增大。每一列代表一個時間步中值的取值范圍

Image Dashboard:tf.summary.image

展示png圖像,每一行對應不同的tag,每一列是一個執行。tf.summary.image("images", tf.reshape(input_images, [100, 28, 28, 1]))

Audio Dashboard:tf.summary.audio(沒用過)

嵌入可播放的音頻容器。每行對應不同的tag,每列是一次運行。總是嵌入最新的一次結果

Graph Explorer

對TensorFlow模型的可視化

Embedding Projector

展示高維度的數據。projector是從模型的checkpoint文件讀取數據,也可以用其他metadata配置,比如詞匯表或雪碧圖

Text Dashboar(沒用過)

四、實例源碼

 1 def tensorboard():
 2     # None表示此張量的第一個維度可以是任何長度的
 3     x = tf.placeholder("float", [None, 784])
 4     y_ = tf.placeholder("float", [None, 10])  # 標簽,正確結果
 5 
 6     # 初始化兩個參數
 7     W = tf.Variable(tf.zeros([784, 10]))
 8     b = tf.Variable(tf.zeros([10]))
 9     m = [1,2,3,4,5,6]
10     tf.summary.histogram("xx", b)
11     # softmax函數
12     y = tf.nn.softmax(tf.matmul(x, W) + b)  # 執行結果
13 
14     # 交叉熵,成本函數
15     # tf.reduce_sum 計算張量的所有元素的總和
16     cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
17 
18     # 梯度下降法來優化成本函數
19     # 下行代碼往計算圖上添加一個新操作,其中包括計算梯度,計算每個參數的步長變化,並且計算出新的參數值
20     train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
21 
22     init = tf.initialize_all_variables()
23     mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
24 
25     prediction_train = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
26     accuracy_train = tf.reduce_mean(tf.cast(prediction_train, "float"))
27     tf.summary.scalar("accuarcy_train", accuracy_train)
28 
29     # 顯示圖像
30     batch_xs, batch_ys = mnist.train.next_batch(100)
31     tf.summary.image('images', tf.reshape(batch_xs, [100, 28, 28, 1]))
32 
33     # 用於tensorboard
34     merged = tf.summary.merge_all()
35 
36     with tf.Session() as sess:
37         sess.run(init)
38         train_writer = tf.summary.FileWriter("./resource/mnist_logs", sess.graph)
39 
40         # 循環遍歷1000次訓練模型
41         for i in range(1000):
42             # 每一步迭代加載100個訓練樣本,然后執行一次train_step,並通過feed_dict將x 和 y張量占位符用訓練訓練數據替代
43             summary, _ = sess.run([merged, train_step], feed_dict={x: batch_xs, y_: batch_ys})
44 
45             if i % 10 == 0:
46                 train_writer.add_summary(summary, i)
47                 for index, d in enumerate(m):
48                     m[index] -= 0.1
49             batch_xs, batch_ys = mnist.train.next_batch(100)
50         train_writer.close()
51 
52         correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
53         accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
54         print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
View Code


免責聲明!

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



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