解决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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
跟老齐学Python之大话题小函数(1)
Oct 10 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python多进程实现进程间通信实例
Nov 24 Python
Python Flask基础教程示例代码
Feb 07 Python
Python3安装pip工具的详细步骤
Oct 14 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
Python 下载Bing壁纸的示例
Sep 29 Python
python与idea的集成的实现
Nov 20 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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模板技术原理【一】
2008/01/10 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
python统计日志ip访问数的方法
2015/07/06 Python
python中的计时器timeit的使用方法
2017/10/20 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
Python编写单元测试代码实例
2020/09/10 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
中学生班主任评语
2014/01/30 职场文书
家长会学生演讲稿
2014/04/26 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
python可视化之颜色映射详解
2021/09/15 Python