keras的load_model实现加载含有参数的自定义模型

网上的教程大多数是教大家如何加载自定义模型和函数,如下图

这个SelfAttention层是在训练过程自己定义的一个class,但如果要加载这个自定义层,需要在load_model里添加custom_objects字典,这个自定义的类,不要用import ,最好是直接复制进再训练的模型中,这些是基本教程。

------------------分割线讲重点------------------

如果直接运行上面的代码,会出现一个init初始化错误,如下图,

再来看看 这个SelfAttention 自定义的类的初始化

这就说明再调用这个类的时候,输入的ch=256并不会初始化这个类,需要先自定义好初始化值,如下图

调用方式不变

这样问题就解决啦!

补充知识:keras load model的时候,报错('Keyword argument not understood:', u'******')如何解决

由于keras不同版本的API有变化,因此在一个keras版本下训练的模型在另一个keras版本下加载时,可能会出现诸如('Keyword argument not understood:', u'data_format')等报错。

通过打开*.h5文件,查看该模型训练所用环境,再安装该环境即可解决报错。

查看Keras Model所用的Keras环境的方法

import h5py

f = h5py.File('Model.h5', 'r')
print(f.attrs.get('keras_version'))

根据输出的keras版本安装对应版本的keras即可解决加载问题。

以上这篇keras的load_model实现加载含有参数的自定义模型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-06-22

在Keras中实现保存和加载权重及模型结构

1. 保存和加载模型结构 (1)保存为JSON字串 json_string = model.to_json() (2)从JSON字串重构模型 from keras.models import model_from_json model = model_from_json(json_string) (3)保存为YAML字串 yaml_string = model.to_yaml() (4)从YAML字串重构模型 model = model_from_yaml(yaml_string) 2. 保存和

keras自定义损失函数并且模型加载的写法介绍

keras自定义函数时候,正常在模型里自己写好自定义的函数,然后在模型编译的那行代码里写上接口即可.如下所示,focal_loss和fbeta_score是我们自己定义的两个函数,在model.compile加入它们,metrics里'accuracy'是keras自带的度量函数. def focal_loss(): ... return xx def fbeta_score(): ... return yy model.compile(optimizer=Adam(lr=0.0001), lo

使用Keras加载含有自定义层或函数的模型操作

当我们导入的模型含有自定义层或者自定义函数时,需要使用custom_objects来指定目标层或目标函数. 例如: 我的一个模型含有自定义层"SincConv1D",需要使用下面的代码导入: from keras.models import load_model model = load_model('model.h5', custom_objects={'SincConv1D': SincConv1D}) 如果不加custom_objects指定目标层Layer,则会出现以下报错:

keras读取训练好的模型参数并把参数赋值给其它模型详解

介绍 本博文中的代码,实现的是加载训练好的模型model_halcon_resenet.h5,并把该模型的参数赋值给两个不同的新的model. 函数式模型 官网上给出的调用一个训练好模型,并输出任意层的feature. model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_pool').output) 但是这有一个问题,就是新的model,如果输入inputs和训练好的model的inputs大小不

关于读取popen输出结果时未截断字符串导致的命令行注入详解

0x00 前言 这种命令行注入在pwn中出现的比较少,所以记录分享一下. 0x01 命令行注入介绍 熟悉web安全的话就知道,如果对特殊字符过滤不当,会引发sql注入或者xss等安全漏洞.其中,命令行注入较为严重,因为可以直接拿到漏洞程序当前权限的OSshell. 然而,命令行注入不仅在web中会出现,在C语言程序中,也会出现命令行注入的漏洞.比方说这道pwn题,就是调用system时,没有对输入数据进行\0截断以及对特殊字符处理不当而导致的. 命令行注入相对于其他二进制漏洞相比利用比较简单,比

Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解

本文实例讲述了Thinkphp5.0 框架使用模型Model添加.更新.删除数据操作.分享给大家供大家参考,具体如下: Thinkphp5.0 的使用模型Model添加数据 使用create()方法添加数据 $res = TestUser::create([ 'name' => 'zhao liu', 'password' => md5(123456), 'email' => 'zhaoliu@qq.com' ]); dump($res); 使用save()方法添加数据 $userMod

读取数据库的数据并整合成3D饼图在jsp中显示详解

前言 本文主要给大家介绍的是关于读取数据库数据整合成3D饼图并在jsp中显示的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 方法如下: 首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) import java.io.IOException; import java.sql.SQLException; import org.jfree.chart.ChartFactory; import org.jfree.c

Python命令行参数解析工具 docopt 安装和应用过程详解

什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制.这样脚本在执行的时候就必须按照这样格式来执行,同时,也可以很方便的编写一些帮助信息(其实很多软件在输入 -h 的时候显示信息 .例如 python -h ,会显示所有的 python 指令,并且页通过 docopt 限制了 python 指令的格式),下面是一些简单的例子: docopt 的安装 d

Java内存模型与JVM运行时数据区的区别详解

首先,这两者是完全不同的概念,绝对不能混为一谈. 1.什么是Java内存模型? Java内存模型是Java语言在多线程并发情况下对于共享变量读写(实际是共享变量对应的内存操作)的规范,主要是为了解决多线程可见性.原子性的问题,解决共享变量的多线程操作冲突问题. 多线程编程的普遍问题是: 所见非所得 无法肉眼检测程序的准确性 不同的运行平台表现不同 错误很难复现 故JVM规范规定了Java虚拟机对多线程内存操作的一些规则,主要集中体现在volatile和synchronized这两个关键字. vo

Spring MVC请求参数与响应结果全局加密和解密详解

前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.timestamp,long类型,时间戳. 2.data,String类型,实际的业务请求数据转化成的Json字符串再进行加密得到的密文. 3.sign,签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111),防篡改. 为了简单起见,加密和解密采用AES,对称秘钥

Pytorch保存模型用于测试和用于继续训练的区别详解

保存模型 保存模型仅仅是为了测试的时候,只需要 torch.save(model.state_dict, path) path 为保存的路径 但是有时候模型及数据太多,难以一次性训练完的时候,而且用的还是 Adam优化器的时候, 一定要保存好训练的优化器参数以及epoch state = { 'model': model.state_dict(), 'optimizer':optimizer.state_dict(), 'epoch': epoch } torch.save(state, pat

tensorflow实现测试时读取任意指定的check point的网络参数

tensorflow在训练时会保存三个文件, model.ckpt-xxx.data-00000-of-00001 model.ckpt-xxx.index model.ckpt-xxx.meta 其中第一个储存网络参数值,第二个储存每一层的名字,第三个储存图结构 随着训练的过程,每隔一段时间都会保存一组以上三个文件,而在训练之前我们并不知道什么时候可以达到最佳的拟合,训练时间过短会导致欠拟合,训练时间过长则会导致过拟合. 如果每次测试时,我们都自动调用最新一次的check point,那很可能

Python中函数参数匹配模型详解

当我们的函数接收参数为任意个,或者不能确定参数个数时,我们,可以利用 * 来定义任意数目的参数,这个函数调用时,其所有不匹配的位置参数会被赋值为元组,我们可以在函数利用循环或索引进行使用 def f(*args): # 直接打印元组参数 print(args) print('-'*20) # 循环打印元组参数 [print(i) for i in args] ... # 传递一个参数 f(1) print('='*20) # 传递5个参数 f(1, 2, 3, 4, 5) 示例结果: (1,)

Python函数参数匹配模型通用规则keyword-only参数详解

Python3对函数参数的排序规则更加通用化了,即Python3 keyword-only参数,该参数即为必须只按照关键字传递而不会有一个位置参数来填充的参数.该规则在处理人一多个参数是很有用的. keyword-only kword_only(1, 2, 3, c=4) print('-' * 20) kword_only(a=1, c=3) 示例结果: 1 (2, 3) 4 -------------------- 1 () 3 在 *args 之后的参数都需要在调用中使用关键字的方式传递,