上篇文章咱們講了如何對模型進行可視化,用的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展現就能夠了,更加方便咱們理解模型,觀察模型訓練的過程,簡單來講,讓咱們不透明的「煉丹術」變得更加透明清楚了~