gpt4 book ai didi

python - 多输入预训练模型

转载 作者:行者123 更新时间:2023-12-01 09:32:29 25 4
gpt4 key购买 nike

我目前正在使用 Keras + Tensorflow 开发一个模型,用于根据 STS 基准计算句子相似度 ( http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark )。我的做法是,首先创建一个预训练模型,将单词嵌入向量列表转换为单个句子嵌入向量。现在,我想做的是将这个预训练模型合并到一个新模型中,该模型使用该模型来转换输入。以下是该新模型的代码。

sentence_encoder = load_model('path/to/model')

input1 = Input(shape=(30, 300), dtype='float32') # 30 words, 300 dim embedding
input2 = Input(shape=(30, 300), dtype='float32')
x1 = sentence_encoder(input1)
x2 = sentence_encoder(input2)
abs_diff = Lambda(lambda x: abs(x[0] - x[1]))([x1, x2])
x = Dense(300, activation='relu', kernel_initializer='he_uniform')(abs_diff)
result = Dense(1, activation='sigmoid')(x)

model = Model([input1, input2], result)
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])

model.fit(...)

当我运行它时,会生成一个模型并且正确完成。然而,我想知道的是,sentence_encoder 是否与这个新模型一起接受训练,或者它的权重是否保持不变?如果可能的话,我希望 sentence_encoder 的权重受到这个新模型训练的影响。如果这不能实现这一目标,我该如何去做呢?

提前谢谢您!

最佳答案

如果您不卡住预训练的模型层,它们将在训练期间重新计算。这通常不是您想要的。

更常见的做法是卡住除最后几个预训练层之外的所有层,然后将层添加到顶部并仅训练模型的该部分。

在 Keras 中,您可以通过将其 trainable 属性设置为 false 来卡住网络:

sentence_encoder.trainable = False

要卡住模型中的层子集:

sentence_encoder.trainable = True
is_trainable = False
for layer in sentence_encoder.layers:
if layer.name == 'last layer name':
is_trainable = True
if is_trainable:
layer.trainable = True
else:
layer.trainable = False

关于python - 多输入预训练模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com