有些时候我们需要对一些输入层进行权值共享,这个目的就是有些输入源的数据是非常类似的,我们可以使用同一个层来进行捕捉特征,比如左右眼图片识别等,左右眼的结构较为类似,所以我们可以使用一个共享卷积核进行操作,而不需要两个卷积分别作用于两个眼部输入源。
共享层通常用于对来自相似空间(例如,两个具有相似词汇的不同文本)的输入进行编码。它们可以实现在这些不同的输入之间共享信息,以及在更少的数据上训练这种模型。如果在其中的一个输入中看到了一个给定单词,那么将有利于处理通过共享层的所有输入。
函数式 API 的另一个很好的用途是使用共享层
的模型。共享层是在同一个模型中多次重用的层实例,它们会学习与层计算图中的多个路径相对应的特征
完整代码
"""
* Created with PyCharm
* 作者: 阿光
* 日期: 2022/1/2
* 时间: 11:08
* 描述:
"""
from keras import Model
from tensorflow import keras
from tensorflow.keras.layers import *
shared_embedding = Embedding(1000, 128)
text_input_a = Input(shape=(None,), dtype='int32')
text_input_b = Input(shape=(None,), dtype='int32')
encoded_input_a = shared_embedding(text_input_a)
encoded_input_b = shared_embedding(text_input_b)
outputs = Add()([encoded_input_a, encoded_input_b])
model = Model(
inputs=[text_input_a, text_input_b],
outputs=outputs
)
keras.utils.plot_model(model, "shared_layer.png", show_shapes=True)