解决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操作字典类型的常用方法(推荐)
May 16 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
Python处理CSV与List的转换方法
Apr 19 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Django REST framework视图的用法
Jan 16 Python
Python中Numpy mat的使用详解
May 24 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
python不同系统中打开方法
Jun 23 Python
Python数据分析之绘图和可视化详解
Jun 02 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
第五节--克隆
2006/11/16 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
百度地图API使用方法详解
2015/08/25 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
CI框架常用函数封装实例
2016/11/21 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
vue源码解析之事件机制原理
2018/04/21 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
js实现动态时钟
2020/03/12 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python groupby 函数 as_index详解
2019/12/16 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技