解决Keras 中加入lambda层无法正常载入模型问题


Posted in Python onJune 16, 2020

刚刚解决了这个问题,现在记录下来

问题描述

当使用lambda层加入自定义的函数后,训练没有bug,载入保存模型则显示Nonetype has no attribute 'get'

问题解决方法:

这个问题是由于缺少config信息导致的。lambda层在载入的时候需要一个函数,当使用自定义函数时,模型无法找到这个函数,也就构建不了。

m = load_model(path,custom_objects={"reduce_mean":self.reduce_mean,"slice":self.slice})

其中,reduce_mean 和slice定义如下

def slice(self,x, turn):
    """ Define a tensor slice function
    """
    return x[:, turn, :, :]
  def reduce_mean(self, X):
    return K.mean(X, axis=-1)

补充知识:含有Lambda自定义层keras模型,保存遇到的问题及解决方案

一,许多应用,keras含有的层已经不能满足要求,需要透过Lambda自定义层来实现一些layer,这个情况下,只能保存模型的权重,无法使用model.save来保存模型。

保存时会报

TypeError: can't pickle _thread.RLock objects

二,解决方案,为了便于后续的部署,可以转成tensorflow的PB进行部署。

from keras.models import load_model
import tensorflow as tf
import os, sys
from keras import backend as K
from tensorflow.python.framework import graph_util, graph_io

def h5_to_pb(h5_weight_path, output_dir, out_prefix="output_", log_tensorboard=True):
  if not os.path.exists(output_dir):
    os.mkdir(output_dir)
  h5_model = build_model()
  h5_model.load_weights(h5_weight_path)
  out_nodes = []
  for i in range(len(h5_model.outputs)):
    out_nodes.append(out_prefix + str(i + 1))
    tf.identity(h5_model.output[i], out_prefix + str(i + 1))
  model_name = os.path.splitext(os.path.split(h5_weight_path)[-1])[0] + '.pb'
  sess = K.get_session()
  init_graph = sess.graph.as_graph_def()
  main_graph = graph_util.convert_variables_to_constants(sess, init_graph, out_nodes)
  graph_io.write_graph(main_graph, output_dir, name=model_name, as_text=False)
  if log_tensorboard:
    from tensorflow.python.tools import import_pb_to_tensorboard
    import_pb_to_tensorboard.import_to_tensorboard(os.path.join(output_dir, model_name), output_dir)

def build_model():
  inputs = Input(shape=(784,), name='input_img')
  x = Dense(64, activation='relu')(inputs)
  x = Dense(64, activation='relu')(x)
  y = Dense(10, activation='softmax')(x)
  h5_model = Model(inputs=inputs, outputs=y)
  return h5_model

if __name__ == '__main__':
  if len(sys.argv) == 3:
    # usage: python3 h5_to_pb.py h5_weight_path output_dir
    h5_to_pb(h5_weight_path=sys.argv[1], output_dir=sys.argv[2])

以上这篇解决Keras 中加入lambda层无法正常载入模型问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
python实现多线程端口扫描
Aug 31 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Python中socket网络通信是干嘛的
May 27 Python
Python flask路由间传递变量实例详解
Jun 03 Python
如何解决安装python3.6.1失败
Jul 01 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
结束运行python的方法
Jun 16 #Python
深入理解Python 多线程
Jun 16 #Python
keras.layer.input()用法说明
Jun 16 #Python
python适合做数据挖掘吗
Jun 16 #Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 #Python
Python实现SMTP邮件发送
Jun 16 #Python
python语言中有算法吗
Jun 16 #Python
You might like
PHP函数常用用法小结
2010/02/08 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
前端微信支付js代码
2016/07/25 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python如何统计代码运行的时长
2019/07/24 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
详解python中的lambda与sorted函数
2020/09/04 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
网络教育毕业生自我鉴定
2013/10/10 职场文书
招聘专员岗位职责
2014/03/07 职场文书
团日活动总结书格式
2014/05/08 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
村创先争优活动总结
2014/08/28 职场文书
五年级小学生评语
2014/12/26 职场文书
初中毕业生自我评价
2015/03/02 职场文书
技术员岗位职责范本
2015/04/11 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers