外国小哥,把整个 CNN 都给可视化了,卷积、池化清清楚楚!
最近,有個項目在社交媒體上火起來了,項目作者是來自維也納的3D特效師。
創建這樣一個CNN可視化工具,是它在碩士論文完成,因為當初學的就是神經網絡,學的過程中很難明白卷積層之間是如何相互連接,又如何與不同類型的層連接的。
所以創建這個項目,主要能讓此工具的主要功能包括,卷積、最大池化和完全連接層的可視化表示,還有各種能實現更清晰可視化的簡化機制等等。
發布這個自己學習成功成果,就是想讓初學者通過最直觀的方式,來get到CNN的重點,也讓人更多深刻的了解明白!
怎么用Unity搞出一個3D網絡
在正式上手Unity前,作者先在Houdini軟件中,搭建了一個可視化的3D網絡原型。
也就是說,要給Unity版3D網絡提供一個搭建思路,提前準備好實現展示卷積計算的方法、特征圖的形狀、邊綁定的效果等問題。
提前,預設好神經網絡的“形狀”,由于之前并沒有用過Unity,作者先學習了著色器和過程式幾何相關的知識。
這里面,作者發現了一些局限性,他采用的是Unity為著色器開發的語言Shaderlab。
這個語言無法使用著色變化,只有對語義進行預定義的變量,才能讓它在頂點、幾何和像素著色器之間傳遞。
而且,它無法任意分配頂點屬性,只有位置、顏色、UV等預定義屬性。(可能這也是3D網絡無法實時改變顏色的原因之一)
在研究了一些實例化(instancing)相關的概念后,作者計劃采用幾何著色器的方法生成神經網絡的連線。其中起點和終點被傳遞到頂點著色器,并直接轉發到幾何著色器。
這些線,最多可以由120個頂點組成,因為Unity允許的幾何著色器能創建的變量的標量浮點數為1024。
隨后,從模型的TensorFlow代碼中,生成對應的3D神經網絡圖像。
其中,Tensorflow-native.ckpt格式的文件,需要存儲重構模型圖所需的數據、二進制的權重讀取和激活值,以及特定層的名字。
在那之后,需要加載這些檢查點文件、啟動TensorFlow會話,輸入訓練示例,可以很好的查詢每一層的激活函數。
隨后編寫一個json文件,存儲每一層的形狀、名稱、權重和激活函數,便于讀取。
最終展示的效果,看起來是讓人容易讀懂!
這個項目可不止這國外的小哥想到演示,就在去年時候,一位中國博士就可視化了卷積神經網絡,也是每一層的變化都展示得非常清楚,如下圖顯示那樣!
而且在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
往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的外国小哥,把整个 CNN 都给可视化了,卷积、池化清清楚楚!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apriori关联规则算法实现及其原理(
- 下一篇: 图像处理之图像平滑