如何用Keras自定义层?

发布网友 发布时间:2022-04-23 15:48

我来回答

2个回答

热心网友 时间:2022-04-10 03:56

lambda层是没有参数学习的功能的,你要做的就是将每张图片上像素的最大值和最小值的函数包装进lambda层。你的输入是(batch,224,224,3),写一个在每个通道上提取空间特征的最大最小值的函数。假设为spatial_max(input)和spatial_min(input),那么新层你可以直接写为new_layer1=Lambda(spatial_max, x : x)(input)
new_layer2=Lambda(spatial_min, x : x)(input)

热心网友 时间:2022-04-10 05:14

付费内容限时免费查看回答您好根据您的描述,答案是如下所示:

Keras层的骨架。只需要实现三个方法即可:

build(input_shape): 这是你定义权重的地方。这个方法必须设self.built = True,可以通过调用super([Layer], self).build()完成。build,这个函数用来确立这个层都有哪些参数,哪些参数是可训练的哪些参数是不可训练的。

call(x): 这里是编写层的功能逻辑的地方。你只需要关注传入call的第一个参数:输入张量,除非你希望你的层支持masking。这个函数在调用层对象时自动使用,里面就是该层的计算逻辑,或计算图了。显然,这个层的核心应该是一段符号式的输入张量到输出张量的计算过程。

compute_output_shape(input_shape): 如果你的层更改了输入张量的形状,你应该在这里定义形状变化的逻辑,这让Keras能够自动推断各层的形状。

提问你好,我想知道的是keras模型的自定义层的名称如何在结构上获取?

回答使用了自定义的层,如Lambda()

# 文本相似度评估方式

def exponent_neg_manhattan_distance(sent_left, sent_middle, sent_right):

'''基于曼哈顿空间距离计算两个字符串语义空间表示相似度计算'''

return ((K.exp(-K.sum(K.abs(sent_left - sent_middle), axis=1, keepdims=True)) - K.exp(-K.sum(K.abs(sent_left - sent_right), axis=1, keepdims=True))) + 1) / 2

def bilstm_siamese_model():

‘’‘搭建孪生网络’’’

#可以在这里调参

embedding_layer = Embedding(VOCAB_SIZE + 1,

EMBEDDING_DIM,

weights=[embedding_matrix],

input_length=MAX_LENGTH,

trainable=True, #原本为False

mask_zero=True)

输入层

left_input = Input(shape=(MAX_LENGTH,), dtype=‘float32’, name=“left_x”) #(?, 25)

middle_input = Input(shape=(MAX_LENGTH,), dtype=‘float32’, name=“middle_x”) #(?, 25)

right_input = Input(shape=(MAX_LENGTH,), dtype=‘float32’, name=‘right_x’)

#嵌入层

encoded_left = embedding_layer(left_input) #(?, 25, 300)

encoded_middle = embedding_layer(middle_input) #(?, 25, 300)

encoded_right = embedding_layer(right_input)

提问

我的意思是从模型结构上得知其自定义层的名称

回答查看keras各种网络结构各层的名字方式 就是这个https://blog.csdn.net/liming/article/details/106888698

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com