keras 解决加载lstm+crf模型出错的问题


Posted in Python onJune 10, 2020

错误展示

new_model = load_model(“model.h5”)

报错:

1、keras load_model valueError: Unknown Layer :CRF

2、keras load_model valueError: Unknown loss function:crf_loss

错误修改

1、load_model修改源码:custom_objects = None 改为 def load_model(filepath, custom_objects, compile=True):

2、new_model = load_model(“model.h5”,custom_objects={‘CRF': CRF,‘crf_loss': crf_loss,‘crf_viterbi_accuracy': crf_viterbi_accuracy}

以上修改后,即可运行。

补充知识:用keras搭建bilstm crf

使用 https://github.com/keras-team/keras-contrib实现的crf layer,

安装 keras-contrib

pip install git+https://www.github.com/keras-team/keras-contrib.git

Code Example:

# coding: utf-8
from keras.models import Sequential
from keras.layers import Embedding
from keras.layers import LSTM
from keras.layers import Bidirectional
from keras.layers import Dense
from keras.layers import TimeDistributed
from keras.layers import Dropout
from keras_contrib.layers.crf import CRF
from keras_contrib.utils import save_load_utils

VOCAB_SIZE = 2500
EMBEDDING_OUT_DIM = 128
TIME_STAMPS = 100
HIDDEN_UNITS = 200
DROPOUT_RATE = 0.3
NUM_CLASS = 5

def build_embedding_bilstm2_crf_model():
 """
 带embedding的双向LSTM + crf
 """
 model = Sequential()
 model.add(Embedding(VOCAB_SIZE, output_dim=EMBEDDING_OUT_DIM, input_length=TIME_STAMPS))
 model.add(Bidirectional(LSTM(HIDDEN_UNITS, return_sequences=True)))
 model.add(Dropout(DROPOUT_RATE))
 model.add(Bidirectional(LSTM(HIDDEN_UNITS, return_sequences=True)))
 model.add(Dropout(DROPOUT_RATE))
 model.add(TimeDistributed(Dense(NUM_CLASS)))
 crf_layer = CRF(NUM_CLASS)
 model.add(crf_layer)
 model.compile('rmsprop', loss=crf_layer.loss_function, metrics=[crf_layer.accuracy])
 return model

def save_embedding_bilstm2_crf_model(model, filename):
 save_load_utils.save_all_weights(model,filename)

def load_embedding_bilstm2_crf_model(filename):
 model = build_embedding_bilstm2_crf_model()
 save_load_utils.load_all_weights(model, filename)
 return model

if __name__ == '__main__':
 model = build_embedding_bilstm2_crf_model()

注意:

如果执行build模型报错,则很可能是keras版本的问题。在keras-contrib==2.0.8且keras==2.0.8时,上面代码不会报错。

以上这篇keras 解决加载lstm+crf模型出错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python升级提示Tkinter模块找不到的解决方法
Aug 22 Python
python访问类中docstring注释的实现方法
May 04 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python树莓派红外反射传感器
Jan 21 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
python中wx模块的具体使用方法
May 15 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
Python实现简单的猜单词小游戏
Oct 28 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 #Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 #Python
Python 字典中的所有方法及用法
Jun 10 #Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 #Python
Keras—embedding嵌入层的用法详解
Jun 10 #Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 #Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 #Python
You might like
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
教大家制作简单的php日历
2015/11/17 PHP
php微信公众号开发模式详解
2016/11/28 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
js简单的弹出框有关闭按钮
2014/05/05 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JS高级运动实例分析
2016/12/20 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
python实现多进程代码示例
2018/10/31 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
小学后勤管理制度
2014/01/14 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
质量提升方案
2014/06/16 职场文书
群众路线表态发言材料
2014/10/17 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python
分享python函数常见关键字
2022/04/26 Python