【深度学习系列】PaddlePaddle可视化之VisualDL

摘要:
如何使用Tensorboard数据表单(1)标量(2)图片(3)音频(4)计算图表图表(5)数据分布(6)直方图(7)嵌入矢量嵌入可视化过程(1)为实例创建图表。

  上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化。在讲VisualDL之前,我们先了解一下常用的Tensorflow的可视化工具---Tensorboard。


Tensorflow的可视化

  Tensorboard是Tensorflow自带的可视化模块,我们可以通过Tensorboard直观的查看神经网络的结构,训练的收敛情况等。要想掌握Tensorboard,我们需要知道一下几点:

  • 支持的数据形式
  • 具体的可视化过程
  • 如何对一个实例使用Tensorboard

  数据形式 

(1)标量Scalars 
(2)图片Images 
(3)音频Audio 
(4)计算图Graph 
(5)数据分布Distribution 
(6)直方图Histograms 
(7)嵌入向量Embeddings

   可视化过程

(1)建立一个graph。
(2)确定在graph中的不同节点设置summary operations。
(3)将(2)中的所有summary operations合并成一个节点,运行合并后的节点。
(4)使用tf.summary.FileWriter将运行后输出的数据都保存到本地磁盘中。
(5)运行整个程序,并在命令行输入运行tensorboard的指令,打开web端可查看可视化的结果

   使用Tensorborad的实例

  这里我就不讲的特别详细啦,如果用过Tensorflow的同学其实很好理解,只需要在平时写的程序后面设置summary,tf.summary.scalar记录标量,tf.summary.histogram记录数据的直方图等等,然后正常训练,最后把所有的summary合并成一个节点,存放到一个地址下面,在linux界面输入一下代码:

tensorboard --logdir=‘存放的总summary节点的地址’

  然后会出现以下信息:

1 Starting TensorBoard 41 on port 6006
2 (You can navigate to http://127.0.1.1:6006)

  将http://127.0.1.1:6006在浏览器中打开,就可以看到web端的可视化了

【深度学习系列】PaddlePaddle可视化之VisualDL第1张

  具体的参数表示的含义可以参照官网的解释


MXNet的可视化

  MXNet的可视化之前一直使用mx.viz.plot_network来构建一个神经网络图,但是后来有一位阿里的同学把tensorboard封装在了mxnet里,具体可以参照https://github.com/dmlc/tensorboard,可以对照他写的这篇文章来看Bring TensorBoard to MXNet

  ps:这个功能好像去年年初他们就开始搞了,看到他发的朋友圈才知道没过几个月就上线了,真效率,喜欢mxnet的同学可以尝试一下。


PaddlePaddle的可视化--EventHandler 

  在PaddlePaddle发布VisualDL之前,我一直是用event_handler来可视化训练的收敛情况。我找了一段之前写的一个类里的小代码来展示如何使用event_handler

 1 def start_trainer(self,X_train,Y_train,X_val,Y_val):
 2         #获得训练器
 3         trainer = self.get_trainer()
 4 
 5         result_lists = []
 6         def event_handler(event):
 7             if isinstance(event, paddle.event.EndIteration):
 8                 if event.batch_id % 10 == 0:
 9                     print "
Pass %d, Batch %d, Cost %f, %s" % (
10                         event.pass_id, event.batch_id, event.cost, event.metrics)
11             if isinstance(event, paddle.event.EndPass):
12                     # 保存训练好的参数
13                 with open('params_pass_%d.tar' % event.pass_id, 'w') as f:
14                     parameters.to_tar(f)
15                 # feeding = ['x','y']
16                 result = trainer.test(
17                         reader=val_reader)
18                             # feeding=feeding)
19                 print "
Test with Pass %d, %s" % (event.pass_id, result.metrics)
20 
21                 result_lists.append((event.pass_id, result.cost,
22                         result.metrics['classification_error_evaluator']))
23 
24         # 开始训练
25         train_reader = paddle.batch(paddle.reader.shuffle(
26                 reador.reader_creator(X_train,Y_train),buf_size=200),
27                 batch_size=16)
28 
29         val_reader = paddle.batch(paddle.reader.shuffle(
30                 reador.reader_creator(X_val,Y_val),buf_size=200),
31                 batch_size=16)
32 
33         trainer.train(reader=train_reader,num_passes=20,event_handler=event_handler)
34 
35     #找到训练误差最小的一次结果
36     best = sorted(result_lists, key=lambda list: float(list[1]))[0]
37         print 'Best pass is %s, testing Avgcost is %s' % (best[0], best[1])
38         print 'The classification accuracy is %.2f%%' % (100 - float(best[2]) * 100)

  trainer = self.get_trainer()不用管,因为之前写的一个函数叫get_trainer,你可以先定义trainer,然后放在这里,后面设一个空列表存放每次训练的结果,我这个代码里叫result_lists,然后定义event_handler函数,在开始训练,这样每次训练的结果都会传入result_lists这个列表里面,最后进行排序,把最优结果放到best里,输出就可以。最后用event_handler_plot画图,输出如下收敛的图:

【深度学习系列】PaddlePaddle可视化之VisualDL第2张

  但是这样不能观察到神经网络在训练过程中的每个神经元的具体变化情况,不如tensorboard的功能多,只能看到我们在训练过程中的loss下降的情况,训练是否收敛等。


PaddlePaddle的新版可视化工具--VisualDL

  大概就在上周,1.16日,PaddlePaddle和Echarts团队练手打造了VisualDL可视化工具 ,我试用了以后发现和tensorborad的功能好像!简单说说特性:

  • 支持Scaler打点数据展示,可将训练信息以折线图的形式展现出来,方便观察整体趋势,还能在同一个可视化视图中呈现多条折线,方便用户对比分析。
  • 支持Image图片展示可轻松查看数据样本的质量,也可以方便地查看训练的中间结果,例如卷积层的输出或者GAN生成的图片。
  • 支持Histogram参数分布展示功能,方便用户查看参数矩阵中数值的分布曲线,并随时观察参数数值分布的变化趋势。
  • 支持Graph查看深度神经网络的模型结构。

  这样一看,其实基本上实现了tensorboard的功能,或者应该简称“Bring TensorBorad To PaddlePaddle”。不知道博客园怎么放gif,具体的图片展示就直接看官网吧

深度学习可视化工具Visual DL——“所见即所得”

 


总结

  总的来说,Tensorboard是一个非常好的可视化工具,mxnet原来只能可视化神经网络结构图,paddlepaddle原来只能看loss下降的训练收敛图,但是后来mxnet把tensorborad搞进去了,paddlepaddle发布了一个新的工具VisualDL,实现了Tensorborad的功能,还是非常厉害的!大家可以多体验体验,这样就不用像上篇文章手动的去画每个网络结果中间的输出结果图,直接用VisualDL的Image展示就可以了,更加方便我们理解模型,观察模型训练的过程,简单来说,让我们不透明的“炼丹术”变得更加透明清楚了~

 

免责声明:文章转载自《【深度学习系列】PaddlePaddle可视化之VisualDL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python3 字符串方法HTML5安全风险详析之二:Web Storage攻击下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UNIX环境高级编程——网络基础概念

TCP协议分成两个不同的协议:1、网络传输中差错的传输控制协议TCP 2、专门负责对不同网络进行互联的互联网协议IP 网络体系结构概念: 网络体系结构即是指网络的层次结构和每层所使用协议的集合 OSI:(Open System Interconnect Reference Model) ISO:国际标准化组织(International Standard...

8086CPU的结构与功能

CPU结构与功能 不管什么型号的CPU,其内部均有这四大部件 ALU:算术逻辑单元 工作寄存器:分为数据寄存器和地址寄存器 工作寄存器的目的是为了提高运算速度,希望参与运算的数据不从外部存储器去取数据,而是在CPU内部取,所以要有能暂存少量数据的寄存器。 数据寄存器是专门存放数据的,地址寄存器是专门存放地址,进行间接寻址方式,但当地址寄存器不提供地址时...

sql server规范

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigint数据类型   (数据量一大,用int类型就装不下,那以后改造就麻烦了) 5.时间类型建议采用为datetime数据类型 6.禁止使用text、ntext、im...

关于LSTM的输入和训练过程的理解

1.训练的话一般一批一批训练,即让batch_size 个样本同时训练; 2.每个样本又包含从该样本往后的连续seq_len个样本(如seq_len=15),seq_len也就是LSTM中cell的个数; 3.每个样本又包含inpute_dim个维度的特征(如input_dim=7) 因此,输入层的输入数据通常先要reshape: x= np.reshap...

C#基本面试题

重写和重载 重写: 要求:(三大同)参数相同,方法名相同,返回值相同 关键字:基类函数用virtual修饰,派生类用override修饰 注意:不能重写非虚方法或静态方法 重载: 要求:在同一作用域,可以存在相同的函数名,不同参数列表的函数,这组函数称为重载函数 其他 WebAPI和MVC的区别 1、MVC主要用于建站,WebAPI主要用于构建http...

根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax

基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案。 基本上所有前端框架对于网络请求的部分都是基于它来完成的。 在本章节中我们将了解它的基本用法,并且会实现一个与jQuery.ajax功能百分之九十相似的网络请求组件。 我是没有读过jQuery.ajax源码的,并且我也不是一...