tensorboard是tensorflow官方提供的可视化工具。可以将模型训练中的数据汇总、显示出来。本文是基于tensorflow1.2版本的。这个版本的tensorboard的界面如图:
tensorboard支持8种可视化,也就是上图中的8个选项卡,它们分别是:
- SCALARS:标量曲线。例如准确率、损失率、权重和偏置等变化。在代码中tf.summary.scalar()定义需要在这个选项卡下展示的标量。
- IMAGES:数据图像。对于图像分类问题,可以将输入或者训练过程中的图片展示出来。在代码中用tf.summary.image()定义需要在这个选项卡中展示的数据(直接绘制成图像展示),默认是绘制3张图片。
- AUDIO:音频数据。还没有做过语音分析的例子,估计同上。
- GRAPHS:tensorflow的数据流图。数据流图的完善性,都需要在程序中详细定义。用with tf.name_scope()或者with tf.name_scope() as scope来定义。
- DISTRIBUTIONS:数据分布图。可以用来显示激活前和激活后数据的分布情况,辅助设计分析。
- HISTOGRAMS:数据柱状图。在代码中用tf.summary.histogram()定义。
- EMBEDDINGS:用于文本分析,展示词向量的投影分布(例如word2vec)
tensorboard通过运行一个本地服务器,监听6006端口,在浏览器发出请求时,分析训练时记录的数据,绘制训练过程中的数据曲线、图像。
tensorboard的代码实现:
首先需要申明数据保存的地址
log_dir = './simple_cnn_log' # log dir to store all data and graph structure
为了在tensorboard中展示节点名称,在设计网络时采用with tf.name_scope() 限定命名空间:
with tf.name_scope('input'):
x = tf.placeholder(tf.float32, [None, 784], name='x')
y_ = tf.placeholder(tf.float32, [None, 10], name='y_')
keep_prob = tf.placeholder(tf.float32,name='kp')
这个在with tf.name_scope('input')
中的所有节点都会被自动命名为“input/XXX”的格式。
定义variable_summaries函数对数据进行简单的统计分析,例如均值、方差、和极值。值得注意的是,这个函数中的输入参数var应该是用tf.Variable定义的权重、偏差。
def variable_summaries(name,var):
with tf.name_scope(name+'_summaries'):
mean = tf.reduce_mean(var)
tf.summary.scalar(name+'_mean', mean)
with tf.name_scope(name+'_stddev'):
stddev = tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
tf.summary.scalar(name+'_stddev', stddev)
tf.summary.scalar(name+'_max',tf.reduce_max(var))
tf.summary.scalar(name+'_min',tf.reduce_min(var))
tf.summary.histogram(name+'_histogram', var)
对于所有用tf.summary定义汇总记录的数据,需要进行汇总,以便程序输出和保存。
merged = tf.summary.merge_all()
#merged = tf.summary.merge([input_summary,acc_summary])
train_writer = tf.summary.FileWriter(log_dir+'/train',sess.graph)
test_writer = tf.summary.FileWriter(log_dir+'/test')
这一步汇总的工作非常重要