【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的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节点的地址’
然后会出现以下信息:
Starting TensorBoard 41 on port 6006
(You can navigate to http://127.0.1.1:6006)
将http://127.0.1.1:6006在浏览器中打开,就可以看到web端的可视化了

具体的参数表示的含义可以参照官网的解释
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
def start_trainer(self,X_train,Y_train,X_val,Y_val):
#获得训练器
trainer = self.get_trainer() result_lists = []
def event_handler(event):
if isinstance(event, paddle.event.EndIteration):
if event.batch_id % 10 == 0:
print "\nPass %d, Batch %d, Cost %f, %s" % (
event.pass_id, event.batch_id, event.cost, event.metrics)
if isinstance(event, paddle.event.EndPass):
# 保存训练好的参数
with open('params_pass_%d.tar' % event.pass_id, 'w') as f:
parameters.to_tar(f)
# feeding = ['x','y']
result = trainer.test(
reader=val_reader)
# feeding=feeding)
print "\nTest with Pass %d, %s" % (event.pass_id, result.metrics) result_lists.append((event.pass_id, result.cost,
result.metrics['classification_error_evaluator'])) # 开始训练
train_reader = paddle.batch(paddle.reader.shuffle(
reador.reader_creator(X_train,Y_train),buf_size=200),
batch_size=16) val_reader = paddle.batch(paddle.reader.shuffle(
reador.reader_creator(X_val,Y_val),buf_size=200),
batch_size=16) trainer.train(reader=train_reader,num_passes=20,event_handler=event_handler) #找到训练误差最小的一次结果
best = sorted(result_lists, key=lambda list: float(list[1]))[0]
print 'Best pass is %s, testing Avgcost is %s' % (best[0], best[1])
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画图,输出如下收敛的图:

但是这样不能观察到神经网络在训练过程中的每个神经元的具体变化情况,不如tensorboard的功能多,只能看到我们在训练过程中的loss下降的情况,训练是否收敛等。
PaddlePaddle的新版可视化工具--VisualDL
大概就在上周,1.16日,PaddlePaddle和Echarts团队练手打造了VisualDL可视化工具 ,我试用了以后发现和tensorborad的功能好像!简单说说特性:
- 支持Scaler打点数据展示,可将训练信息以折线图的形式展现出来,方便观察整体趋势,还能在同一个可视化视图中呈现多条折线,方便用户对比分析。
- 支持Image图片展示可轻松查看数据样本的质量,也可以方便地查看训练的中间结果,例如卷积层的输出或者GAN生成的图片。
- 支持Histogram参数分布展示功能,方便用户查看参数矩阵中数值的分布曲线,并随时观察参数数值分布的变化趋势。
- 支持Graph查看深度神经网络的模型结构。
这样一看,其实基本上实现了tensorboard的功能,或者应该简称“Bring TensorBorad To PaddlePaddle”。不知道博客园怎么放gif,具体的图片展示就直接看官网吧
总结
总的来说,Tensorboard是一个非常好的可视化工具,mxnet原来只能可视化神经网络结构图,paddlepaddle原来只能看loss下降的训练收敛图,但是后来mxnet把tensorborad搞进去了,paddlepaddle发布了一个新的工具VisualDL,实现了Tensorborad的功能,还是非常厉害的!大家可以多体验体验,这样就不用像上篇文章手动的去画每个网络结果中间的输出结果图,直接用VisualDL的Image展示就可以了,更加方便我们理解模型,观察模型训练的过程,简单来说,让我们不透明的“炼丹术”变得更加透明清楚了~
【深度学习系列】PaddlePaddle可视化之VisualDL的更多相关文章
- 【深度学习系列】PaddlePaddle垃圾邮件处理实战(二)
		PaddlePaddle垃圾邮件处理实战(二) 前文回顾 在上篇文章中我们讲了如何用支持向量机对垃圾邮件进行分类,auc为73.3%,本篇讲继续讲如何用PaddlePaddle实现邮件分类,将深度 ... 
- 【深度学习系列】关于PaddlePaddle的一些避“坑”技巧
		最近除了工作以外,业余在参加Paddle的AI比赛,在用Paddle训练的过程中遇到了一些问题,并找到了解决方法,跟大家分享一下: PaddlePaddle的Anaconda的兼容问题 之前我是在服务 ... 
- 使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】
		转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 ... 
- 【深度学习系列3】 Mariana CNN并行框架与图像识别
		[深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ... 
- 【深度学习系列2】Mariana DNN多GPU数据并行框架
		[深度学习系列2]Mariana DNN多GPU数据并行框架 本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架. 深度神经网络( ... 
- 深度学习系列 Part(3)
		这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ... 
- 基于TensorFlow的深度学习系列教程 2——常量Constant
		前面介绍过了Tensorflow的基本概念,比如如何使用tensorboard查看计算图.本篇则着重介绍和整理下Constant相关的内容. 基于TensorFlow的深度学习系列教程 1--Hell ... 
- 【深度学习系列】PaddlePaddle之手写数字识别
		上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ... 
- 【深度学习系列】用PaddlePaddle和Tensorflow进行图像分类
		上个月发布了四篇文章,主要讲了深度学习中的"hello world"----mnist图像识别,以及卷积神经网络的原理详解,包括基本原理.自己手写CNN和paddlepaddle的 ... 
随机推荐
- Nodejs真.多线程处理
			前言 Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能 安装方法 npm install threads_a_gogo 下载测试源码 git ... 
- grep命令及基本正则表达式
			grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功 ... 
- IO流之字节流知识总结
			IO流分为字符流和字节流. 字节流;可以读取任何文件,电脑以字节的方式储存 字符流:用来读取字符. 下面是我总结的思维导图. 相关练习代码 public class Demo { @Test publ ... 
- 快速开发基于 HTML5 网络拓扑图应用--入门篇(一)
			计算机网络的拓扑结构是引用拓扑学中研究与大小,形状无关的点.线关系的方法.把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构.网络的拓扑结构 ... 
- TSLint提示错误
			要成为优秀的TS开发人员,必须直接禁用TS的不良特性. 为此,道爷亲自操刀编写了TSLint工具,用来分析我们的TS代码,把潜在的Bug和不良代码全部找出来. 目的是为了保证TS的质量,但是存在的问题 ... 
- 自学Aruba2.3-Aruba Web UI --Configuration面板介绍
			点击返回:自学Aruba之路 自学Aruba2.3-Aruba Web UI --Configuration面板介绍 此文只展示重要面板,大部分通俗易懂就不过多语言介绍, 后期配置实例中再结合理论知识 ... 
- 关于对JavaScript待于完善的一些知识点
			学习JavaScript也存在一段时间,以下是个人对JavaScript中抽象的知识点记录备案,将有待于后面逐个完善...... 1.JavaScript在内存中的体现(内存中栈堆与基本类型及引用类型 ... 
- 微信小程序之实现slideUp和slideDown效果和点击空白隐藏
			怎样实现jq中的slideUp或者slideDown这种动画效果呢,我的思路是用css3的transform: translateY()属性,给需要动画的元素添加上一个动画class. 先上效果图: ... 
- Ajax提交Form表单的一种方法
			待提交的表单 <form id="updatePublicKey" enctype="multipart/form-data"> <div c ... 
- JSON 数据操作
			2018,狗年.如果在你出生日期的年份上加12等于2018的话,私聊我,今年是你的本命年,你得发红包!!! 子(鼠).丑(牛).寅(虎).卯(兔).辰(龙).巳(蛇).午(马).未(羊).申(猴).酉 ... 
