本文介紹基於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
這一第三方庫進行繪圖。
至此,大功告成。