深度学习神经网络模型可视化的两个方法。
Posted 疯子的梦想@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习神经网络模型可视化的两个方法。相关的知识,希望对你有一定的参考价值。
神经网络模型可视化两种方法
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).
以上是关于深度学习神经网络模型可视化的两个方法。的主要内容,如果未能解决你的问题,请参考以下文章
循环神经网络(LSTM)实现股票预测-深度学习100例 | 第10天
毕业设计 题目:基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别