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中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
Sanic框架配置操作分析
Jul 17 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python判断输入日期为第几天的实例
Nov 13 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python中os包的用法
Jun 01 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 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新手上路(十三)
2006/10/09 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
Exjs 入门篇
2010/04/07 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
庆七一活动方案
2014/01/25 职场文书
运动会广播稿50字
2014/01/26 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
质量承诺书范文
2014/03/27 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
小学教师岗位职责
2015/04/02 职场文书
行政主管岗位职责范本
2015/04/09 职场文书