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中的hashlib和base64加密模块使用实例
Sep 02 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
Python中 map()函数的用法详解
Jul 10 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
Python 如何实现文件自动去重
Jun 02 Python
python实现MD5进行文件去重的示例代码
Jul 09 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
PHP中的float类型使用说明
2010/07/27 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
Python实现简单拆分PDF文件的方法
2015/07/30 Python
python非递归全排列实现方法
2017/04/10 Python
Python中偏函数用法示例
2018/06/07 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
在python里面运用多继承方法详解
2019/07/01 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
Python调用C/C++的方法解析
2020/08/05 Python
python破解同事的压缩包密码
2020/10/14 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
初中英语教学反思
2014/01/25 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
学生逃课检讨书
2015/02/17 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
单位车辆管理制度
2015/08/05 职场文书
初中军训感想
2015/08/07 职场文书