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的Supervisor进行进程监控以及自动启动
May 29 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Python如何把十进制数转换成ip地址
May 25 Python
python能在浏览器能运行吗
Jun 17 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 Python
Python采集股票数据并制作可视化柱状图
Apr 04 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
php批量上传的实现代码
2013/06/09 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python单例模式的多种实现方法
2019/07/26 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python Cartopy的基础使用详解
2020/11/01 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
考生诚信考试承诺书
2014/05/23 职场文书
毕业大学生自荐信
2014/06/17 职场文书
甲午风云观后感
2015/06/02 职场文书
趣味运动会简讯
2015/07/20 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书