tf.summary模块的简介

在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程、利用Matpltlib进行可视化、利用TensorFlow自带的可视化工具TensorBoard进行可视化。这三种方法,在前面博客中都有过比较详细的介绍。但是,TensorFlow中最重要的可视化方法是通过tensorBoard、tf.summary和tf.summary.FileWriter这三个模块相互合作来完成的。

tf.summary模块的定义位于summary.py文件中,该文件中主要定义了在进行可视化将要用到的各种函数,tf.summary包含的主要函数如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from __future__ import                            absolute_import
from __future__ import                            pision
from __future__ import                            print_function
from google.protobuf import json_format as         _json_format
from tensorflow.core.framework.summary_pb2 import Summary
from tensorflow.core.framework.summary_pb2 import SummaryDescription
from tensorflow.core.util.event_pb2 import        Event
from tensorflow.core.util.event_pb2 import        SessionLog
from tensorflow.core.util.event_pb2 import        TaggedRunMetadata
 
from tensorflow.python.eager import context as    _context
from tensorflow.python.framework import dtypes as _dtypes
from tensorflow.python.framework import ops as    _ops
from tensorflow.python.ops import gen_logging_ops as _gen_logging_ops
from tensorflow.python.ops import summary_op_util as _summary_op_util
from tensorflow.python.ops.summary_ops import        tensor_summary
from tensorflow.python.summary.text_summary import   text_summary as text
from tensorflow.python.summary.writer.writer import       FileWriter
from tensorflow.python.summary.writer.writer_cache import FileWriterCache
from tensorflow.python.util import compat as              _compat
from tensorflow.python.util.all_util import               remove_undocumented
from tensorflow.python.util.tf_export import              tf_export
#========================================================================================================
#模块说明:
#       tf.summary中包含的主要函数
#========================================================================================================
def scalar(name, tensor, collections=None, family=None)                    
def image(name, tensor, max_outputs=3, collections=None, family=None)
def histogram(name, values, collections=None, family=None)
def audio(name, tensor, sample_rate, max_outputs=3, collections=None,family=None)
def merge(inputs, collections=None, name=None)
def merge_all(key=_ops.GraphKeys.SUMMARIES, scope=None)
def get_summary_description(node_def)

二 tf.summary模块中常用函数的说明:

1tf.summary.scalar函数的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#========================================================================================================
#函数原型:
#       def scalar(name, tensor, collections=None, family=None)
#函数说明:
#       [1]输出一个含有标量值的Summary protocol buffer,这是一种能够被tensorboard模块解析的【结构化数据格式】
#       [2]用来显示标量信息
#       [3]用来可视化标量信息
#       [4]其实,tensorflow中的所有summmary操作都是对计算图中的某个tensor产生的单个summary protocol buffer,而
#          summary protocol buffer又是一种能够被tensorboard解析并进行可视化的结构化数据格式
#       虽然,上面的四种解释可能比较正规,但是我感觉理解起来不太好,所以,我将tf.summary.scalar()函数的功能理解为:
#       [1]将【计算图】中的【标量数据】写入TensorFlow中的【日志文件】,以便为将来tensorboard的可视化做准备
#参数说明:
#       [1]name  :一个节点的名字,如下图红色矩形框所示
#       [2]tensor:要可视化的数据、张量
#主要用途:
#       一般在画loss曲线和accuary曲线时会用到这个函数。
#=======================================================================================================

具体的使用方法如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#=======================================================================================================================
#函数说明:
#       生成【变量】的监控信息,并将生成的监控信息写入【日志文件】
#参数说明:
#       [1]var :需要【监控】和【记录】运行状态的【张量】
#       [2]name:给出了可视化结果中显示的图表名称
#=======================================================================================================================
def variable_summaries(var,name):
    with tf.name_scope('summaries'):
        #【1】通过tf.summary.histogram()
        tf.summary.histogram(name,var)
 
        mean   = tf.reduce_mean(var)
        tf.summary.scalar('mean/'+name,mean)
 
        stddev = tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
        tf.summary.scalar('stddev/'+name,stddev)

2tf.summary.image函数的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#========================================================================================================
#函数原型:
#       def image(name, tensor, max_outputs=3, collections=None, family=None)
#函数说明:
#       [1]输出一个包含图像的summary,这个图像是通过一个4维张量构建的,这个张量的四个维度如下所示:
#              [batch_size,height, width, channels]
#       [2]其中参数channels有三种取值:
#              [1]1: `tensor` is interpreted as Grayscale,如果为1,那么这个张量被解释为灰度图像
#              [2]3: `tensor` is interpreted as RGB,如果为3,那么这个张量被解释为RGB彩色图像
#              [3]4: `tensor` is interpreted as Grayscale,如果为4,那么这个张量被解释为RGBA四通道图像
#       [3]输入给这个函数的所有图像必须规格一致(长,宽,通道,数据类型),并且数据类型必须为uint8,即所有的像素值在
#              [0,255]这个范围
#       虽然,上面的三种解释可能比较正规,但是我感觉理解起来不太好,所以,我将tf.summary.image()函数的功能理解为:
#       [1]将【计算图】中的【图像数据】写入TensorFlow中的【日志文件】,以便为将来tensorboard的可视化做准备
#
#参数说明:
#       [1]name  :一个节点的名字,如下图红色矩形框所示
#       [2]tensor:要可视化的图像数据,一个四维的张量,元素类型为uint8或者float32,维度为[batch_size, height,
#                 width, channels]
#       [3]max_outputs:输出的通道数量,可以结合下面的示例代码进行理解
#主要用途:
#       一般用在神经网络中图像的可视化
#========================================================================================================

示例代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
def main(argv=None):
    #【1】从磁盘加载数据
    mnist = input_data.read_data_sets('F:/MnistSet/',one_hot=True)
    #【2】定义两个【占位符】,作为【训练样本图片/此块样本作为特征向量存在】和【类别标签】的输入变量,并将这些占位符存在命名空间input中
    with tf.name_scope('input'):
        x  = tf.placeholder('float', [None, 784],name='x-input')
        y_ = tf.placeholder('float', [None, 10], name='y-input')
    #【2】将【输入的特征向量】还原成【图片的像素矩阵】,并通过tf.summary.image函数定义将当前图片信息作为写入日志的操作
    with tf.name_scope('input_reshape'):
        image_shaped_input = tf.reshape(x,[-1,28,28,1])
        tf.summary.image('input',image_shaped_input,10)

3 tf.summary.histogram函数的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#========================================================================================================
#函数原型:
#       def histogram(name, values, collections=None, family=None)
#函数说明:
#       [1]用来显示直方图信息
#       [2]添加一个直方图的summary,它可以用于可视化您的数据的分布情况,关于TensorBoard中直方图更加具体的信息可以在
#          下面的链接https://www.tensorflow.org/programmers_guide/tensorboard_histograms中获取
#
#       虽然,上面的两种解释可能比较正规,但是我感觉理解起来不太好,所以,我将tf.summary.histogram()函数的功能理解为: 
#       [1]将【计算图】中的【数据的分布/数据直方图】写入TensorFlow中的【日志文件】,以便为将来tensorboard的可视化做准备
#参数说明:
#       [1]name  :一个节点的名字,如下图红色矩形框所示
#       [2]values:要可视化的数据,可以是任意形状和大小的数据 
#主要用途:
#       一般用来显示训练过程中变量的分布情况
#========================================================================================================

示例代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#=======================================================================================================================
#函数说明:
#       生成一层全连接层神经网络
#=======================================================================================================================
def nn_layer(input_tensor,input_dim,output_dim,layer_name,act=tf.nn.relu):
    with tf.name_scope(layer_name):
        with tf.name_scope('weights'):
            weights = tf.Variable(tf.truncated_normal([input_dim,output_dim],stddev=0.1))
            variable_summaries(weights,layer_name+'/weights')
 
        with tf.name_scope('biases'):
            biases = tf.Variable(tf.constant(0.0,shape=[output_dim]))
            variable_summaries(biases,layer_name+'/biases')
 
        with tf.name_scope('Wx_plus_b'):
            preactivate = tf.matmul(input_tensor,weights)+biases
            tf.summary.histogram(layer_name+'/pre_activvations',preactivate)
 
        activations = act(preactivate,name='activation')
        tf.summary.histogram(layer_name+'/activations',activations)
        return activations

4 tf.summary.函数的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#========================================================================================================
#函数原型:
#       def merge_all(key=_ops.GraphKeys.SUMMARIES, scope=None)
#函数说明:
#       [1]将之前定义的所有summary整合在一起
#       [2]和TensorFlow中的其他操作类似,tf.summary.scalar、tf.summary.histogram、tf.summary.image函数也是一个
#          op,它们在定义的时候,也不会立即执行,需要通过sess.run来明确调用这些函数。因为,在一个程序中定义的写日志操作
#          比较多,如果一一调用,将会十分麻烦,所以Tensorflow提供了tf.summary.merge_all()函数将所有的summary整理在一
#          起。在TensorFlow程序执行的时候,只需要运行这一个操作就可以将代码中定义的所有【写日志操作】执行一次,从而将
#          所有的日志写入【日志文件】。
#
#参数说明:
#       [1]key  : 用于收集summaries的GraphKey,默认的为GraphKeys.SUMMARIES
#       [2]scope:可选参数
#========================================================================================================

5 tf.summary.FileWriter类的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#========================================================================================================
#类定义原型:
#       class FileWriter(SummaryToEventTransformer)
#类说明:
#      [1]将Summary protocol buffers写入磁盘文件
#      [2]FileWriter类提供了一种用于在给定目录下创建事件文件的机制,并且将summary数据写入硬盘
#构造函数:
#        def __init__(self,logdir,graph=None,max_queue=10,flush_secs=120,graph_def=None,filename_suffix=None):
 
#参数说明:
#       [1]self  : 类对象自身
#       [2]logdir:用于存储【日志文件】的目录
#       [3]graph : 将要存储的计算图
#应用示例:
#       summary_writer = tf.summary.FileWriter(SUMMARY_DIR,sess.graph):创建一个FileWrite的类对象,并将计算图
#           写入文件
#========================================================================================================

示例代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
merged = tf.summary.merge_all()
#【8】创建回话Session
with tf.Session() as sess:
    #【9】实例化一个FileWriter的类对象,并将当前TensoirFlow的计算图写入【日志文件】
    summary_writer = tf.summary.FileWriter(SUMMARY_DIR,sess.graph)
    #【10】Tensorflow中创建的变量,在使用前必须进行初始化,下面这个为初始化函数
    tf.global_variables_initializer().run()
    #【11】开始训练
    for i in range(TRAIN_STEPS):
        xs,ys     = mnist.train.next_batch(BATCH_SIZE)
        #【12】运行训练步骤以及所有的【日志文件生成操作】,得到这次运行的【日志文件】。
        summary,_,acc = sess.run([merged,train_step,accuracy],feed_dict={x:xs,y_:ys})
        print('Accuracy at step %s: %s' % (i, acc))
        #【13】将所有的日志写入文件,TensorFlow程序就可以那这次运行日志文件,进行各种信息的可视化
        summary_writer.add_summary(summary,i)
 
summary_writer.close()

6add_summary函数的说明

1
2
3
4
5
6
7
8
9
10
11
12
13
#========================================================================================================
#函数原型:
#        def add_summary(self, summary, global_step=None)
#函数说明:
#        [1]该函数是tf.summary.FileWriter父类中的成员函数
#        [2]将一个`Summary` protocol buffer添加到事件文件,写入事件文件
#参数说明:
#       [1]self   : 类对象自身
#       [2]summary:将要写入的summary
#       [3]graph  : global_step,当前迭代的轮数,需要注意的是,如果没有这个参数,那么scalar的summary将会成为一条直线
#应用示例:
#       summary_writer.add_summary(summary,i)
#========================================================================================================

深度学习-CNN tensorflow 可视化的更多相关文章

  1. 截图:【炼数成金】深度学习框架Tensorflow学习与应用

    创建图.启动图 Shift+Tab Tab 变量介绍: F etch Feed 简单的模型构造 :线性回归 MNIST数据集 Softmax函数 非线性回归神经网络   MINIST数据集分类器简单版 ...

  2. 深度学习与TensorFlow

    深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...

  3. 【原创 深度学习与TensorFlow 动手实践系列 - 4】第四课:卷积神经网络 - 高级篇

    [原创 深度学习与TensorFlow 动手实践系列 - 4]第四课:卷积神经网络 - 高级篇 提纲: 1. AlexNet:现代神经网络起源 2. VGG:AlexNet增强版 3. GoogleN ...

  4. 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇

    [原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...

  5. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  6. 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3

    紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...

  7. 分享《机器学习实战基于Scikit-Learn和TensorFlow》中英文PDF源代码+《深度学习之TensorFlow入门原理与进阶实战》PDF+源代码

    下载:https://pan.baidu.com/s/1qKaDd9PSUUGbBQNB3tkDzw <机器学习实战:基于Scikit-Learn和TensorFlow>高清中文版PDF+ ...

  8. 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动

    前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...

  9. 深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装

    一.硬件采购 近年来,人工智能AI越来越多被人们所了解,尤其是AlphaGo的人机围棋大战之后,机器学习的热潮也随之高涨.最近,公司采购了几批设备,通过深度学习(TensorFlow)来研究金融行业相 ...

随机推荐

  1. 【luogu P2590 [ZJOI2008]树的统计】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2590 我想学树剖QAQ #include <cstdio> #include <cstri ...

  2. 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)

    洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式  ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...

  3. Android中得到布局文件对象有三种方式

    Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...

  4. ECMAScript 内置类型、对象和运算符

    原始值是以下内置类型 之一的成员:Undefined,Null,Boolean,Number,String: 对象是剩下的内置 类型 Object 的成员:函数是可调用对象 (callable obj ...

  5. 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 本文出自方志朋的博客 一.spring ...

  6. iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱

      UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...

  7. [洛谷]P3704-数字表格

    [洛谷]P3704-数字表格 妙啊,这又是一道反演题,而且个人感觉比较高级 传送门 大意 在\(N\times M\)的数表\(a\)中,\(a_{i,j}\)表示f((i,j)),其中\((i,j) ...

  8. spring boot 小案例

    1. SpringBoot 1.1. 概要 在传统的SSM框架应用过程中,存在大量的配置文件,及相关的配置项,例如: 1. DispatcherServlet 2. CharacterEncoding ...

  9. Flask模拟实现CSRF攻击

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...

  10. Python语言与其他语言对比

    python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路,以下是Python与其他编程语言的优缺点对比: 一:简介 1.Python 优势:简单易学,能够把用其他语言制 ...