Keras 使用 Lambda层详解


Posted in Python onJune 10, 2020

我就废话不多说了,大家还是直接看代码吧!

from tensorflow.python.keras.models import Sequential, Model
from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropout, Conv2DTranspose, Lambda, Input, Reshape, Add, Multiply
from tensorflow.python.keras.optimizers import Adam
 
def deconv(x):
  height = x.get_shape()[1].value
  width = x.get_shape()[2].value
  
  new_height = height*2
  new_width = width*2
  
  x_resized = tf.image.resize_images(x, [new_height, new_width], tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  
  return x_resized
 
def Generator(scope='generator'):
  imgs_noise = Input(shape=inputs_shape)
  x = Conv2D(filters=32, kernel_size=(9,9), strides=(1,1), padding='same', activation='relu')(imgs_noise)
  x = Conv2D(filters=64, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu')(x)
  x = Conv2D(filters=128, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu')(x)
 
  x1 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x)
  x1 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x1)
  x2 = Add()([x1, x])
 
  x3 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x2)
  x3 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x3)
  x4 = Add()([x3, x2])
 
  x5 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x4)
  x5 = Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x5)
  x6 = Add()([x5, x4])
 
  x = MaxPool2D(pool_size=(2,2))(x6)
 
  x = Lambda(deconv)(x)
  x = Conv2D(filters=64, kernel_size=(3, 3), strides=(1,1), padding='same',activation='relu')(x)
  x = Lambda(deconv)(x)
  x = Conv2D(filters=32, kernel_size=(3, 3), strides=(1,1), padding='same',activation='relu')(x)
  x = Lambda(deconv)(x)
  x = Conv2D(filters=3, kernel_size=(3, 3), strides=(1, 1), padding='same',activation='tanh')(x)
 
  x = Lambda(lambda x: x+1)(x)
  y = Lambda(lambda x: x*127.5)(x)
  
  model = Model(inputs=imgs_noise, outputs=y)
  model.summary()
  
  return model
 
my_generator = Generator()
my_generator.compile(loss='binary_crossentropy', optimizer=Adam(0.7, decay=1e-3), metrics=['accuracy'])

补充知识:含有Lambda自定义层keras模型,保存遇到的问题及解决方案

一,许多应用,keras含有的层已经不能满足要求,需要透过Lambda自定义层来实现一些layer,这个情况下,只能保存模型的权重,无法使用model.save来保存模型。保存时会报

TypeError: can't pickle _thread.RLock objects

Keras 使用 Lambda层详解

二,解决方案,为了便于后续的部署,可以转成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调用java的Webservice示例
Mar 10 Python
Python中for循环控制语句用法实例
Jun 02 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
python生成词云的实现方法(推荐)
Jun 13 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
Python文件和流(实例讲解)
Sep 12 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
简单的Python人脸识别系统
Jul 14 Python
PyQt5的相对布局管理的实现
Aug 07 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 Python
keras打印loss对权重的导数方式
Jun 10 #Python
Python xlrd模块导入过程及常用操作
Jun 10 #Python
keras-siamese用自己的数据集实现详解
Jun 10 #Python
python实现mean-shift聚类算法
Jun 10 #Python
Keras之自定义损失(loss)函数用法说明
Jun 10 #Python
Python xlwt模块使用代码实例
Jun 10 #Python
python中def是做什么的
Jun 10 #Python
You might like
PHP4实际应用经验篇(9)
2006/10/09 PHP
php中变量及部分适用方法
2008/03/27 PHP
ThinkPHP php 框架学习笔记
2009/10/30 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
javascript中Function类型详解
2015/04/28 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
Python基本socket通信控制操作示例
2019/01/30 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
文科教师毕业的自我评价
2014/01/16 职场文书
模具数控专业自荐信
2014/01/27 职场文书
打架检讨书500字
2014/01/29 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书