使用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发送和接收邮件
Sep 27 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
python生成word合同的实例方法
Jan 12 Python
Python爬虫基础初探selenium
May 31 Python
Python 如何实现文件自动去重
Jun 02 Python
python缺失值的解决方法总结
Jun 09 Python
用Python将GIF动图分解成多张静态图片
Jun 11 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
Python Requests库基本用法示例
2018/08/20 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
NumPy排序的实现
2020/01/21 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
JAVA招聘远程笔试题
2015/07/23 面试题
司机职责范本
2014/03/08 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
原告离婚代理词
2015/05/23 职场文书
高中体育课教学反思
2016/02/16 职场文书