天天看點

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

作者:生信寶典

最近,有個項目在社交媒體上火起來了,項目作者是來自維也納的3D特效師。

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

建立這樣一個CNN可視化工具,是它在碩士論文完成,因為當初學的就是神經網絡,學的過程中很難明白卷積層之間是如何互相連接配接,又如何與不同類型的層連接配接的。

是以建立這個項目,主要能讓此工具的主要功能包括,卷積、最大池化和完全連接配接層的可視化表示,還有各種能實作更清晰可視化的簡化機制等等。

釋出這個自己學習成功成果,就是想讓初學者通過最直覺的方式,來get到CNN的重點,也讓人更多深刻的了解明白!

怎麼用Unity搞出一個3D網絡

在正式上手Unity前,作者先在Houdini軟體中,搭建了一個可視化的3D網絡原型。

也就是說,要給Unity版3D網絡提供一個搭建思路,提前準備好實作展示卷積計算的方法、特征圖的形狀、邊綁定的效果等問題。

提前,預設好神經網絡的“形狀”,由于之前并沒有用過Unity,作者先學習了着色器和過程式幾何相關的知識。

這裡面,作者發現了一些局限性,他采用的是Unity為着色器開發的語言Shaderlab。

這個語言無法使用着色變化,隻有對語義進行預定義的變量,才能讓它在頂點、幾何和像素着色器之間傳遞。

而且,它無法任意配置設定頂點屬性,隻有位置、顔色、UV等預定義屬性。(可能這也是3D網絡無法實時改變顔色的原因之一)

在研究了一些執行個體化(instancing)相關的概念後,作者計劃采用幾何着色器的方法生成神經網絡的連線。其中起點和終點被傳遞到頂點着色器,并直接轉發到幾何着色器。

這些線,最多可以由120個頂點組成,因為Unity允許的幾何着色器能建立的變量的标量浮點數為1024。

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

随後,從模型的TensorFlow代碼中,生成對應的3D神經網絡圖像。

其中,Tensorflow-native.ckpt格式的檔案,需要存儲重構模型圖所需的資料、二進制的權重讀取和激活值,以及特定層的名字。

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

在那之後,需要加載這些檢查點檔案、啟動TensorFlow會話,輸入訓練示例,可以很好的查詢每一層的激活函數。

随後編寫一個json檔案,存儲每一層的形狀、名稱、權重和激活函數,便于讀取。

最終展示的效果,看起來是讓人容易讀懂!

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

這個項目可不止這國外的小哥想到示範,就在去年時候,一位中國博士就可視化了卷積神經網絡,也是每一層的變化都展示得非常清楚,如下圖顯示那樣!

外國小哥,把整個 CNN 都給可視化了,卷積、池化清清楚楚!

而且在GitHub上星标的5千2星星,熱度還行,這個項目,同樣用到了邊綁定、光線追蹤等技術,與特征提取、微調和歸一化相結合,将神經網絡可視化。

這項項目希望能借由這些技術,來估計神經網絡中不同部分的重要性。

如果你對這類3D神經網絡可視化感興趣,可以去小編給的GitHub上項目了解相關詳情哦!

開發過程:

https://vimeo.com/stefsietz

已開源的3D神經網絡項目:

https://github.com/julrog/nn_vis

中國版的神經網絡項目

https://github.com/poloclub/cnn-explainer

參考連結:

https://www.reddit.com/r/MachineLearning/comments/leq2kf/d_convolution_neural_network_visualization_made/

https://mp.weixin.qq.com/s/tmx59J75wuRii4RuOT8TTg

https://vimeo.com/stefsietz

http://portfolio.stefansietzen.at/

http://visuality.at/vis2/detail.html