tensorboard可视化详细

2019-09-06

tensorboard可视化的官方学习链接

1.tensorboard可视化的用途

首要的目的是记录tensorflow的Graph,tensorflow的Graph其实就是具象化的算法模型;可以认为tensorflow用Graph来替代我们平时自己写的流程化的模型程序,具体区别就是我们自己写的程序需要自己进行流程化规范,而tensorflow的Graph设计好后,具体执行流程由tensorflow的Session控制,不需要我们人为去控制流程。

图的可视化效果可以参考:tensorflow图可视化

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)scalar

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)image

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(<some-directory>, 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))

tensorboard可视化详细的更多相关文章

  1. Tensorflow学习笔记3:TensorBoard可视化学习

    TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, Tenso ...

  2. 使用 TensorBoard 可视化模型、数据和训练

    使用 TensorBoard 可视化模型.数据和训练 在 60 Minutes Blitz 中,我们展示了如何加载数据,并把数据送到我们继承 nn.Module 类的模型,在训练数据上训练模型,并在测 ...

  3. 学习TensorFlow,TensorBoard可视化网络结构和参数

    在学习深度网络框架的过程中,我们发现一个问题,就是如何输出各层网络参数,用于更好地理解,调试和优化网络?针对这个问题,TensorFlow开发了一个特别有用的可视化工具包:TensorBoard,既可 ...

  4. tensorboard可视化节点却没有显示图像的解决方法---注意路径问题加中文文件名

    问题:完成graph中的算子,并执行tf.Session后,用tensorboard可视化节点时,没有显示图像 1. tensorboard 1.10 我是将log文件存储在E盘下面的,所以直接在E盘 ...

  5. 在Keras中使用tensorboard可视化acc等曲线

    1.使用tensorboard可视化ACC,loss等曲线 keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq= 0 , wri ...

  6. 超简单tensorflow入门优化程序&&tensorboard可视化

    程序1 任务描述: x = 3.0, y = 100.0, 运算公式 x×W+b = y,求 W和b的最优解. 使用tensorflow编程实现: #-*- coding: utf-8 -*-) im ...

  7. 使用TensorBoard可视化工具

    title: 使用TensorBoard可视化工具 date: 2018-04-01 13:04:00 categories: deep learning tags: TensorFlow Tenso ...

  8. 利用tensorboard可视化checkpoint模型文件参数分布

    写在前面: 上周微调一个文本检测模型seglink,将特征提取层进行冻结,只训练分类回归层,然而查看tensorboard发现里面有histogram显示模型各个参数分布,看了目前这个训练模型参数分布 ...

  9. 【猫狗数据集】利用tensorboard可视化训练和测试过程

    数据集下载地址: 链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw提取码:2xq4 创建数据集:https://www.cnblogs.com/xi ...

  10. TensorBoard:可视化学习

    数据序列化 TensorBoard 通过读取 TensorFlow 的事件文件来运行.TensorFlow 的事件文件包括了你会在 TensorFlow 运行中涉及到的主要数据.下面是 TensorB ...

随机推荐

  1. python 查找文件夹下以特定字符开头的某类型文件 - os.walk

    Python os.walk() 方法 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下.os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处 ...

  2. laravel视图响应

    1.输出json $data = [ 'id' => 1, 'name' => 'jack', ]; return response()->json($data); 2.重定向 // ...

  3. Jmeter固定吞吐量控制器Constant Throughput Timer

    控制请求的TPS,可以使用JMETER的固定吞吐量控制器Constant Throughput Timer Target throughput(in samples per minute):目标吞吐量 ...

  4. std::string实现split和trim方法

    void split(const std::string& str, const std::string& strDelimiter, std::vector<std::stri ...

  5. 每一行输出5个字符之后换行 js

    方法1  使用正则 (如果是汉字,此正则,每五个字换行,如果是英文字符,每十个英文,换行) let arrX ="这是个测试字符串,这是个测试字符串" arrX = arrX.re ...

  6. 一个严谨的STM32串口DMA发送接收机制

    关键点: 1.一个半接收机制 2.一个是寄存器的操作顺序 参考链接: https://www.eet-china.com/mp/a167050.html

  7. Java数组之Arrays类讲解

    Arrays类 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作. 查 ...

  8. Vue路由跳转时定位到页面顶部

    代码如下: router.afterEach((to, from, next) => { document.body.scrollTop = 0; document.documentElemen ...

  9. Python3之并发(七)---线程同步队列(queue)

    queue模块实现了多生产者,多消费者队列 queue模块的常用类和异常 queue.Queue(maxsize=0) 先进先出(FIFO)的队列, maxsize: 队列的大小(即队列的元素个数), ...

  10. JavaScript基础知识整理(引用类型-Object)

    Object类型 其他的引用类型都是Object类型的实例,创建Object实例有两种方式 (1)使用构造函数 var obj = new Object(); obj.name = "xia ...