keras LSTM +Attetion性能下降

oyxsuwqo  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(113)

请原谅初学者的问题。我试着在Kaggle上遵循一个简单的代码教程:

https://www.kaggle.com/code/haithemhermessi/attention-mechanism-keras-as-simple-as-possible#About-77%-of-accuracy-has-been-observed-with-basic-LSTM-and-without-Attention.-Lets-now-implement-an-Attetion-layer-and-add-it-to-the-LSTM-Based-model

在文本情感分析场景中,基本上比较了纯LSTM模型与LSTM+Attention的性能。
我借用了链接中的大部分代码,做了两个小修改。首先,我将数据集更改为Kaggle上50 K Movie Reviews的IMDB数据集,标签更改为0和1 s。其次,我将数据集分为训练集和测试集,而不是将原始教程中的所有数据都用于训练。

X_train, X_test, Y_train, Y_test =  train_test_split(X, Y, test_size=0.2, stratify=Y, random_state=0)

用于构建LSTM+Attention模型的代码段是:

inputs=Input(shape=(text_pad.shape[1],))
x=Embedding(input_dim=vocab_lenght+1,output_dim=32,\
         input_length=text_pad.shape[1],embeddings_regularizer=tf.keras.regularizers.l2(.001)) 
        (inputs)
x1=LSTM(100,return_sequences=True,dropout=0.3,recurrent_dropout=0.2)(x)
atte_layer=attention()(x1)
outputs=Dense(1,activation='sigmoid',trainable=True)(atte_layer)
model=Model(inputs,outputs)

Attention类与代码教程中的相同。
然而,LSTM+Attention的性能并没有得到改善。原始LSTM训练损失/准确率绘制为:

验证集的准确度= 0.7989
而LSTM+Attetion模型具有:

验证集的准确度= 0.7878
我尝试增加epoch,但没有多大帮助。LSTM+Attention模型的性能略低于纯LSTM模型(没有大幅下降)。
我想从上面的Kaggle教程中寻求一些关于在哪里调试原始代码的建议。谢谢。

1qczuiv0

1qczuiv01#

谁知道呢也许那家伙是装的
通常,当我使用attention时,我会将结果与之前的输出连接起来,这样你就不会丢失任何信息。你可以试试。
例如:

...
x = layers.Concatenate()([atte_layer, x1])
outputs=Dense(1,activation='sigmoid',trainable=True)(x)

看看doc的例子:
https://keras.io/api/layers/attention_layers/attention/

相关问题