TensorBoard可视化

TensorBoard可视化

TensorBoard简介

TensorBoard是TensorFlow的可视化工具,它可以通过TrensorFlow程序运行过程中输出 的日志文件可视化TensorFlow程序的运行状态。TensorBoard和TensorFlow程序跑在不同的进程中,TensoeBoard会自动读取最新的TensorFlow日志文件,并呈现当前TensorFlow状态。以下代码展示了一个简单的TensorFlow程序,在这个程序中完成了TensorBoard日志输出的功能。

import tensorflow as tf

#定义一个简单的计算图,实现向量加法的操作。
input1 = tf.constant([1.0,2.0,3.0], name="input1")
input2 = tf.Variable(tf.random_uniform([3]), name="input2")
output = tf.add_n([input1,input2], name="add")

#生成一个写日志的writer,并将当前的TensorFlow计算图写入日志。TensorFlow提供了多种写日志的API
writer = tf.summary.FileWriter("/path/to/log",tf.get_default_graph())
writer.close()

以上程序输出了TensorFlow计算图的信息,所以运行TensorBoard时,可以看到这个向量相加程序计算图可视化之后的结果。TensorBoard不需要额外的安装过程,TensorFlow安装完成时,TensorBoard会自动安装。运行以下命令便可以启动TensorBoard。

#运行TensorBoard,并将日志的地址指向上面程序日志输出的地址。
tensorboard --logdir=/path/to/log

运行以上命令会启动一个服务,这个服务的端口默认为6006.通过浏览器打开localhost:6006,可以看到图1所示的界面。打开TensorBoard界面会默认进入GRAPHS界面,INACTIVE选项中列出的是当前没有可视化数据的项目,如图2。
图1
图2

TensorFlow计算图可视化

TensorBoard可视化得到的图不仅是将TensorFlow计算图中的节点和边直接可视化,它会根据每个TensorFlow计算节点的命名空间来整理可视化得到的效果图,使得神经网络的整体结构不会被过多的细节所淹没。除了显示TensorFlow计算图的结构,TensorBoard还可以展示TensorFlow计算节点上的其他信息。
命名空间与TensorBoard图上节点
为了更好地组织可视化效果图中的计算节点,TensorBoard支持通过TensorFlow命名空间来整理可视化效果图上的节点。在TensorBoard的默认视图中,TensorFlow计算图中同一个命名空间下的所有节点会被缩略成一个节点,只有顶层命名空间中的节点才会被显示在TensorBoard可视化效果图上。除了tf.variable_scope函数,tf.name_scope函数也提供了命名空间管理的功能。这两个函数在大部分情况下是等价的,唯一的区别是在使用tf.get_variable函数时。(具体不再详细介绍)通过对命名空间管理,可以改进之前的样例代码,使得可视化得到的效果图更加清晰。以下代码展示了改进的方法。

import tensorflow as tf

#将输入定义放入各自的命名空间中,从而使得TensorBoard可以根据命名空间来整理可视化效果图上的节点。
with tf.name_scope("input1"):
	input1 = tf.constant([1.0,2.0,3.0], name="input1")
with tf.name_scope("input2"):
	input2 = tf.Variable(tf.random_uniform([3]), name="input2")
output = tf.add_n([input1,input2], name="add")

writer = tf.train.SummaryWriter("/path/to/log",tf.get_default_graph())
writer.close()

改进之后的好处是,用于初始化的节点已经被缩略起来了。这样TensorFlow程序中定义的加法运算被清晰地展示了出来。需要查看input2节点中具体包含了那些运算时,可以将鼠标移动到input2节点,并点开右上角的➕。

监控指标可视化

TensorBoard除了可以可视化TensorFlow的计算图,还可以可视化TensorFlow程序运行过程中各种有助于了解程序运行状态的监控指标。
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

日志生成函数TensorBoard界面栏展示内容
tf.summary.scalarEVENTS监控数据随着迭代进行的变化趋势。
tf.summary.imageIMAGESTensorFlow中使用的图片数据。
tf.summary.audioAUDIOTensorFlow中使用的音频数据。
tf.summary.textTEXTTensorFlow中使用的文本数据。
tf.summary.histogramHISTOGRAMS,DISTRIBUTIONSTensorFlow中张量分布监控数据随着迭代轮数的变化趋势。

目前所做项目例图

下载google图像识别网络inception-v3并查看结构

import tensorflow as tf
import os
import tarfile
import requests

#inception模型下载地址
inception_pretrain_model_url = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz'

#模型存放地址
inception_pretrain_model_dir = "inception_model"
if not os.path.exists(inception_pretrain_model_dir):
    os.makedirs(inception_pretrain_model_dir)
    
#获取文件名,以及文件路径
filename = inception_pretrain_model_url.split('/')[-1]
filepath = os.path.join(inception_pretrain_model_dir,filename)

#下载模型
if not os.path.exists(filepath):
    print("download:",filename)
    r = requests.get(inception_pretrain_model_url,stream=True)
    with open(filepath,'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
print("finish:",filename)
#解压文件
tarfile.open(filepath,'r:gz').extractall(inception_pretrain_model_dir)

#模型结构存放文件
log_dir = 'inception_log'
if not os.path.exists(log_dir):
    os.makedirs(log_dir)
    
#classify_image_graph_def.pb为google训练好的模型
inception_graph_def_file = os.path.join(inception_pretrain_model_dir,'classify_image_graph_def.pb')
with tf.Session() as sess:
    with tf.gfile.FastGFile(inception_graph_def_file,'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        tf.import_graph_def(graph_def,name='')
    #保存图的结构
    writer = tf.summary.FileWriter(log_dir,sess.graph)
    writer.close()

得到结构图如下:
在这里插入图片描述
experiment/grape/log/

accuracy
loss
bias
kernel
在这里插入图片描述
在这里插入图片描述

小结

介绍了TensorFlow的可视化工具TensorBoard。作为第一篇文章,主要目的在于熟悉markdown文档书写,在介绍一些基本概念的同时,加入了目前做过的项目的部分实验结果。在下一篇将介绍有关T-SNE的内容分别使用MNIST数据集和自己的数据集展开。
[1]: 《TensorFlow实战Google深度学习框架》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值