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解析xml中dom元素的方法
Mar 12 Python
探究Python中isalnum()方法的使用
May 18 Python
Python中is与==判断的区别
Mar 28 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python补齐字符串长度的实例
Nov 15 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
python全栈知识点总结
Jul 01 Python
详解Python的三种拷贝方式
Feb 11 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 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 insert语法详解
2008/06/07 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
初探nodeJS
2017/01/24 NodeJs
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
python tornado修改log输出方式
2019/11/18 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
python else语句在循环中的运用详解
2020/07/06 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
元旦晚会感言
2014/03/12 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
村党支部公开承诺书
2014/05/29 职场文书
公务员考察材料范文
2014/12/23 职场文书
2015年护士节活动总结
2015/02/10 职场文书
2015高考寄语集锦
2015/02/27 职场文书
现场施工员岗位职责
2015/04/11 职场文书
2015团员个人年度总结
2015/11/24 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL