解决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编写类UNIX系统的命令行工具的教程
Apr 15 Python
python实现最长公共子序列
May 22 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
Python3 JSON编码解码方法详解
Sep 06 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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/10/09 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
django mysql数据库及图片上传接口详解
2019/07/18 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python IDLE添加行号显示教程
2020/04/25 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
实习生自荐信范文分享
2013/11/27 职场文书
初一地理教学反思
2014/01/16 职场文书
小加工厂管理制度
2014/01/21 职场文书
运动会通讯稿500字
2014/02/20 职场文书
小学教学随笔感言
2014/02/26 职场文书
青年文明号服务承诺
2014/03/31 职场文书
道歉信怎么写
2015/05/12 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers