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转换HTML到Text纯文本的方法
Jan 15 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python字符串查找函数的用法详解
Jul 08 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
python实现QQ邮箱发送邮件
Mar 06 Python
flask开启多线程的具体方法
Aug 02 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
python 从list中随机取值的方法
Nov 16 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
python验证码识别的实例详解
2016/09/09 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
python实现学生通讯录管理系统
2021/02/25 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
合伙经营协议书范本
2014/09/13 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
Android Studio 计算器开发
2022/05/20 Java/Android