使用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中的异常处理相关语句基础学习笔记
Jul 11 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
python命令 -u参数用法解析
Oct 24 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
python字典的值可以修改吗
Jun 29 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
利用Python多线程实现图片下载器
Mar 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
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP 错误处理机制
2015/07/06 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
潜说js对象和数组
2011/05/25 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
社团文化节邀请函
2014/01/10 职场文书
第一节英语课开场白
2015/06/01 职场文书
民主生活会意见
2015/06/05 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Java数组详细介绍及相关工具类
2022/04/14 Java/Android