子豪 發自 凹非寺
最近,又一款神經網路視覺化工具火了,給大家介紹下。
這款工具叫做「
nn_vis
」,它採用了新的3D視覺化技術,可以呈現這樣的效果:
其作者表示,之所以建立這個工具,是由於神經網路內部缺乏透明度,很難為不同任務選擇有效的架構。
nn_vis究竟有什麼與眾不同?一起來了解一下。
它能夠建立神經網路模型,還可以透過引數設定,得到不同的呈現形式;
並且,根據引數重要性的評估結果,對神經網路進行剪枝,從而簡化模型;
同時,還可以對神經網路繫結過程實現視覺化。
那麼,這些功能是怎樣實現的呢?
nn_vis利用神經網路最佳化領域的已有方法,採用批標準化、微調以及特徵提取,評估訓練後的神經網路不同部分的重要性。
再結合邊繫結、光線跟蹤、3D impostor和特殊的透明技術等,得到神經網路的3D模型,證明了評估結果的有效性。
具體來看看~
引數準備
首先透過 configs/processing。json ,進行神經網路處理的引數準備,就像這樣:
{
“edge_bandwidth_reduction”: 0。9,
“edge_importance_type”: 0,
“layer_distance”: 0。5,
“layer_width”: 1。0,
“node_bandwidth_reduction”: 0。95,
“prune_percentage”: 0。0,
“sampling_rate”: 15。0,
“smoothing”: true,
“smoothing_iterations”: 8
}
也可以在圖形使用者介面進行設定:
建立神經網路模型
使用視覺化工具start_tool。py,並選擇神經網路Load Processed Network。
除了現有的網路,還可以生成隨機網路,以及處理各種大小的網路。
與最常用的引數相比,視覺化可以使訓練引數更為結構化。
經過不同的訓練,透過旋轉、切換相機位置、截圖,可以得到類似這樣的效果:
邊越靠近,神經網路這些部分的泛化程度就越大,即更容易適應新的資料樣本。
左側的神經網路沒有經過隨機分配的值的訓練:節點和邊距離中心分佈的更遠;
中間的則經過一些基本訓練,達到90%以上的準確性。
右側的神經網路以相同方式訓練,並且採用L1正則化防止過擬合,得到了具有相似準確性的最窄的模型。
評估各節點的重要性
根據節點和邊的重要性進行著色,不同的顏色表示神經網路的每一部分,用來預測它們的關聯性。
透過左圖可以看出,修剪不重要的引數,不會像重要引數那樣影響模型的預測準確性。
右圖則顯示出,根據類別的重要性修剪神經網路時,重要類別能夠保留準確性。與整體準確性相比,重要類別的準確性始終更高。
透過對神經網路進行剪枝,即剪掉不重要的冗餘引數,降低了模型的複雜度和過擬合風險,提升了泛化程度,得到更高效、訓練成本更低的神經網路。
由此證明了重要性評估的有效性。
繫結過程視覺化
透過不斷迭代實現神經網路的繫結,大致過程是這樣的:
視覺化的神經網路繫結過程:
需要注意的是,處理每層的神經網路需要一定時間,計算並不是實時的。
不同的視覺化效果
在圖形使用者介面或者透過configs/rendering。json,修改著色器引數,包括:
尺寸、物件的基本不透明度、即重要性對不透明度的影響比率、相機的距離對不透明度的影響比率、物體上不同點的密度對不透明度的影響比率、根據物件的重要性定義渲染物件的閾值。
即可得到不同的視覺化效果:
對這款工具感興趣的朋友,可以透過文末連結獲取~
GitHub專案地址:
https://github。com/julrog/nn_vis