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中的is和id用法分析
Jan 26 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
教大家使用Python SqlAlchemy
Feb 12 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
简单了解Python读取大文件代码实例
Dec 18 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
python能否java成为主流语言吗
Jun 22 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
python 爬取吉首大学网站成绩单
Jun 02 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
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
老生常谈js数据类型
2017/08/03 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
VUE重点问题总结
2018/03/19 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
详解python做UI界面的方法
2019/02/27 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
金讯Java笔试题目
2013/06/18 面试题
创意婚礼策划方案
2014/05/18 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2015年元旦标语大全
2014/12/09 职场文书
党员承诺书格式范文
2015/04/28 职场文书
活动费用申请报告
2015/05/15 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
SQL Server中使用表变量和临时表
2022/05/20 SQL Server