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实现感知器模型、两层神经网络
Dec 19 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
有关Python的22个编程技巧
Aug 29 Python
快速排序的四种python实现(推荐)
Apr 03 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
通过实例了解python property属性
Nov 01 Python
python3爬取torrent种子链接实例
Jan 16 Python
利用python中集合的唯一性实现去重
Feb 11 Python
Selenium 配置启动项参数的方法
Dec 04 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
python线程优先级队列知识点总结
Feb 28 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
php文件上传类的分享
2017/07/06 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers
Python实现信息管理系统
2022/06/05 Python