解决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加pyGame实现的简单拼图游戏实例
May 15 Python
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
PyQt5每天必学之事件与信号
Apr 20 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python分分钟绘制精美地图海报
Feb 15 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魔术引号所带来的安全问题分析
2014/07/15 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
详解Vue之计算属性
2020/06/20 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python list转置和前后反转的例子
2019/08/26 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python将图片转base64,实现前端显示
2020/01/09 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
python绘制雷达图实例讲解
2021/01/03 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
行政部工作岗位职责范本
2014/03/05 职场文书
电视购物广告词
2014/03/19 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
2015年老干部工作总结
2015/04/23 职场文书
元旦晚会开场白
2015/05/29 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
python开发人人对战的五子棋小游戏
2022/05/02 Python