使用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实现文件复制删除
Apr 19 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
python多进程并行代码实例
Sep 30 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
在主流系统之上安装Pygame的方法
May 20 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
python使用布隆过滤器的实现示例
Aug 20 Python
python 获取字典键值对的实现
Nov 12 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
Python3+Flask安装使用教程详解
Feb 16 Python
基于Python实现一个春节倒计时脚本
Jan 22 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
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php导入导出excel实例
2013/10/25 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php面向对象值单例模式
2016/05/03 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
深入了解NumPy 高级索引
2020/07/24 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
大学生自我鉴定书
2014/03/24 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
JavaScript 对象创建的3种方法
2021/11/17 Javascript
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript