深度学习-CNN tensorflow 可视化
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 可视化的更多相关文章
- 截图:【炼数成金】深度学习框架Tensorflow学习与应用
创建图.启动图 Shift+Tab Tab 变量介绍: F etch Feed 简单的模型构造 :线性回归 MNIST数据集 Softmax函数 非线性回归神经网络 MINIST数据集分类器简单版 ...
- 深度学习与TensorFlow
深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 4】第四课:卷积神经网络 - 高级篇
[原创 深度学习与TensorFlow 动手实践系列 - 4]第四课:卷积神经网络 - 高级篇 提纲: 1. AlexNet:现代神经网络起源 2. VGG:AlexNet增强版 3. GoogleN ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇
[原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...
- 深度学习之TensorFlow构建神经网络层
深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...
- 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3
紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...
- 分享《机器学习实战基于Scikit-Learn和TensorFlow》中英文PDF源代码+《深度学习之TensorFlow入门原理与进阶实战》PDF+源代码
下载:https://pan.baidu.com/s/1qKaDd9PSUUGbBQNB3tkDzw <机器学习实战:基于Scikit-Learn和TensorFlow>高清中文版PDF+ ...
- 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动
前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...
- 深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装
一.硬件采购 近年来,人工智能AI越来越多被人们所了解,尤其是AlphaGo的人机围棋大战之后,机器学习的热潮也随之高涨.最近,公司采购了几批设备,通过深度学习(TensorFlow)来研究金融行业相 ...
随机推荐
- CodeForces - 598C Nearest vectors(高精度几何 排序然后枚举)
传送门: http://codeforces.com/problemset/problem/598/C Nearest vectors time limit per test 2 seconds me ...
- RPAD()和LPAD()函数进行字符串的填充
RPAD()函数从右边对字符串使用指定的字符进行填充. 格式:RPAD(string,padded_length,[pad_string]) string 表示:被填充的字符串. padded_len ...
- Swift_控制流
Swift_控制流 点击查看源码 for-in 循环 //for-in 循环 fileprivate func testForIn() { //直接循环提取内部数据 //[1,5] for index ...
- JavaScript 基础(五) 函数 变量和作用域
函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } ...
- Angularjs基础(九)
AngularJS 应用应用程序讲解 实例: <html ng-app="myNoteApp"> <head> <meat charset=" ...
- ABAP术语-ABAP Workbench
ABAP Workbench 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/10/989037.html Integrated graphi ...
- CDN初识
CDN 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层 ...
- JavaScript--动态添加元素(纯js书写table并删除数据)
本文是对上一篇博文的扩展,用js书写表格,并添加和删除数据,详细代码解释见代码页. 对于文中使用的script脚本函数,下载地址如下:https://pan.baidu.com/s/13OFnj7nc ...
- loushang框架的开发中关于BSP的使用,将写好的功能模块部署到主页界面结构上
前言: 当我们已经开发好相应的模块或者功能的时候,需要将这个功能部署在index主页上作为可点击直接使用的模块,而不是每次需要去浏览对应的url地址. 这时候就需要运用到L5的BSP. 作为刚刚入门l ...
- vue组件中的样式属性--scoped
Scoped CSS Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当 ...