一、TensorBoard的設計出發點
瞭解深度學習、神經網路的朋友應該深有感觸,對於複雜的網路,但從枯燥的程式碼上我們很難從宏觀對網路有一個整體的把握,有時候會很難理解神經網路的結構,它就像一個a black box,我們只需要給它想要的輸入,它返回給我們模型和結果。
二、TensorBoard的結構
TensorBoard 的設計理念就是想讓我們能更好的以圖形化的方式瞭解我們創造的結構,幫我們指示一條明路,TensorBoard功能很多,內容也十分的瑣碎。因此我們可以藉手寫數字識別這個簡單的小專案,瞭解TensorBoard的思想和使用方法。
(1)對於手寫數字識別,我們定義如下的一個簡單的結構,兩層卷積池化層後接兩層全連線層。
(2)具體每一層結構的主要程式碼
卷積層和全連線層:
前饋網路(Feed-forward Setup):
定義損失函式(Loss ):
定義訓練單元( Trainning):
(3)模型訓練結果
可以看到完成了2000步迭代之後,模型的並沒有隨著訓練的進行,得到準確率的提高,甚至還有所下降,也就是說並沒有學習到很好的分類模型。這時候我們需要尋找問題出現在哪裡,對於邏輯比較簡單的程式碼或許我們還能找到問題所在,但是對於複雜的網路,我們就需要一個很好的視覺化工具來幫助我們尋找模型的問題。
(4)TensorBoard——TensorFlow圖結構的視覺化工具
想完成結構的視覺化,我們需要把用一個類儲存模型的結構,在TensorFlow中有一個類FileWriter(),它可以把TensorFlow的每一層的結構資料寫入到磁碟中,方便TensorBoard在硬碟上讀取模型結構。
使用方式:
a.定義模型結構存放的目錄
writer = tf.summary.Filewriter(“/tmp”)
b.將設計的TensorFlow圖結構新增進去
writer,add_graph(sess.graph)
c. 進入在存放的目錄,在終端啟動TensorBoard
tensorboard --logdir /tmp
之後終端會返回我們一個網址,在瀏覽器中開啟網址,就能看到我們定義的網路的結構:
5)TensorBoard名稱空間
由上圖我們可以看到,目前得到的圖結構看上去似乎仍然不是很清晰,那是因為我們還沒有使用TensorBoard的名稱空間。
在TensorFlow中,每一個圖結構都是基於命名系統的,每個運算有自己命名,透過控制命名的方式是為每個節點命名並建立範圍,會讓所有相關的運算擁有同樣的命名結構。
具體在程式碼中的實驗如下:
首先給一些重要的運算操作命名,然後應用名稱範圍到整個層。雖然變數的名字都是W或B,但是因為他們在不同的名稱空間中,所以並不會引起衝突
6)TensorBoard中的summary
至此,只是將TensorFlow中的模型結構圖結構視覺化,我們還沒有喂入資料資料看模型的訓練過程和效果。
TensorFlow中提供summaries——一種特殊型別的TensorFlow運算,它可以從圖結構中代入一個張量。我們需要把TensorFlow執行過程產生的各種資料透過summaries寫入到磁碟中。
具體的summaries分以下幾個型別:
a.標量summary,寫下單一數值,創造線表格
b.影象summary,寫出影象
可以看生成的影象資料什麼樣子,或檢查輸入資料是否格式正確
7)執行summary
TensorFlow中給我提供了一個非常方便的merge 的函式,可以彙總我們建立的所有的summary到一個單一目標,只需要執行彙總的目標,就能在圖表中獲得每一個summary的資料。
8)TensorBoard的視覺化結果
透過檢視loss和accuracy的結果,我們可以發現模型根本沒有進行有效的學習,很可能是模型的引數設定有問題,檢查程式碼,我們發現,模型的W和B是0初始化,這樣的化沒辦法進行梯度更新。
一、TensorBoard的設計出發點
瞭解深度學習、神經網路的朋友應該深有感觸,對於複雜的網路,但從枯燥的程式碼上我們很難從宏觀對網路有一個整體的把握,有時候會很難理解神經網路的結構,它就像一個a black box,我們只需要給它想要的輸入,它返回給我們模型和結果。
二、TensorBoard的結構
TensorBoard 的設計理念就是想讓我們能更好的以圖形化的方式瞭解我們創造的結構,幫我們指示一條明路,TensorBoard功能很多,內容也十分的瑣碎。因此我們可以藉手寫數字識別這個簡單的小專案,瞭解TensorBoard的思想和使用方法。
(1)對於手寫數字識別,我們定義如下的一個簡單的結構,兩層卷積池化層後接兩層全連線層。
(2)具體每一層結構的主要程式碼
卷積層和全連線層:
前饋網路(Feed-forward Setup):
定義損失函式(Loss ):
定義訓練單元( Trainning):
(3)模型訓練結果
可以看到完成了2000步迭代之後,模型的並沒有隨著訓練的進行,得到準確率的提高,甚至還有所下降,也就是說並沒有學習到很好的分類模型。這時候我們需要尋找問題出現在哪裡,對於邏輯比較簡單的程式碼或許我們還能找到問題所在,但是對於複雜的網路,我們就需要一個很好的視覺化工具來幫助我們尋找模型的問題。
(4)TensorBoard——TensorFlow圖結構的視覺化工具
想完成結構的視覺化,我們需要把用一個類儲存模型的結構,在TensorFlow中有一個類FileWriter(),它可以把TensorFlow的每一層的結構資料寫入到磁碟中,方便TensorBoard在硬碟上讀取模型結構。
使用方式:
a.定義模型結構存放的目錄
writer = tf.summary.Filewriter(“/tmp”)
b.將設計的TensorFlow圖結構新增進去
writer,add_graph(sess.graph)
c. 進入在存放的目錄,在終端啟動TensorBoard
tensorboard --logdir /tmp
之後終端會返回我們一個網址,在瀏覽器中開啟網址,就能看到我們定義的網路的結構:
5)TensorBoard名稱空間
由上圖我們可以看到,目前得到的圖結構看上去似乎仍然不是很清晰,那是因為我們還沒有使用TensorBoard的名稱空間。
在TensorFlow中,每一個圖結構都是基於命名系統的,每個運算有自己命名,透過控制命名的方式是為每個節點命名並建立範圍,會讓所有相關的運算擁有同樣的命名結構。
具體在程式碼中的實驗如下:
首先給一些重要的運算操作命名,然後應用名稱範圍到整個層。雖然變數的名字都是W或B,但是因為他們在不同的名稱空間中,所以並不會引起衝突
6)TensorBoard中的summary
至此,只是將TensorFlow中的模型結構圖結構視覺化,我們還沒有喂入資料資料看模型的訓練過程和效果。
TensorFlow中提供summaries——一種特殊型別的TensorFlow運算,它可以從圖結構中代入一個張量。我們需要把TensorFlow執行過程產生的各種資料透過summaries寫入到磁碟中。
具體的summaries分以下幾個型別:
a.標量summary,寫下單一數值,創造線表格
b.影象summary,寫出影象
可以看生成的影象資料什麼樣子,或檢查輸入資料是否格式正確
7)執行summary
TensorFlow中給我提供了一個非常方便的merge 的函式,可以彙總我們建立的所有的summary到一個單一目標,只需要執行彙總的目標,就能在圖表中獲得每一個summary的資料。
8)TensorBoard的視覺化結果
透過檢視loss和accuracy的結果,我們可以發現模型根本沒有進行有效的學習,很可能是模型的引數設定有問題,檢查程式碼,我們發現,模型的W和B是0初始化,這樣的化沒辦法進行梯度更新。