TensorBoard 是 TensorFlow 自带的一个强大的可视化工具,也是一个 Web 应用程序套件。TensorBoard 目前支持 7 种可视化,即 SCALARS、IMAGES、AUDIO、GRAPHS、DISTRIBUTIONS、HISTOGRAMS 和 EMBEDDINGS。这 7 种可视化的主要功能如下。
● SCALARS:展示训练过程中的准确率、损失值、权重/偏置的变化情况。
● IMAGES:展示训练过程中记录的图像。
● AUDIO:展示训练过程中记录的音频。
● GRAPHS:展示模型的数据流图,以及训练在各个设备上消耗的内存和时间。
● DISTRIBUTIONS:展示训练过程中记录的数据的分布图。
● HISTOGRAMS:展示训练过程中记录的数据的柱状图。
● EMBEDDINGS:展示词向量(如 Word2vec)后的投影分布。
这里,我们运行手写数字识别的入门例子,如下:
python tensorflow-1.1.0/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py
然后,打开 TensorBoard 面板:
tensorboard ––logdir=/tmp/mnist/logs/mnist_with_summaries
这时,输出:
Starting TensorBoard 39 on port 6006
(You can navigate to http://192.168.0.101:6006)
我们就可以在浏览器中打开 http://192.168.0.101:6006,查看面板的各项功能。
TensorBoard
scalars:标量显示
tf.summary.scalar
histograms:变量显示
tf.summary.histogram
images:展示训练过程中记录的图像
tf.summary.image
graphs:计算图显示
tf.summary.FileWritter(path,sess.graph)
distribution:变量分布
tf.summary.distribution
embeddings:变量embeddings
加载ckpt文件,但是变量也要保存
audio:展示训练过程中记录的音频
tf.summary.audio
text:展示文本输入类型为Tensor
tf.summary.text
使用案例:
#coding:utf-8
#######softmax
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
######prepare data
mnist = input_data.read_data_sets('MNIST_data/',one_hot = True);
#######create the graph
x = tf.placeholder(tf.float32,shape = [None,784],name = 'x');
y_ = tf.placeholder(tf.float32,shape = [None,10],name = 'y_');
W = tf.Variable(tf.zeros([784,10]));
b = tf.Variable(tf.zeros([10]),name = 'input_bias');
y = tf.nn.softmax(tf.matmul(x,W) + b)
tf.summary.histogram('y',y);
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
tf.summary.scalar('loss_function', cross_entropy)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float32"))
tf.summary.scalar('accuracy', accuracy)
merged_summary_op = tf.summary.merge_all()
#Cannot evaluate tensor using `eval()`: No default session is registered.
#Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
#set sess as default
sess = tf.InteractiveSession();
init = tf.global_variables_initializer();
sess.run(init);
if tf.gfile.Exists("/tmp/mnist_logs"):
tf.gfile.DeleteRecursively("/tmp/mnist_logs");
summary_writer = tf.summary.FileWriter('/tmp/mnist_logs',sess.graph)
#train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
for i in range(1000):
batch = mnist.train.next_batch(100);
sess.run(train_step,feed_dict={x: batch[0], y_: batch[1]});
summary_str = sess.run(merged_summary_op,feed_dict={x: batch[0], y_: batch[1]});
summary_writer.add_summary(summary_str, i);
if i % 50 == 0:
print "Setp: ", i, "Accuracy: ",sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
print(accuracy.eval(session=sess,feed_dict={x: mnist.test.images, y_: mnist.test.labels}))