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 ...
随机推荐
- gulp-rev-append静态资源添加版本号后缀,清理缓存
大多用的是gulp-rev.gulp-rev-collerctor两个插件,但过程有点麻烦,使用gulp-rev-append插件轻松搞定 github: https://github.com/b ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- Ubuntu14.04_x64_Caffe_GPU环境配置
为了让Caffe支持GPU模式,需要安装GPU和CUDA Toolkit,依据NVIDIA官方教程以ubuntu14.04_X64安装cuda8.0,配置Gpu为例如下所示: 1.检查安装环境,是否具 ...
- Android - TabHost 与 Fragment 制作页面切换效果
Android - TabHost 与 Fragment 制作页面切换效果 Android API 19 , API 23 三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义 ...
- Nginx文档-初学者指南
原文档: http://nginx.org/en/docs/beginners_guide.html 译者:Oopsguy 本指南旨在介绍nginx基本内容和一些在Nginx上可以完成的简单任务.这里 ...
- NLP —— 图模型(二)条件随机场(Conditional random field,CRF)
本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...
- 浅谈js中如何动态添加表头/表列/表格内容
我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据.用for循环就可以轻松搞定. 如果我们的业务需求有所变化,可能我 ...
- WAS 部署 Birt 报表出现 error.CannotStartupOSGIPlatform 和 更新web.xml
在WAS7.0中部署Birt报表会出现error.CannotStartupOSGIPlatform错误,通常需要这样修改 1.依次打开Applications->WebSphere enter ...
- 蓝桥杯比赛关于 BFS 算法总结方法以及套路分析
首先我们来看几道java A组的题目,都是同一年的哦!!! 搭积木 小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面 ...
- 64位linux系统通过编译安装apache+…
二.安装php 上传php压缩包 例如:php-5.2.3.tar.gz 移动 mv php-5.2.3.tar.gz /usr/local/src 进入 cd /usr/local/src 解压 t ...