【Python-Keras】keras.layers.Lambda解析与使用
Python 解析 lambda Keras 使用 Layers
2023-09-14 09:12:40 时间
目录
1 作用
Lambda表达式: 用一行代码去表示一个函数,简化和美观代码。
keras.layers.Lambda(): 是Lambda表达式的应用。指定在神经网络模型中,如果某一层需要通过一个函数去变换数据,那利用keras.layers.Lambda()这个函数单独把这一步数据操作命为单独的一Lambda层。
2 参数解析
keras.layers.core.Lambda(function, output_shape=None, mask=None, arguments=None)
参数
-
function:要实现的函数,该函数仅接受一个变量,即神经网络上一层的输出
-
output_shape:函数应该返回的值的shape,可以是一个tuple,也可以是一个根据输入shape计算输出shape的函数
-
mask: 掩膜
-
arguments:可选,是字典格式,用来传参
3 举例
3.1 传参举例
arguments参数,利用字典格式来传参
# index是参数,
def slice(x,index):
return x[:,:,index]
# 通过字典将参数index = 0传递进去
x1 = Lambda(slice,output_shape=(4,1),arguments={'index':0})(a)
# 通过字典将参数index = 1 传递进去
x2 = Lambda(slice,output_shape=(4,1),arguments={'index':1})(a)
3.2 简单Demo
from keras.layers import Lambda
from keras.models import Input, Model
import numpy as np
## 第一步 定义模型
# 初始化两个输入形参
a = Input(shape=(2, ))
b = Input(shape=(2, ))
# 定义lambda要执行的函数
def minus(inputs):
x, y = inputs
return (x+y)
# 使用lambda表达式,对函数进行传参
minus_layer = Lambda(minus, name='minus')([a, b])
model = Model(inputs=[a, b], outputs=[minus_layer])
## 第二步 测试模型
# 随便定义的两个数组
v0 = np.array([5, 2])
v1 = np.array([8, 4])
# 转成1*2的矩阵后测试模型
print(model.predict([v0.reshape(1, 2), v1.reshape(1, 2)]))
3.3 利用Lambda表达式实现某层数据的切片
Lambda传参数
参考文档:keras Lambda自定义层实现数据的切片,Lambda传参数
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)
上述代码实现的是,将矩阵的每一列提取出来,然后单独进行操作,最后在拼在一起。可视化的图如下所示。
相关文章
- 解析Python编程中的包结构
- Python的类方法
- python 列表删除元素
- 使用Python处理Excel表格的简单方法
- Python 在问答频道中刷题积累到的小技巧(五)
- 110 道 Python 面试笔试题超强汇总!
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- 短网址解析长网址python示例
- Python每日一练——第16天:字符串分析
- 深度解析为什么做深度学习,都用python,而不用java或者c++
- 自学python终于上岸了,这些资料免费送有缘人
- 小白能学好Python吗 Python学习费用大概多少
- 基于长短期记忆网络和凸优化算法的综合智能电网的可再生能源预测(Python代码实现)
- python进行ocr识别图片上的中文
- 深度盘点:30个用于深度学习、自然语言处理和计算机视觉的顶级 Python 库
- Python编程:python-attrs模块的简单使用
- python XML文件解析:用xml.dom.minidom来解析xml文件
- Python对于包的使用
- Python接口自动化——自动化测试分层(1)
- Python爬虫 xpath解析基础