keras Lambda自定义层实现数据的切片方式,Lambda传参数


Posted in Python onJune 11, 2020

1、代码如下:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation,Reshape
from keras.layers import merge
from keras.utils.visualize_util import plot
from keras.layers import Input, Lambda
from keras.models import Model
 
def slice(x,index):
 return x[:,:,index]
 
a = Input(shape=(4,2))
x1 = Lambda(slice,output_shape=(4,1),arguments={'index':0})(a)
x2 = Lambda(slice,output_shape=(4,1),arguments={'index':1})(a)
x1 = Reshape((4,1,1))(x1)
x2 = Reshape((4,1,1))(x2)
output = merge([x1,x2],mode='concat')
model = Model(a, output)
x_test = np.array([[[1,2],[2,3],[3,4],[4,5]]])
print model.predict(x_test)
plot(model, to_file='lambda.png',show_shapes=True)

2、注意Lambda 是可以进行参数传递的,传递的方式如下代码所述:

def slice(x,index):
return x[:,:,index]

如上,index是参数,通过字典将参数传递进去.

x1 = Lambda(slice,output_shape=(4,1),arguments={'index':0})(a)
x2 = Lambda(slice,output_shape=(4,1),arguments={'index':1})(a)

3、上述代码实现的是,将矩阵的每一列提取出来,然后单独进行操作,最后在拼在一起。可视化的图如下所示。

keras Lambda自定义层实现数据的切片方式,Lambda传参数

补充知识:tf.keras.layers.Lambda()——匿名函数层解析

1. 参数列表

keras Lambda自定义层实现数据的切片方式,Lambda传参数

2. 作用

keras Lambda自定义层实现数据的切片方式,Lambda传参数

可以把任意的一个表达式作为一个“Layer”对象

Lambda层之所以存在是因为它可以在构建Squential时使用任意的函数或者说tensorflow 函数。

在我们需要完成一些简单的操作(例如VAE中的重采样)的情况下,Lambda层再适合不过了。

3. 举个栗子(VAE)

可以看到通过在encoder和decoder中间加入一个Lambda层使得encoder和decoder连接起来,很方便

def sampling(agrs):
  mean,logvar = agrs[0],agrs[1]
  eps = tf.random.normal(tf.shape(mean))
  return mean + eps*tf.exp(logvar * 0.5)

# 编码阶段
  
x = layers.Input(shape=(784,)) # 输入层
  
h1 = layers.Dense(200,activation='softplus')(x)
h2 = layers.Dense(200,activation='softplus')(h1)
# 均值和方差层不需要激活函数
mean = layers.Dense(latent_dimension)(h2)
log_var = layers.Dense(latent_dimension)(h2)
  
# 将采样过程看成一个Lambda层,这里利用自定义的sampling函数
z = layers.Lambda(sampling,output_shape=(latent_dimension,))([mean,log_var])
  
# 解码阶段
h3 = layers.Dense(200,activation='softplus')
h4 = layers.Dense(200,activation='softplus')
h5 = layers.Dense(200,activation='softplus')
# No activation
end = layers.Dense(784)
z1 = h3(z)
z2 = h4(z1)
z3 = h5(z2)
out = end(z3)
  
# 建立模型
model = tf.keras.Model(x,out)

4. Lambda层的缺点

Lambda层虽然很好用,但是它不能去更新我们模型的配置信息,就是不能重写'model.get_config()'方法

所以tensorflow提议,尽量使用自定义层(即tf.keras.layers的子类)

关于自定义层,我的博客有一期会专门讲

总结

当网络需要完成一些简单的操作时,可以考虑使用Lambda层。

以上这篇keras Lambda自定义层实现数据的切片方式,Lambda传参数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Python和Go语言的区别总结
Feb 20 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
pip安装python库的方法总结
Aug 02 Python
使用turtle绘制五角星、分形树
Oct 06 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 Python
使用python向MongoDB插入时间字段的操作
May 18 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 Python
Python学习之包与模块详解
Mar 19 Python
python怎么提高计算速度
Jun 11 #Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 #Python
Python函数参数定义及传递方式解析
Jun 10 #Python
什么是python类属性
Jun 10 #Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 #Python
浅谈Python中的模块
Jun 10 #Python
keras多显卡训练方式
Jun 10 #Python
You might like
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python使用心得之获得github代码库列表
2014/06/25 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Django分组聚合查询实例分享
2020/04/29 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
租房安全协议书
2014/08/20 职场文书
股份合作协议书
2014/09/10 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
社区综治工作汇报
2014/10/27 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
硕士论文致谢范文
2015/05/14 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript