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 20 Python
python脚本实现验证码识别
Jun 07 Python
Linux下多个Python版本安装教程
Aug 15 Python
python实现一组典型数据格式转换
Dec 15 Python
python批量创建指定名称的文件夹
Mar 21 Python
python中while和for的区别总结
Jun 28 Python
python多任务之协程的使用详解
Aug 26 Python
python之yield和Generator深入解析
Sep 18 Python
Python中关于浮点数的冷知识
Sep 22 Python
Python多线程多进程实例对比解析
Mar 12 Python
python ETL工具 pyetl
Jun 07 Python
Python批量将csv文件转化成xml文件的实例
May 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+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python 没有main函数的原因
2020/07/10 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
司机检讨书
2014/02/13 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
实习评语大全
2014/04/26 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
公司仓库管理制度
2015/08/04 职场文书
2016大一新生军训感言
2015/12/08 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL