上篇文章咱们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化。在讲VisualDL以前,咱们先了解一下经常使用的Tensorflow的可视化工具---Tensorboard。linux
Tensorflow的可视化git
Tensorboard是Tensorflow自带的可视化模块,咱们能够经过Tensorboard直观的查看神经网络的结构,训练的收敛状况等。要想掌握Tensorboard,咱们须要知道一下几点:github
数据形式 web
(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的实例app
这里我就不讲的特别详细啦,若是用过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端的可视化了学习
具体的参数表示的含义能够参照官网的解释
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 "\nPass %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 "\nTest 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画图,输出以下收敛的图:
可是这样不能观察到神经网络在训练过程当中的每一个神经元的具体变化状况,不如tensorboard的功能多,只能看到咱们在训练过程当中的loss降低的状况,训练是否收敛等。
PaddlePaddle的新版可视化工具--VisualDL
大概就在上周,1.16日,PaddlePaddle和Echarts团队练手打造了VisualDL可视化工具 ,我试用了之后发现和tensorborad的功能好像!简单说说特性:
这样一看,其实基本上实现了tensorboard的功能,或者应该简称“Bring TensorBorad To PaddlePaddle”。不知道博客园怎么放gif,具体的图片展现就直接看官网吧
总结
总的来讲,Tensorboard是一个很是好的可视化工具,mxnet原来只能可视化神经网络结构图,paddlepaddle原来只能看loss降低的训练收敛图,可是后来mxnet把tensorborad搞进去了,paddlepaddle发布了一个新的工具VisualDL,实现了Tensorborad的功能,仍是很是厉害的!你们能够多体验体验,这样就不用像上篇文章手动的去画每一个网络结果中间的输出结果图,直接用VisualDL的Image展现就能够了,更加方便咱们理解模型,观察模型训练的过程,简单来讲,让咱们不透明的“炼丹术”变得更加透明清楚了~