连体LSTM(Siamese LSTM)或共享LSTM(shared LSTM)

文章介绍了Keras函数式API的一个特性,即层的重复使用和权重共享。通过示例展示了如何使用共享的LSTM层处理两个输入,以计算语义相似度。模型结构包括两个共享同一LSTM层的输入分支,最后通过Dense层得出预测。这种方法提高了效率,避免了重复学习相同的表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:

函数式API还有一个重要特性,那就是能够重复多次使用一个层实例。如果你对一个层实例调用两次,而不是每次调用都实例化一个新层,那么每次调用可以重复使用相同的权重。这样你可以构建具有共享分支的模型,即几个分支全都共享相同的知识并执行相同的运算。也就是说,这些分支共享相同的表示,并同时对不同的输入集合学习这些表示。

举个简单的例子,假设有一个模型想要评估两个句子之间的语义相似度。这个模型有两个输入,并输出一个取值于[0,1]之间的分数,0表示两个句子毫不相关,1表示两个句子完全相同或者只是换了一种表述。这种模型在很多应用中都很有用,其中包括在对话系统中删除重复的自然语言查询。

在这种设置下,两个输入句子是可以相互互换的,因为A对B的相似度和B对A的相似度是一个意思。因此,学习两个单独的模型来分别处理两个输入句子是浪费的。相反,需要一个LSTM层来处理两个句子,这个LSTM层的表示(即权重)是同时基于两个输入来学习的,这就是连体LSTM或共享LSTM。

使用Kreas函数式API中的层共享(层重复使用)可以实现这样的模型,代码如下:

from keras import layers
from keras import Input#为网络提供输入数据,提供了用于加载和预处理数据的工具,以便在训练和测试期间输入到网络中
from keras.models import Model

lstm=layers.LSTM(32)#将一个LSTM层实例化一次
left_input=Input(shape=(None,128))#构建模型的左分支,输入是长度为128的向量组成的变长序列
left_output=lstm(left_input)

right_input=Input(shape=(None,128))
right_output=lstm(right_input)#构建模型的右分支,如果调用已有的层实例,那么就会重复使用它的权重

merged=layers.concatenate([left_output,right_output],axis=-1)#在上面构建分类器
predictions=layers.Dense(1,activation='sigmoid')(merged)

model=Model([left_input,right_input],predictions)#将模型实例化并训练,训练时,基于两个输入对LSTM层的权重进行更新
model.fit([left_data,right_data],targets)

自然的,一个层实例可能被多次重复使用,他可以被调用任意多次,每次都重复使用一组相同的权重。

以上就是简单介绍Keras中函数式API的一个特性,有任何问题欢迎留言,私信等,感谢大噶!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值