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解析文件示例
Jan 23 Python
Python入门篇之条件、循环
Oct 17 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Python sys.argv用法实例
May 28 Python
Python文件读取的3种方法及路径转义
Jun 21 Python
python实时分析日志的一个小脚本分享
May 07 Python
教你学会使用Python正则表达式
Sep 07 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
python机器学习之神经网络(一)
Dec 20 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 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删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
Python 解析XML文件
2009/04/15 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
汉语言文学毕业生求职信
2013/10/01 职场文书
教师队伍管理制度
2014/01/14 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
应聘教师求职信范文
2015/03/20 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python