使用Keras 实现查看model weights .h5 文件的内容


Posted in Python onJune 09, 2020

Keras的模型是用hdf5存储的,如果想要查看模型,keras提供了get_weights的函数可以查看:

for layer in model.layers: weights = layer.get_weights() # list of numpy array

而通过hdf5模块也可以读取:hdf5的数据结构主要是File - Group - Dataset三级,具体操作API可以看官方文档。weights的tensor保存在Dataset的value中,而每一集都会有attrs保存各网络层的属性:

import h5py
 
def print_keras_wegiths(weight_file_path):
  f = h5py.File(weight_file_path) # 读取weights h5文件返回File类
  try:
    if len(f.attrs.items()):
      print("{} contains: ".format(weight_file_path))
      print("Root attributes:")
    for key, value in f.attrs.items():
      print(" {}: {}".format(key, value)) # 输出储存在File类中的attrs信息,一般是各层的名称
 
    for layer, g in f.items(): # 读取各层的名称以及包含层信息的Group类
      print(" {}".format(layer))
      print("  Attributes:")
      for key, value in g.attrs.items(): # 输出储存在Group类中的attrs信息,一般是各层的weights和bias及他们的名称
        print("   {}: {}".format(key, value)) 
 
      print("  Dataset:")
      for name, d in g.items(): # 读取各层储存具体信息的Dataset类
        print("   {}: {}".format(name, d.value.shape)) # 输出储存在Dataset中的层名称和权重,也可以打印dataset的attrs,但是keras中是空的
        print("   {}: {}".format(name. d.value))
  finally:
    f.close()

而如果想修改某个值,则需要通过新建File类,然后用create_group, create_dataset函数将信息重新写入,具体操作可以查看这篇文章

补充知识:keras load model 并保存特定层 (pop) 的权重save new_model

有时候我们保存模型(save model),会保存整个模型输入到输出的权重,如果,我们不想保存后几层的参数,保存成新的模型。

import keras
from keras.models import Model, load_model
from keras.layers import Input, Dense
from keras.optimizers import RMSprop
import numpy as np

创建原始模型并保存权重

inputs = Input((1,))
dense_1 = Dense(10, activation='relu')(inputs)
dense_2 = Dense(10, activation='relu')(dense_1)
dense_3 = Dense(10, activation='relu')(dense_2)
outputs = Dense(10)(dense_3)

model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=RMSprop(), loss='mse')
model.save('test.h5')

加载模型并对模型进行调整

loaded_model = load_model('test.h5')
loaded_model.layers.pop()
loaded_model.layers.pop()

此处去掉了最后两层--dense_3, dense_2。

创建新的model并加载修改后的模型

new_model = Model(inputs=inputs, outputs=dense_1)
new_model.compile(optimizer=RMSprop(), loss='mse')
new_model.set_weights(loaded_model.get_weights())

new_model.summary()
new_model.save('test_complete.h5')

以上这篇使用Keras 实现查看model weights .h5 文件的内容就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之大话题小函数(2)
Oct 10 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
详解python里的命名规范
Jul 16 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
详解python运行三种方式
May 13 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
python递归函数用法详解
Oct 26 Python
Python实现滑雪小游戏
Sep 25 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 #Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 #Python
Python带参数的装饰器运行原理解析
Jun 09 #Python
Python sorted对list和dict排序
Jun 09 #Python
python初步实现word2vec操作
Jun 09 #Python
Python生成随机验证码代码实例解析
Jun 09 #Python
在python下实现word2vec词向量训练与加载实例
Jun 09 #Python
You might like
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
应届毕业生自荐信
2014/05/28 职场文书
实名检举信范文
2015/03/02 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
python绘制云雨图raincloud plot
2022/08/05 Python