本文介紹基於Python語言,對神經網路模型的結構進行可視化繪圖的方法。 最近需要進行神經網路結構模型的可視化繪圖工作。查閱多種方法後,看到很多方法都比較麻煩,例如單純利用graphviz模塊,就需要手動用DOT語言進行圖片描述,比較花時間;最終,發現利用第三方的ann_visualizer模塊,可 ...
本文介紹基於Python語言,對神經網路模型的結構進行可視化繪圖的方法。
最近需要進行神經網路結構模型的可視化繪圖工作。查閱多種方法後,看到很多方法都比較麻煩,例如單純利用graphviz
模塊,就需要手動用DOT語言進行圖片描述,比較花時間;最終,發現利用第三方的ann_visualizer
模塊,可以實現對已有神經網路的直接可視化,過程較為方便,本文對此加以詳細介紹。
此外,如果需要在MATLAB中實現神經網路構建與簡單的可視化,大家可以查看MATLAB人工神經網路ANN代碼;如果要藉助軟體或線上工具進行不需要代碼的神經網路可視化,可以查看我們後期的博客。
相關環境的版本信息:Anaconda Navigator:1.10.0
;Python:3.8.5
。
首先,下載與安裝必要的模塊ann_visualizer
。打開Anaconda Prompt (Soft)。
在彈出的界面中輸入:
pip install ann_visualizer
即可完成ann_visualizer
模塊的安裝。
接下來,我們就可以藉助以下僅僅一句代碼對神經網路模型進行可視化了。
ann_viz(DNNModel,view=True,filename='G:/CropYield/02_CodeAndMap/01_SavedPicture/MyANN.gv',title='ANN')
其中,DNNModel
就是我們已經建立好的神經網路模型,任意神經網路模型均可——可以是一個簡單的淺層人工神經網路,也可以是一個相對複雜的全連接深度神經網路;view
表示是否在代碼執行後直接顯示繪圖結果;filename
是繪圖結果的保存位置,需要以.gv
結尾;title
就是神經網路圖片的名稱。
在這裡,我就直接以Python TensorFlow深度神經網路回歸:keras.Sequential中介紹並建立的深度神經網路加以可視化。
第一次運行代碼時發現,出現以下報錯:
報錯提示我沒有安裝graphviz
模塊,但其實之前在進行隨機森林決策樹的可視化(也就是Python實現隨機森林RF並對比自變數的重要性)時,早已經將這一模塊安裝過了,並且當時用到graphviz
這一模塊的代碼也沒有報錯。通過查閱,發現這裡需要重新安裝一下python-graphviz
這個新的模塊。因此我們打開Anaconda Prompt (Soft),輸入代碼:
conda install python-graphviz
如下圖所示:
安裝之後這裡就不報錯啦~
結果緊接著又報出了新的錯誤,說我的keras
模塊沒有安裝:
這就不對了,明明在進行深度神經網路構建時都沒有出現問題,甚至在這一句報錯的下方連深度神經網路的誤差繪製曲線都能顯示(誤差曲線的精度的確很差,大家不用在意~因為這裡我們僅僅是做一個示範,所以Epoch次數就調得很小),說明keras
模塊應該是沒問題的。
隨後考慮到,這裡報錯的keras
是在ann_visualizer
的文件環境下,可能是環境不同導致的。打開Anaconda Navigator,在base (root)
環境下確實找不到keras
:
那麼我這裡就圖方便,直接在base (root)
環境下再安裝一個keras
。安裝方法同上,輸入代碼即可:
pip install keras
然後這裡就不報錯啦~
接下來,經過多次嘗試發現,這一方法進行神經網路可視化時,一是不能存在正則化層與BatchNormalization層;二是LeakyReLU層與Dropout層的總數量不能過多,否則繪圖結果會出現問題——這就顯得這一可視化方法稍微有點雞肋了,但是其對於基本的神經網路繪圖而言其實也已經很不錯了。因此,我就將Python TensorFlow深度神經網路回歸:keras.Sequential中的神經網路上述對應的層刪除或註釋掉。
如下圖,首先,將當初我的代碼對應的LeakyReLU
層與Dropout
層註釋掉:
然後執行代碼,即可進行神經網路的可視化。且繪製出的圖將會自動打開在PDF閱讀軟體中,如下圖(版面有限,這裡就只是繪圖結果的一部分)。
還是很不錯的~我們還可以直接將其轉換為圖片格式,看起來就更直觀了:
如果再取消Dropout
層的註釋,即繪圖時加上Dropout
層,也還是很不錯的:
如果我們再加上LeakyReLU
層,就成了這個亂七八糟、不太正確的樣子(原圖實在太大了,就只給大家截取圖片的一部分):
可以看到,這樣的話就有些問題了。
最後,我們看一下這個ann_visualizer
第三方庫的源代碼,可以看到該庫支持繪圖的不同種類神經網路層;如果大家的神經網路包含這些層,就可以用ann_visualizer
這一第三方庫進行繪圖。
至此,大功告成。