tensorboard可视化详细
tensorboard可视化详细
2019-09-06
1.tensorboard可视化的⽤途
⾸要的⽬的是记录tensorflow的Graph,tensorflow的Graph其实就是具象化的算法模型;可以认为tensorflow⽤Graph来替代我们平时⾃⼰写的流程化的模型程序,具体区别就是我们⾃⼰写的程序需要⾃⼰进⾏流程化规范,⽽tensorflow的Graph设计好后,具体执⾏流程由tensorflow的Session控制,不需要我们⼈为去控制流程。图的可视化效果可以参考:
tensorboard还可以记录和查看模型的过程数据,例如迭代过程中的损失值,准确率,过程中的图⽚,学习速率等等过程数据;以前这些数据的可视化之前⼤多是由开发者⾃⼰在模型训练中记录数据然后使⽤matplotlib库图像化。
总的可以认为tensorboard可视化的⽤途:为了更⽅便 TensorFlow 程序的理解、调试与优化,发布了⼀套名为 TensorBoard 的可视化⼯具。您可以⽤ TensorBoard 来展现 TensorFlow 图,绘制图像⽣成的定量指标图以及显⽰附加数据(如其中传递的图像)。
2.tensorboard可视化的实现过程
tensorboard是⼀个⽤来画图的⼯具,但是⾃⼰不⽣产数据,它只是数据的搬运⼯。数据是来⾃于tensorflow模型的训练过程,所以可视化的过程按照时间顺序可以分为2个部分:
(1)使⽤tensorflow训练算法模型,⽣成tesorflow的Graph和过程数据,并保存到磁盘中的Events⽂件中去;(2)使⽤tensorboard读取Graph和这些过程数据,并将它们绘制出来。
2.1 可视化过程图
具体的实现过程⼤致如下图所⽰:
2.2 如何⽣成Events⽂件
(1)创建tensorflow图;
tensorflow系统会⾃动维护⼀个默认的计算图,所以这⾥暂不⽤管;关于计算图管理可以参照。(2)在想要的节点下标注;例如记录标量:
loss = tf.reduce_mean(loss_list)
tf.summary.scalar(\"loss_value\",loss)
(3)将所有的想要的节点信息通过tf.summary.merge_all()打包为⼀个节点,这⾥命名为summary__merge_op,随后创建⼀个写⼊器,为后续的写⼊磁盘创建接⼝;
summary_merge_op = tf.summary.merge_all()
writer = tf.summary.FileWriter(\"filedir\",tf.get_default_graph())
其中“filedir”是保存Events⽂件的路径。
(4)在训练过程中运⾏打包后的节点,并获取序列化的节点信息;
sess = tf.Session()
summary_info = sess.run(summary_merge_op)
(5)将序列化的节点信息写⼊磁盘中的Events⽂件,这个操作通过写⼊器writer实现;
writer.add_summary(summary_info,step)
3.summary中常⽤对象和⽅法的详解
3.1 summary.op
常见的⼏个操作,scalar是⽤来记录标量信息,image⽤来记录图⽚信息,audio⽤来记录声⾳信息,histogram⽤来记录直⽅图,以前两个为例讲解。(1)
summary.scalar( name, tensor,
collections=None family=None,)
name:即你给此节点信息赋予的称呼,str类型,⽐如损失值可以为“loss_value”,准确率可以为“accuracy”等;⽆强制要求;tensor:就是你需要记录的那个节点;⽤scalar记录的只能是标量(⼀个值的实数);
collections:图的集合键值的可选列表,新的求和op被添加到这个集合中,缺省为[GraphKeys.SUMMARIES];family:可选项;设置时⽤作求和标签名称的前缀,这影响着TensorBoard所显⽰的标签名;真正⽤时⼀般使⽤前两个变量即可。
a = tf.Variable(0,tf.int32,name=\"a\")tf.summary.scalar(\"parameter\",a)
(2)
tf.summary.image( name, tensor,
max_outputs=3, collections=None, family=None)
name:同上
tensor:这⾥的tensor必须是⼀个4维的张量,维度分布是[batch_zize, height, width, channels],其中第四维度channels必须是1,3,或4中的⼀个;
max_output:图上显⽰的批次图⽚的最⼤个数;
3.2 summary.merge_all()
作⽤是将所有的summary.op操作打包为⼀个节点,在Session中执⾏⼀次打包后的节点操作即等同于将所有的summary.op执⾏⼀次;merge_all()会主动寻找所有的summary_op操作。此操作必须放在所有的summary.op后⾯。
3.3 summary.FileWriter()
创建⼀个写⼊器,可以通过写⼊器将数据信息写⼊到磁盘的Events⽂件中去,
__init__( logdir,
graph=None,
max_queue=10, flush_secs=120, graph_def=None,
filename_suffix=None, session=None)
logdir:Events⽂件存放路径,⽤str表⽰;graph:计算图对象,⽐如sess.graph;max_queen:int类型;缓存队列的⼤⼩;
flush_secs:周期,int类型;指的是写⼊器将缓存数据写⼊磁盘的周期;graph_def:此值已经弃⽤,不⽤管filename_suffix:session:
平时⼯作中,⼀般仅⽤前两个参数
...create a graph...
# Launch the graph in a session.sess = tf.Session()
# Create a summary writer, add the 'graph' to the event file.writer = tf.summary.FileWriter(, sess.graph)3.4 writer.add_summary()
writer对象有很多中⽅法,这⾥只介绍其中的add_summary⽅法。
add_summary( summary,
global_step=None)
summary:即执⾏记录操作后返回的序列化信息,例如summary_info;
global_step:迭代过程在事件上的标号,如果此参数不赋值,那么所有数据将会在⼀条直线上;
for epoch in range(epochs):
summary_info = sess.run(summary_merge_op) writer.add(summary_info,epoch)
add_summary操作并不会将节点信息⽴马写⼊磁盘,它只是先将节点信息放⼊写⼊器对象的缓存中,最终由写⼊器统⼀写⼊磁盘。
4.启⽤tensorboard
打开终端cmd;找到存放Events⽂件的⽂件夹路径;输⼊tensorboard --logdir=\"./log\"
其中“./log”是我存放⽂件的路径,你需要指定到⾃⼰的路径上去。如果前⾯的都没问题,那么会出现以下的内容:
将途中红圈框主的内容复制下来,然后在浏览器中打开即可:
5.简单的⽰例
import tensorflow as tf
x = tf.compat.v1.Variable(-5.0,\"float\",name=\"x\")y = tf.multiply(x,x)#将节点信息加⼊summary
tf.summary.scalar(\"x_label\",x)tf.summary.scalar(\"pingfang\",y)
#合并summary.op
summary_merge_op = tf.summary.merge_all()#开始绘会话
with tf.Session() as sess:
init = tf.global_variables_initializer() #创建写⼊器
writer = tf.summary.FileWriter(\"./log\",sess.graph) #变量初始化 sess.run(init)
for epoch in range(11):
summary_info = sess.run(summary_merge_op) writer.add_summary(summary_info,epoch) #给变量x加1
temp = sess.run(tf.add(x,1.0)) sess.run(tf.assign(x,temp))