【问题标题】:How can I replace LSTM with BERT?如何用 BERT 替换 LSTM?
【发布时间】:2021-12-11 11:26:02
【问题描述】:

在这个例子中我需要使用 BERT 而不是 LSTM。是否可以只用 BERT 替换 LSTM 这个词?

inputs1=Input(shape=(2048,))
  
fe1 = Dense(128, activation='relu')(inputs1)

inputs2 = Input(shape=(max_length,))

se1 = Embedding(vocab_size, 256, mask_zero=True)(inputs2)

se2 = LSTM(256)(se1)

se3 = Dropout(0.5)(se2)

decoder1 = Concatenate()([fe1, se3])

decoder2 = Dense(128, activation='relu')(decoder1)

outputs = Dense(vocab_size, activation='softmax')(decoder2)

model=Model(inputs=[inputs1,inputs2],outputs=outputs)

或者我该如何开始使用它?

我试过了:

inputs1=Input(shape=(2048,))
fe1 = Dense(128, activation='relu')(inputs1)
inputs2 = Input(shape=(max_length,), name="input_ids")

in_mask = Input(shape=(max_length,), name="input_masks")
in_segment = Input(shape=(max_length,), name="segment_ids")

bert_inputs = [inputs2, in_mask, in_segment] 
bert_output = BertLayer(n_fine_tune_layers=12, pooling="mean")(bert_inputs) 

decoder1 = Concatenate()([fe1 bert_output])

decoder2 = Dense(256, activation='relu')(decoder1)

outputs = Dense(vocab_size, activation='softmax')(decoder2)
    
model=Model(inputs=[inputs1,inputs2],outputs=outputs)

但是得到了:

 bert_output = BertLayer(n_fine_tune_layers=12, pooling="mean")(bert_inputs) 
TypeError: __init__() missing 2 required positional arguments: 'pretrained_model_path' and 'output_size'

【问题讨论】:

    标签: lstm bert-language-model


    【解决方案1】:

    BERT 是一种预训练技术。它使用迁移学习在新环境中使用先前的知识。因此,要使用 BERT,您需要指定预训练的模型名称或路径。所以,不,你不能简单地将 LSTM 替换为 BERT。

    看看这个问题的答案:How to create a BERT Layer with Keras?

    【讨论】:

    • 非常感谢您的回复。对不起..如果我需要使用 bert 进行图像字幕。有什么办法像我发布的代码一样吗?我的意思是大多数方法都使用编码器和解码器,但我需要像帖子中的代码一样这样做
    • 不客气。您可以尝试按照错误消息中的建议添加“pretrained_model_path”和“output_size”参数。我不确定它是否有效@Lei
    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2021-03-20
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多