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之入门(五)缩进和选择
May 27 Python
Python从MP3文件获取id3的方法
Jun 15 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
实例讲解Python爬取网页数据
Jul 08 Python
深入了解Python在HDA中的应用
Sep 05 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
python实现按关键字筛选日志文件
Dec 24 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
python文件目录操作之os模块
May 08 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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
PHP脚本的10个技巧(2)
2006/10/09 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
告诉大家什么是JSON
2008/06/10 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
旅游业大学生创业计划书
2014/01/31 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
滴水洞导游词
2015/02/10 职场文书
导游词范文
2015/02/13 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android