本文将会介绍如何利用Keras来实现模型的保存、读取以及加载。
本文使用的模型为解决IRIS数据集的多分类问题而设计的深度神经网络(DNN)模型,模型的结构示意图如下:
具体的模型参数可以参考文章:Keras入门(一)搭建深度神经网络(DNN)解决多分类问题。
模型保存
Keras使用HDF5文件系统来保存模型。模型保存的方法很容易,只需要使用save()方法即可。
以Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中的DNN模型为例,整个模型的变量为model,我们设置模型共训练10次,在原先的代码中加入Python代码即可保存模型:
# save model
print("Saving model to disk \n")
mp = "E://logs/iris_model.h5"
model.save(mp)
保存的模型文件(iris_model.h5)如下:
模型读取
保存后的iris_model.h5以HDF5文件系统的形式储存,在我们使用Python读取h5文件里面的数据之前,我们先用HDF5的可视化工具HDFView来查看里面的数据:
我们感兴趣的是这个模型中的各个神经层之间的连接权重及偏重,也就是上图中的红色部分,model_weights里面包含了各个神经层之间的连接权重及偏重,分别位于dense_1,dense_2,dense_3中。蓝色部分为dense_3/dense_3/kernel:0的数据,即最后输出层的连接权重矩阵。
有了对模型参数的直观认识,我们要做的下一步工作就是读取各个神经层之间的连接权重及偏重。我们使用Python的h5py这个模块来这个iris_model.h5这个文件。关于h5py的快速入门指南,可以参考文章:h5py快速入门指南。
使用以下Python代码可以读取各个神经层之间的连接权重及偏重数据:
import h5py
# 模型地址
MODEL_PATH = ‘E://logs/iris_model.h5’
# 获取每一层的连接权重及偏重
print(“读取模型中…”)
with h5py.File(MODEL_PATH, ‘r’) as f:
dense_1 = f[’/model_weights/dense_1/dense_1’]
dense_1_bias = dense_1[‘bias:0’][:]
dense_1_kernel = dense_1[‘kernel:0’][:]
dense_2 <span class="token operator">=</span> f<span class="token punctuation">[</span><span class="token string">'/model_weights/dense_2/dense_2'</span><span class="token punctuation">]</span>
dense_2_bias <span class="token operator">=</span> dense_2<span class="token punctuation">[</span><span class="token string">'bias:0'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">]</span>
dense_2_kernel <span class="token operator">=</span> dense_2<span class="token punctuation">[</span><span class="token string">'kernel:0'</span><span class="token punctuation">]</span&