一、环境
TensorFlow API r1.12
CUDA 9.2 V9.2.148
cudnn64_7.dll
Python 3.6.3
Windows 10
二、TensorFlow 官方说明
(1)TensorBoard
https://tensorflow.google.cn/guide/summaries_and_tensorboard
https://github.com/tensorflow/tensorboard
(2)FileWriter
将摘要(Summary)协议缓冲写入到事件文件中
FileWriter 类提供了再给定的路径下创建事件文件、将摘要和事件写入该文件的机制。
事件文件中的内容更新机制是异步的
允许训练程序调用相应的方法将来自不同训练轮次的数据直接添加到事件文件中,从而避免训练速度的减缓的问题
当通过参数 tf.Session 构建时,FileWriter 将会在新的基于图的摘要(tf.contrib.summary)上构建一个适配层,从而利用需要一个 FileWriter 实例的先存的代码编写的新的摘要
https://www.tensorflow.org/api_docs/python/tf/summary/FileWriter?hl=zh-cn
构造方法:
__init__(logdir,graph=None,max_queue=10,flush_secs=120,graph_def=None,filename_suffix=None,session=None
)
输入参数:
(1)logdir:字符型参数,事件文件保存的文件夹路径
(2)graph:图对象,如:sess.graph
(3)max_queue:整型参数,事件和摘要等待的队列大小
(4)flush_secs:数字参数,每隔多少秒将等待的时间和摘要全部从内存中清理出到硬盘中
(5)graph_def:已经弃用的参数,推荐使用参数 graph 代替
(6)filename_suffix:字符型参数,设置时间文件的拓展名
(7)session:tf.Session 对象
方法:
(1)__enter__
通过 with 语句构建 Python 的上下文管理器,__enter__ 负责环境准备工作,同时返回一资源对象
(2)__exit__
通过 with 语句构建 Python 的上下文管理器,__exit__ 负责资源清理工作
(3)add_event
给事件文件添加事件
(4)add_graph
给事件文件添加图
(5)add_meta_graph
给事件文件添加一个 MetaGraphDef
(6)add_run_metadata
为单个 session.run() 调用添加元数据信息
(7)add_session_log
给事件文件添加一个 SessionLog 协议缓冲
(8)add_summary
给事件文件添加摘要(Summary)协议缓冲
(9)close
将事件文件刷新到磁盘并关闭它
(10)flush
将事件文件刷新到磁盘
(11)get_logdir reopen
返回写入事件文件的文件夹路径
三、Tensorboard 的使用流程
1、Tensorboard 最常用方式的整体使用流程
(1)创建 FileWriter 对象实例
summary_writer =tf.summary.FileWriter("./summary/", sess.graph)
(2)向 summary 中添加要观察和统计的变量
标量:tf.summary.scalar("var_scalar", var)
直方图:tf.summary.histogram('var_histogram', var)
图像:tf.summary.image('var_image', var)
音频:tf.summary.audio('var_audio', var)
文本:tf.summary.text('var_text', var)
(3)合并summay
merged_summary = tf.summary.merge_all()
(4)在会话中执行合并 summary操作
result_summary = sess.run(merged_summary, feed_dict={x_placeholder: batch_data, y_placeholder: batch_labels})
(5)在会话中第 i 轮训练中将相应的 result_summary 写入到 summary_writer 对象
summary_writer.add_summary(result_summary, i)
(6)将 summary 更新到磁盘,并关闭它 summary_writer
summary_writer.close()
(7)在命令行中运行 TensorBoard
tensorboard --logdir == "./summary/"
(8)在浏览器页面中查看 TensorBoard 可视化结果
http://localhost:6006
四、几种可视化数据说明
(1)标量(scalar):用于汇总指定的标量数据,如:损失(loss)、精度(accuracy)等,最终在 TensorBoard 展示该标量数值随时间时间变化的可视化效果
(2)
(3)
(4)
(5)
五、实例
(1)实例1
>>> import tensorflow as tf
>>> x = tf.constant(value=[[1.0,2.0]])
>>> y = tf.constant(value=[[3.0],[4.0]])
>>> result = tf.matmul(x,y)
>>> writer = tf.summary.FileWriter(logdir='./summmary', tf.get_default_graph())
>>> with tf.Session() as sess:
... print(sess.run(result))
...
2018-12-24 00:05:27.461497: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
[[11.]]
>>> sess.close()
(2)实例2
>>> x = tf.constant(value=1.0, dtype=tf.float32, name='x')
>>> y = tf.constant(value=2.0, dtype=tf.float32, name='y')
>>> result = tf.add(x=x,y=y)
>>> init_op = tf.global_variables_initializer()
>>> with tf.Session() as sess:
... sess.run(init_op)
... filewriter = tf.summary.FileWriter(logdir='./summary/', graph=sess.graph)
... sess.run(result)
...
3.0
运行以上 TensorFlow 程序后,会在指定的当前路径下的 summary 文件夹下生成一个以 .local 为拓展名事件文件
2、启动 TensorBoard
退出Python,在命令中输入以下命令:
tensorboard --logdir="./summary/"
tensorboard --logdir="./summary"
注意:
(1)路径的最后带不带斜杠都行
(2)--logdir 后面指向的是保存事件文件的文件夹,而不是事件文件
(3)重新运行 TensorFlow 源程序时,TensorBoard 会自动重新加载最新的时间文件,“Overwriting the metagraph with the newest event.”,不需要每次都重新运行 TensorBoard 命令,只需要刷新浏览器即可以查看最新的事件文件
(4)如果在 TensorFlow 程序中设置了操作 (op) 的 name 参数,name在 TensorBoard 浏览器显示中的节点上显示相应的 name,否则 TensorBoard 会自动按照操作(op)的类型从 0 开始编号,如:“const_0”,“const_1”,“MatMul_1” 等
3、查看 TensorBoard
复制命令行中最后提示的 TensorBoard 代码到浏览器的地址栏中,打开TensorBoard界面
http://localhost:6006
(1)没有给相关操作(op)设置 name 参数时,图中的编号由 TensorFlow 自动从 0 开始编号
(2)给相关操作(op)设置 name 参数时,图中的节点显示设置的 name