1. 程式人生 > >tensorflow學習之tensorboard視覺化

tensorflow學習之tensorboard視覺化

tensorboard

功能

視覺化的好幫手

  • Event: 展示訓練過程中的統計資料(最值,均值等)變化情況
  • Image: 展示訓練過程中記錄的影象
  • Audio: 展示訓練過程中記錄的音訊
  • Histogram: 展示訓練過程中記錄的資料的分佈圖

原理

  • 在執行過程中,記錄結構化的資料
  • 執行一個本地伺服器,監聽6006埠
  • 請求時,分析記錄的資料,繪製
1.Histogram: 展示訓練過程中記錄的資料的分佈圖

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~