在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地址粘貼到瀏覽器中便可以查看. 最終的效果如上。
評論