解决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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python批量创建指定名称的文件夹
Mar 21 Python
Pandas分组与排序的实现
Jul 23 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
python关闭占用端口方式
Dec 17 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 Python
python中super()函数的理解与基本使用
Aug 30 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原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
django正续或者倒序查库实例
2020/05/19 Python
会计专业毕业生推荐信
2013/11/05 职场文书
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
策划总监岗位职责
2014/02/16 职场文书
元旦活动感言
2014/03/08 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
怎样写辞职信
2015/02/27 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
css3带你实现3D转换效果
2022/02/24 HTML / CSS
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers