TensorFlow框架(2)之TensorBoard详解
为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具。你可以用 TensorBoard 来展现你的 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。
TensorBoard工具通过读取TensorFlow产生的事件(events)文件来进行图像绘制,其中这个事件文件是在运行TensorFlow时产生的summary数据。简单地说,可以将TensorBoard的使用分为两步:数据序列化和启动TensorBoard。
1. Quick Start
1.1 序列化
数据序列化就是将summary节点保存为TensorFlow的事件文件,即保存TensorFlow中产生的summary数据。保存TensorFlow事件文件通过调用tf.summary.FileWriter函数来实现。如下所示是一个程序的简单序列化。
|
from __future__ import print_function import tensorflow as tf session = tf.Session() w = tf.Variable([.3], tf.float32,name="w") b = tf.Variable([-.3], tf.float32,name="b") x = tf.placeholder(tf.float32,name="x") linear = w * x + b train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph) init = tf.global_variables_initializer() session.run(init) print(session.run(linear, {x: [1, 2, 3, 4]})) |
当执行上述程序后,在'/tmp/mnist_logs'目录下会生成一个文件。
PS:
tf.summary.FileWriter函数必须在global_variables_initializer().run()函数之前调用,在重命名tensor对象之后调用。
1.2 启动
当对TensorFlow的计算图进行序列化为文件后,即可启动TensorBoard工具绘制图像。启动TensorBoard的方式也非常简单,只需在控制终端上执行"TensorBoard"命令,同时传递序列化文件的路径。如绘制上述程序的序列化文件,则可执行如下命令:
|
tensorboard --logdir=/tmp/mnist_logs |
启动TensorBoard后,用户在浏览器中输入:http://localhost:6006/,即可查看已绘制的TensorFlow图像,在"GRAPHS"标签能够查看TensorFlow计算流图,如图 11所示。

图 11
2. Summary Data
2.1 Operation
如上所述,TensorBoard工具通过读取TensorFlow产生的事件(events)文件来进行图像绘制,而事件文件是在运行TensorFlow时产生的summary数据。这里的summary数据是由TensorBoard提供的Summary Operation生成的。
如表 11所示,能够生成Summary Data的Operation有四个:
表 11 summary operation
|
Operation |
语义 |
|
tf.summary.scalar |
产生标量(scalars)类型的summary data |
|
tf.summary.histogram |
产生直方图(histograms)类型的summary data |
|
tf.summary.image |
产生图片(images)类型的summary data |
|
tf.summary.audio |
产生音频(Audio)类型的summary data |
PS:
上述四个函数分别产生的summary data会在TensorBoard图形中的相应标签中,如图 11所示的SCALARS、IMAGES、AUDIO和HISTOGRAMS,而GRAPHS是自动产生的。
2.2 Tensor
其实表 11中Operation生成的Summary Data也是一种Tensor对象,所以若没有使用Session的run方法执行它们,这些Tensor是不会产生任何Summary Data的。因此为了生成Summary Data,需要用户手动一个个生成,然而这种方法太过麻烦。所以TensorFlow提供一个将所有Summary Operation生成的Tensor集成为一个Tensor对象,用户只需通过Session.run函数执行这个Tensor对象,即可生成所有的Summary Data。该函数为:tf.summary.merge_all()。
在执行这个集成Tensor对象后,会生成一个Summary protobuf对象,用户需要将这个对象传递给tf.summary.filewriter对象,这样所有Summary data就会序列化到事件文件中。
如下示例是将tf.summary.scalar操作生成的Summary Data序列化为事件文件:
|
import numpy as np import tensorflow as tf #Model parameters w = tf.Variable([.3], tf.float32) b = tf.Variable([-.3], tf.float32) #Model input and output x = tf.placeholder(tf.float32) linear_model = w * x + b y = tf.placeholder(tf.float32) #loss squared_deltas = tf.square(linear_model - y) loss = tf.reduce_sum(squared_deltas) #optimizer optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) #1.保存需要序列化的常量 tf.summary.scalar('loss', loss) with tf.name_scope('constant'): c = tf.constant(4.3,tf.float32) tf.summary.scalar('c', c) #training loop init = tf.global_variables_initializer() session = tf.Session() #2.集成所有Summary Operation merged = tf.summary.merge_all() train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph) session.run(init) for i in range(1000): session.run(train, {x:[1,2,3,4], y:[0, -1, -2, -3]}) #3.执行集成的operation summary = session.run(merged, {x:[1,2,3,4], y:[0, -1, -2, -3]}) #4.序列化到事件文件中 train_writer.add_summary(summary,i) #evaluate training accuracy curr_w, curr_b, curr_loss = session.run([w,b,loss], {x:[1, 2, 3, 4], y:[0, -1, -2, -3]}) print("w:%s b:%s loss:%s"%(curr_w,curr_b,curr_loss)) |

图 12
3. 命名空间
典型的 TensorFlow 可以有数以千计的节点,如此多而难以一下全部看到,甚至无法使用标准图表工具来展示。为简单起见,TensorFlow提供一个将多个变量名划定范围的函数,并且可视化把该信息用于在图表中的节点上定义一个层级。该函数为:with tf.name_scope。默认情况下,只有顶层节点会显示。
如下示例将x和w划定为hidden范围的命名空间内:
|
import tensorflow as tf session = tf.Session() b = tf.Variable([-.3], tf.float32,name="b") with tf.name_scope('hidden'): x = tf.placeholder(tf.float32,name="x") w = tf.Variable([.3], tf.float32,name="w") linear = w * x + b train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph) init = tf.global_variables_initializer() session.run(init) print(session.run(linear, {x: [1, 2, 3, 4]})) |

图 21
4. 参考文献
TensorFlow框架(2)之TensorBoard详解的更多相关文章
- TensorFlow框架之Computational Graph详解
1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...
- Win10 TensorFlow(gpu)安装详解
Win10 TensorFlow(gpu)安装详解 写在前面:TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着 ...
- (转)Win10 TensorFlow(gpu)安装详解
Win10 TensorFlow(gpu)安装详解 写在前面:TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着 ...
- Qt的Graphics-View框架和OpenGL结合详解
Qt的Graphics-View框架和OpenGL结合详解 演示程序下载地址:这里 程序源代码下载地址:这里 这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果. Qt中有一个非常炫的例子:Boxe ...
- Scrapy框架的命令行详解【转】
Scrapy框架的命令行详解 请给作者点赞 --> 原文链接 这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: loca ...
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...
- .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】
SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...
- 搜索引擎框架之ElasticSearch基础详解(非原创)
文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...
- 框架基础学习之--详解web+maven+spring+mybatis+struts框架文件夹作用
详解web+maven+spring+mybatis+struts框架文件夹作用 1.程序名 2.Mybatis,mybatis是数据持久层,就是和对象类有关系的东西 3.存放java文件,xml,p ...
随机推荐
- 虚拟机Linux系统下配置网络
虚拟机上安装Redhat9.0后是没有网络的,而本来的Windows系统是可以上网的,此时想在Redhat上网就需要在Linux系统上配置网络,以下是笔者自己配置的一点心得. 1.电脑本机系统打开网络 ...
- Storm笔记——技术点汇总
目录 概况 手工搭建集群 引言 安装Python 配置文件 启动与测试 应用部署 参数配置 Storm命令 原理 Storm架构 Storm组件 Stream Grouping 守护进程容错性(Dae ...
- linux下文件查找工具--find
常用的文件查找命令有:which,locate,find 1.which命令 查找二进制数或二进制命令,由PATH给出 2.loacte 特点: 1.非实时,每天在系统上生成数据库,通过数据库查询 2 ...
- PHP删除文件夹及其文件
<?php function deletedir($path){ $openpath = opendir($path); while ($f = readdir($openpath)){ $fi ...
- CODE大全——机器学习
聚类 聚类任务 背景 在无监督学习(密度估计.异常检测等)中,训练样本的标记信息是未知的(即不人为指定),旨在发现数据之间的内在联系和规律,为进一步的数据分析提供基础. 此类学习任务中研究最多.应用最 ...
- 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型
本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...
- 不借助工具在浏览器中通过Web API执行Dynamics 365操作(Action)实例
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复262或者20170727可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- Spring mybatis源码篇章-SqlSessionFactoryBean
前言:通过实例结合源码的方式解读,其中涉及到的文件来自于博主的Github毕设项目SchoolActivity_WxServer,引用的jar包为mybatis-spring-1.3.0.jar Sp ...
- 【D3】cluster layout
一. 和其他D3类一样,layout 可以链式传递,使用简明的申明添加多种自定义设置. 二.API # d3.layout.cluster() Creates a new cluster layout ...
- Windows Server 2008 配置IIS+PHP
问题: 最近要上线一个PHP写成的MVC项目,发现Windows Server 2008安装的还是PHP5.2,很多语法不支持. 尝试的一些解决方案: 1.将PHP升级为5.6,但是需要做好IIS和P ...