【问题标题】:How to use tensorflow Attention layer?如何使用 tensorflow 注意力层?
【发布时间】:2020-10-18 05:37:55
【问题描述】:

我正在尝试了解如何使用此处显示的tf.keras.layers.Attention

Tensorflow Attention Layer

我正在尝试将它与编码器解码器 seq2seq 模型一起使用。以下是我的代码:

encoder_inputs = Input(shape=(max_len_text,)) 
enc_emb = Embedding(x_voc_size, latent_dim,trainable=True)(encoder_inputs) 
encoder_lstm=LSTM(latent_dim, return_state=True, return_sequences=True) 
encoder_outputs, state_h, state_c= encoder_lstm(enc_emb) 

decoder_inputs = Input(shape=(max_len_summary,)) 
dec_emb_layer = Embedding(y_voc_size, latent_dim,trainable=True) 
dec_emb = dec_emb_layer(decoder_inputs) 

decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True) 
decoder_outputs,decoder_fwd_state, decoder_back_state = decoder_lstm(dec_emb,initial_state=[state_h, state_c]) 

我的问题是,如何在这个模型中使用 keras 中给定的注意力层?我无法理解他们的文件。

【问题讨论】:

    标签: python tensorflow keras seq2seq


    【解决方案1】:

    如果你使用的是RNN,我不推荐使用上面的类。

    在分析 tf.keras.layers.Attention Github 代码以更好地理解您的难题时,我遇到的第一行是 - “此类适用于 Dense 或 CNN 网络,而不适用于 RNN 网络”

    我建议您编写自己的 seq to seq 模型,该模型只需不到十几行代码即可完成。例如:https://www.tensorflow.org/tutorials/text/nmt_with_attention

    要编写自己的自定义注意力层(基于您是否更喜欢 Bahdanau、Luong、Raffel、Yang 等),也许这篇概述基本本质的帖子可能会有所帮助:Custom Attention Layer using in Keras

    【讨论】:

    • 啊,这很有道理。我永远无法让这一层与 LSTM 网络一起使用。我认为在这种情况下,您需要使用自定义注意力层编写自定义训练循环。基本上,正如教程所说,您需要使用编码器序列一次迭代一个解码器,特别是如果您想要教师强制,通常您会这样做。似乎你不能在这方面作弊,只输入完整的解码序列,但我认为这是有道理的,因为每次预测后都需要传递状态,其中包括前一个上下文向量。
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2020-10-08
    • 2020-03-16
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多