kears Lambda层学习总结

测试案例Lambda_demo1

在这里插入图片描述

# index是参数,
from tensorflow.keras.layers import Lambda
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Lambda,Input

import numpy as np
import tensorflow as tf 

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)


## 第一步 定义模型
# 初始化两个输入形参
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)]))

结果如下
在这里插入图片描述

测试案例–demo2

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation,Reshape
from keras.layers import Concatenate
from keras.utils.vis_utils import plot_model
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 = Concatenate()([x1,x2])
model = Model(a, output)
x_test = np.array([[[1,2],[2,3],[3,4],[4,5]]])
print(model.predict(x_test))
plot_model(model, to_file='lambda.png',show_shapes=True)

# merge6 = merge([drop4, up6], mode='concat', concat_axis=3)
# 改成 merge6 = Concatenate(axis=3)([drop4, up6])

在这里插入图片描述

使用案例3_测试ColmultiLayer

ColwiseMultLayer = Lambda(lambda l: l[0]*tf.reshape(l[1], (-1,1)))
x = Input(shape=(3,))
y = Input(shape=(1,))

output=ColwiseMultLayer([x,y])
model = Model(inputs=[x, y], outputs=[output])

v0 = np.array([[5, 2,1],[1,2,3]])
v1 = np.array([2,4]) # 对应行相乘。
print(model.predict([v0.reshape(-1, 3), v1.reshape(-1, 1)]))

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值