神經網路模型可視化兩種方法
- keras自帶的函式
- 使用Netron
- 總結注意
keras自帶的函式
利用keras.utils.vis_utils模塊,需要下載并配置graphviz,不會配置的可以去搜,其中plot_model 有 4 個可選引數:
- show_shapes (默認為 False) 控制是否在圖中輸出各層的尺寸,
- show_layer_names (默認為 True) 控制是否在圖中顯示每一層的名字,
- expand_dim(默認為 False)控制是否將嵌套模型擴展為圖形中的聚類,
- dpi(默認為 96)控制影像 dpi,
以自己的模型為例,下述是一個名為simple_CNN的神經網路模型,在pycharm中新建一個model.py檔案,復制以下代碼,然后運行該.py檔案,即會生成一個模型圖片示意圖,
from keras.layers import Activation, Conv2D, Dropout, Dense, Flatten
from keras.layers import ReLU
from keras.layers import AveragePooling2D, BatchNormalization
from keras.models import Sequential
# 引入模型可視化的依賴檔案
from keras.utils import plot_model
def simple_CNN(input_shape, num_classes):
model = Sequential()
model.add(Conv2D(16, (7, 7), padding='same',input_shape=input_shape))
model.add(ReLU())
model.add(BatchNormalization())
model.add(AveragePooling2D(pool_size=(5, 5),strides=(2, 2), padding='same'))
model.add(Dropout(.5))
model.add(Conv2D(32, (5, 5), padding='same'))
model.add(ReLU())
model.add(BatchNormalization())
model.add(AveragePooling2D(pool_size=(3, 3),strides=(2, 2), padding='same'))
model.add(Dropout(.5))
model.add(Conv2D(32, (3, 3), padding='same'))
model.add(ReLU())
model.add(BatchNormalization())
model.add(AveragePooling2D(pool_size=(3, 3),strides=(2, 2), padding='same'))
model.add(Dropout(.5))
# Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連接層的過渡
model.add(Flatten())
# Dense表示全連接層
model.add(Dense(1028))
model.add(ReLU())
model.add(Dropout(0.5))
model.add(Dense(1028))
model.add(ReLU())
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
return model
if __name__ == "__main__":
input_shape = (64, 64, 1)
num_classes = 7
model = simple_CNN((48, 48, 1), num_classes)
model.summary()
# keras自帶函式模型可視化以圖片展示
plot_model(model, show_shapes=True,to_file='model.png')
下圖即生成的模型的結構圖片,可以看到有很多引數,但是圖片太長,且是PNG格式的,


使用Netron
Netron可支持的模型檔案格式較多,可以自行嘗試,這里以使用keras神經網路框架撰寫的神經網路模型為例,
在pycharm中打開解釋器設定下載netron

通常我們在pycharm中的train.py中撰寫開始訓練模型有關的內容時,會用到如下代碼,
model.fit(faces, emotions, batch_size=128, epochs=1000,callbacks=model_callbacks,verbose=1)
# fit函式內的一些設定
# verbose=1,
# callbacks=model_callbacks,回呼模型保存函式
# validation_split=0.1,驗證集的比例
# shuffle=True)隨機打亂輸入樣本的順序
訓練之后,會生成一些hdf5檔案,這些檔案的產生還需要在train.py中進行一些設定才可以從訓練的程序中保存下來,

然后新建一個modelView.py檔案,代碼如下,一定要注意檔案路徑的問題
# 使用netron進行模型可視化
import netron
# 模型的路徑
modelPath = "trained_models/simpler_CNN.01-0.32.hdf5"
# 啟動模型
netron.start(modelPath)
隨后運行modelView.py檔案,生成如下地址,

瀏覽器打開該地址,出現我們訓練的模型可視圖了,

總結注意
一、在使用第一種keras自帶的方法時,一定要注意定義模型的頭檔案參考是from keras.layers import xx,不能是from tensorflow.keras.layers import xx,
二、使用第二種Netron時要注意該工具所支持的檔案格式,有如下格式:
ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras), CoreML (.mlmodel), Caffe2(predict_net.pb, predict_net.pbtxt), MXNet (.model, -symbol.json) and TensorFlow Lite (.tflite). Netron has experimental support for Caffe (.caffemodel, .prototxt), PyTorch (.pth), Torch (.t7), CNTK(.model, .cntk), PaddlePaddle (model), Darknet (.cfg), scikit-learn (.pkl), TensorFlow.js(model.json, .pb) and TensorFlow (.pb, .meta, .pbtxt).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/430251.html
標籤:AI
上一篇:單目相機標定原理及影像坐標到世界坐標的求解(影像處理)
下一篇:ConViT
