可视化深度学习神经网络模型的两种方法。

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://blog.csdn.net/weixin_48681463/article/details/123054933

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年2月22日 下午3:30
下一篇 2022年2月22日 下午3:46

相关推荐