這次我們會介紹如何視覺化神經網絡。因為很多時候我們都是做好了一個神經網絡,但是沒有一個圖像可以展示給大家看。這一節會介紹一個TensorFlow的視覺化工具 — “tensorboard”通過使用這個工具我們可以很直覺的看到整個神經網路的結構、框架。以前幾章的代碼為例:相關程式碼通過tensorflow的工具大致可以看到,今天要顯示的神經網路差不多是這樣子的。
圖1 神經網路
同時我們也可以展開看每個layer中的一些具體的結構:
圖2 神經層
通過閱讀代碼和之前的圖片我們大概知道了此處是有一個輸入層(inputs),一個隱藏層(hidden layer),還有一個輸出層(output) 現在可以看看如何進行可視化。
建立視覺化:
首先從input開始
圖3 input
對於輸入我們進行如下修改:首先,可以為xs指定名稱為x_in:
圖4 指定xs input名稱
然後再次對ys指定名稱y_in:
圖5 指定ys input名稱
這裡指定的名稱將來會在視覺化的多層輸入中顯示出來,使用tf.name_scope('inputs')可以將xs和ys包含進來,形成一個大的層疊,並附有名字就是with tf.name_scope()方法裡的參數
圖6 視覺化函數
接下來開始編輯layer,請看編輯前的程式片段:
圖7 神經層網路
這裡的名字應該叫layer,下面是編輯後的:
圖8 視覺化layer神經層網路
在定義完大的框架圖層之後,同時也需要定義每個一個'框架'裡面的小零件:(重量偏差和激活函數):現在先對重量定義:定義的方法同上,可以使用tf.name.scope( )方法,同時也可以在Weights中指定名稱W。即為
圖9 視覺化weights變數
接著繼續定義biases,定義方式同上
圖10 視覺化biases變數
activation_function的話,可以暫時忽略。因為當你自己選擇使用tensorflow中的激勵函數(activation function)的時候,tensorflow會添加名稱。最終,layer形式如下。
圖11 視覺化神經層函數
效果如下:(有沒有看見剛才定義layer裡面的“內部構造”呢?)
圖12 視覺化神經層
最後編輯損失部分:將與tf.name_scope()添加在loss上方,並為它開始稱為loss
圖13 loss視覺化
這語法就是“繪製” loss了,如下:
圖14 loss視覺圖層
使用tf.name_scope()再次對train_step部分進行編輯,如下
圖15 train視覺化
我們需要使用tf.summary.FileWriter() (tf.train.SummaryWriter() 這種方式已經在tf >= 0.12 版本中放棄) 將上面'繪畫'出的圖保存到一個目錄中,以方便後期在瀏覽器中可以瀏覽。這個方法中的第二個參數需要使用sess.graph,因此我們需要把這句話放在獲取session的後面。這裡的graph是將前面定義的框架信息收集起來,然後放在logs/目錄下面。
圖15 視覺圖存至logs檔案夾
最後在你的terminal(終端)中,使用以下命令。
圖16 觀看視覺圖指令
同時將終端中輸出的網址複製到瀏覽器中,便可以看到之前定義的視覺圖框架了。
tensorboard 還有很多其他的參數,希望大家可以多多了解,可以使用tensorboard --help 查看tensorboard的詳細參數。
可能會遇到的問題:
(1) 而且與 tensorboard 兼容的瀏覽器是“Google Chrome”。使用其他的瀏覽器不保證所有內容都能正常顯示。
(2) 同時注意,如果使用 http://0.0.0.0:6006 網址打不開的朋友們,請使用 http://localhost:6006,大多數朋友都是這個問題。
(3) 請確保你的tensorboard 指令是在你的logs 文件根目錄執行的。如果在其他目錄下,比如Desktop等…可能不會成功看到圖。比如在下面這個目錄,你要cd 到project 這個地方執行/project > tensorboard --logdir logs。
評論