人工智慧-Tensorboard 視覺化好幫手2

在Tensorboard視覺化好幫手1講到了,如何視覺化TesorFlow整個神經網路結構的過程。其實tensorboard還可以視覺化訓練過程( biase變化過程),這節重點講一下可視覺化訓練過程的圖表是如何做的。請看下圖, 這是如何做到的呢?

     
                                                                                                                                                                                 
 圖1 TensorBoard Distributions頁面

在histograms裡面我們還可以看到更多的layers的變化:

  
                                                                                                                                                             
圖2 TensorBoard Histograms頁面

這裡還有一個events,在這次練習中我們會把整個訓練過程中的誤差值(loss)在event裡面顯示出來,甚至你可以顯示更多你想要顯示的東西。

   
                                                                                                                                                           圖3 TensorBoard events 頁面

以上是使用TensorBoard來視覺化參數,來達到分析的效果。以下會繼續介紹要如何添加程式來達到以上圖表的效果。

製作輸入源:

由於這節我們觀察訓練過程中神經網路的變化,所以首先要增加一些模擬數據。 Python的 numpy 工具包可以幫助我們製造一些模擬數據。所以我們先導入這個工具包:
                                                                                                                                                            
 
圖4 加入 numpy工具包

然後使用 np 中的 np.linespace() 產生隨機的數字,同時為了模擬更加真實我們會增加一些Noise,這些Noise是通過 np.random.normal() 隨機產生的。Noise隨機變數的用意在於,模擬真實世界的情況,使模擬出來的參數與曲線更接近真實狀況。
 
 圖5 增加noise變數

輸入源的問題解決之後,我們開始製作對Weights和biases的變化圖表吧。我們期望可以做到如下的效果,那麼首先從 layer1/weight 做起。



 圖6 Weights與biases變化的圖表

通過上圖的觀察我們發現每個 layer 後面有一個數字: layer1和layer2。於是我們在 add_layer() 方法中添加一個參數 n_layer,用來標示層數,並且用變數layer_name 代表其每層的名稱,程式碼如下:

 圖7 增加layer層程式碼

接下來,我們層中的Weights設置變化圖,tensorflow中提供了tf.histogram_summary()方法,用來繪製圖片,第一個參數是圖表的名稱,第二個參數是圖表要記錄的變數。

 圖8 增加繪製Weights變數與變數名稱的程式碼

同樣的方法我們對biases進行繪製圖表:
 

圖9 增加繪製biases變數與變數名稱的程式碼

我們對output也使用同樣的方法:
  

 圖10 增加繪製output變數與變數名稱的程式碼

最終經過我們的修改 , addlayer()方法成為如下的樣子:
  
  圖11 最終增加圖表的程式碼

修改之後的名稱會顯示在每個tensorboard中每個圖表的上方顯示,如下圖所示:
   
圖12 在TensorBoard 顯示的layer1

設定loss變化圖:

Loss 的變化圖和之前設置的方法略有不同。loss是在TesnorBorad的event下面的,這是由於我們使用的是tf.scalar_summary()方法。
    
圖13 TensorBoard loss圖表

觀看loss的變化比較重要。當你的loss呈下降的趨勢,說明你的神經網路訓練是有效果的。修改後的程式碼片段如下:
   

 圖14 增加loss參數圖表化程式碼

把所有訓練圖合併:

接下來,開始把所有的訓練圖表合併成一整包資訊。tf.merge_all_summaries()方法會對我們所有的 summaries 合併到一起。因此在原有程式碼片段中添加:
  
 圖15 把所有視覺化參數合併在一起

訓練參數:

假定給出了x_data,y_data並且訓練1000次。
 
圖16 訓練1000次

以上這些僅僅可以記錄繪製出訓練的圖表,但是不會記錄訓練的數據。為了較直觀顯示訓練過程中每個參數的變化,我們每隔上50次就記錄一次結果,同時我們也應注意,merged也是需要run 才能發揮作用的,所以在for loop中寫下:
   
圖17 每50步記錄一次數據

最後修改後的片段如下:
  
圖18 總共訓練1000步,每50步記錄一次數據

在TensorBoard中察看效果:

程序運行完畢之後, 會產生logs目錄,使用命令 tensorboard --logdir logs

注意: 本節內容會用到瀏覽器,而且與 tensorboard 兼容的瀏覽器是 “Google Chrome”。使用其他的瀏覽器不保證所有內容都能正常顯示。

 
圖19 產生TensorBoard圖表指令


   
圖20 TensorBoard 網頁產生的分析圖表

將輸出中顯示的URL地址粘貼到瀏覽器中便可以查看. 最終的效果如上。


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論