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

 更新时间:2020年06月10日 11:46:14   作者:qq_26235121  
这篇文章主要介绍了keras 解决加载lstm+crf模型出错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

错误展示

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中encode和encoding的区别小结

    Python中encode和encoding的区别小结

    encode和encoding在Python中虽然都与字符编码相关,但它们的角色和用途是不同的,本文主要介绍了Python中encode和encoding的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python实现TCP/IP协议下的端口转发及重定向示例

    Python实现TCP/IP协议下的端口转发及重定向示例

    这篇文章主要介绍了Python实现TCP/IP协议下的端口转发及重定向示例,以一个webpy站点在本机的两个端口双向通信下演示,需要的朋友可以参考下
    2016-06-06
  • matplotlib 范围选区(SpanSelector)的使用

    matplotlib 范围选区(SpanSelector)的使用

    这篇文章主要介绍了matplotlib 范围选区(SpanSelector)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • PyTorch 随机数生成占用 CPU 过高的解决方法

    PyTorch 随机数生成占用 CPU 过高的解决方法

    今天小编就为大家分享一篇PyTorch 随机数生成占用 CPU 过高的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • anaconda 部署Jupyter Notebook服务器过程详解

    anaconda 部署Jupyter Notebook服务器过程详解

    这篇文章主要为大家介绍了anaconda 部署Jupyter Notebook服务器过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Python3使用TCP编写一个简易的文件下载器功能

    Python3使用TCP编写一个简易的文件下载器功能

    这篇文章主要介绍了Python3使用TCP编写一个简易的文件下载器功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • win7上python2.7连接mysql数据库的方法

    win7上python2.7连接mysql数据库的方法

    这篇文章主要介绍了win7上python2.7连接mysql数据库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • PyTorch如何搭建一个简单的网络

    PyTorch如何搭建一个简单的网络

    这篇文章主要介绍了PyTorch如何搭建一个简单的网络,帮助大家更好的理解和学习PyTorch,感兴趣的朋友可以了解下
    2020-08-08
  • GIt在pyCharm的详细使用教程记录

    GIt在pyCharm的详细使用教程记录

    使用git+pycharm有一段时间了,算是稍有点心得,所以下面这篇文章主要给大家介绍了关于GIt在pyCharm的详细使用的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Python multiprocessing 共享对象的示例代码

    Python multiprocessing 共享对象的示例代码

    在 Python 中使用 multiprocessing,一个新的进程可以独立运行并拥有自己的内存空间,下面通过示例代码讲解Python multiprocessing共享对象的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-07-07

最新评论