tensorflow學習之tensorboard視覺化
阿新 • • 發佈:2019-02-06
tensorboard
功能
視覺化的好幫手
- Event: 展示訓練過程中的統計資料(最值,均值等)變化情況
- Image: 展示訓練過程中記錄的影象
- Audio: 展示訓練過程中記錄的音訊
- Histogram: 展示訓練過程中記錄的資料的分佈圖
原理
- 在執行過程中,記錄結構化的資料
- 執行一個本地伺服器,監聽6006埠
- 請求時,分析記錄的資料,繪製
with tf.name_scope('W'):
W = tf.Variable(tf.zeros([784, 10]) , name = 'W')
在tensorflow程式中的變數或者常量加上name=‘xxx’,with tf.name_scope('xxx'):是為了讓它下面的包含在一個大的框裡,這樣在模型複雜的時候會看起來更清晰。
然後,我們需要把graph寫到檔案裡面,通過tensorboard來呼叫顯示
writer = tf.summary.FileWriter('logs' , sess.graph)
需要注意的是,這是新版本的寫法,舊版本是tf.train.SummaryWriter,如果用的tensorflow 1.0版本,那麼用舊的方法會報錯
執行程式,會在logs資料夾中儲存此次的events。
然後將shell定位到當前資料夾中執行:
tensorboard --logdir = logs
會出現下面的資訊
以前我們是複製這個網址在瀏覽器開啟,但是我發現這個方式行不通了,不知道是我方法的問題,還是瀏覽器的問題,所以我們用另一種方式。
開啟你的瀏覽器,輸入localhost:6006,回車。這時tensorboard就在你的瀏覽器中啟動了
2.histograms顯示,scalars顯示
在需要檢視的變數下面加上:
#histograms
tf.summary.histogram('W' , W)
#scalars
tf.summary.scalar('loss' , cross_entropy)
然後,我們需要將這些即時資料合併到一個操作(op)中:
summary_op = tf.summary.merge_all()
最後,在每次迭代時都要執行summary_op,並把最新的即時資料寫入事件檔案中:
for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) summary_str = sess.run(summary_op , feed_dict={x:batch_xs , y_:batch_ys}) writer.add_summary(summary_str , i) train_step.run({x: batch_xs, y_: batch_ys})
執行程式,生成新的events檔案在logs中,然後同樣執行:
tensorboard --logdir=logs
這裡有一點是要注意的就是,我的tensorboard是pip安裝的,如果你的不是,那麼tensorboard的啟動方式變為
python tensorflow/tensorboard/tensorboard.py --logdir=path
並在瀏覽器中輸出localhost:6006開啟tensorboard檢視:
最後貼上完整的程式碼(softmax分類mnist資料集):
"""A very simple MNIST classifier.
See extensive documentation at
http://tensorflow.org/tutorials/mnist/beginners/index.md
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
# Import data
#from tensorflow.examples.tutorials.mnist import input_data
import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("Mnist_data/", one_hot=True)
sess = tf.InteractiveSession()
# Create the model
x = tf.placeholder(tf.float32, [None, 784] , name = 'input_x')
W = tf.Variable(tf.zeros([784, 10]) , name = 'W')
tf.summary.histogram('W' , W)
b = tf.Variable(tf.zeros([10]) , name = 'b')
tf.summary.histogram('b' , b)
y = tf.nn.softmax(tf.matmul(x, W) + b , name = 'y_out')
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10] , name = 'input_y')
with tf.name_scope('loss'):
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
tf.summary.scalar('loss' , cross_entropy)
summary_op = tf.summary.merge_all()
writer = tf.summary.FileWriter('logs' , sess.graph)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# Train
tf.initialize_all_variables().run()
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
summary_str = sess.run(summary_op , feed_dict={x:batch_xs , y_:batch_ys})
writer.add_summary(summary_str , i)
train_step.run({x: batch_xs, y_: batch_ys})
# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))
OK~