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使用三种方法实现PCA算法
Dec 12 Python
详解python中的json和字典dict
Jun 22 Python
python实现京东秒杀功能
Jul 30 Python
python梯度下降法的简单示例
Aug 31 Python
pandas ix &iloc &loc的区别
Jan 10 Python
matplotlib实现区域颜色填充
Mar 18 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
多个python文件调用logging模块报错误
Feb 12 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
基于Python的EasyGUI学习实践
May 07 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之sprintf函数用法详解
2014/11/12 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
用jscript启动sqlserver
2007/06/21 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
JS实现的全排列组合算法示例
2017/10/09 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python中条件判断语句的简单使用方法
2015/08/21 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
python机器学习实现决策树
2019/11/11 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
struct和class的区别
2015/11/20 面试题
销售业务实习自我鉴定
2013/09/23 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
党建示范点实施方案
2014/03/12 职场文书
政府信息公开实施方案
2014/05/09 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
新郎新娘致辞
2015/07/31 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
创业计划书之寿司
2019/07/19 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL