gpt4 book ai didi

python - Keras——使用 LSTM 层时精度较低,但不使用 LSTM 时精度很好

转载 作者:行者123 更新时间:2023-11-30 09:45:17 25 4
gpt4 key购买 nike

我正在使用 IMDB 数据集在 Keras 中训练模型。对于带有 LSTM 层的模型,准确率约为 50%:

 model = Sequential()
model.add(Embedding(max_features, 32))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32))
model.add(Dense(1, activation='sigmoid'))

准确度:

loss: 0.6933 - acc: 0.5007 - val_loss: 0.6932 - val_acc: 0.4947

我也尝试过使用单个 LSTM 层,但它也提供了类似的准确性。

但是,如果我不使用 LSTM 层,准确率会达到 82% 左右

model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l1(0.001), activation='relu', input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, kernel_regularizer=regularizers.l1(0.001), activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))

准确度:

 loss: 0.6738 - acc: 0.8214 - val_loss: 0.6250 - val_acc: 0.8320

这就是我编译和拟合模型的方式:

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.fit(partial_x_train, partial_y_train, epochs=Numepochs, batch_size=Batchsize, validation_data=(x_val, y_val))

这该如何解释呢?我认为 LSTM 对于顺序文本数据非常有效?

最佳答案

不要忘记 LSTM 用于处理序列,例如时间序列或文本数据。在序列中,元素的顺序非常重要,如果对元素重新排序,则该序列的整体含义可能会完全改变。

现在,您的情况的问题是您使用的预处理步骤不适合 LSTM 模型。您将每个句子编码为向量,其中每个元素代表特定单词的存在或不存在。因此,你完全忽略了句子中单词出现的顺序,而 LSTM 层擅长对其进行建模。考虑到您使用的预处理方案,您的 LSTM 模型中还存在另一个问题,即嵌入层接受单词索引作为输入,而不是由 0 和 1 组成的向量(即预处理阶段的输出)。

由于 IMDB 数据已经存储为单词索引序列,因此要解决此问题,您只需通过仅填充/截断指定长度的序列来预处理 IMDB 数据,以便能够利用批处理。例如:

from keras.preprocessing.sequences import pad_sequences

vocab_size = 10000 # only consider the 10000 most frequent words
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=vocab_size)

x_train = pad_sequences(x_train, maxlen=500) # truncate or pad sequences to make them all have a length of 500

现在,x_train 的形状为 (25000, 500),它由 25000 个长度为 500 的序列组成,编码为整数字索引。现在您可以通过将其传递给 fit 方法来使用它进行训练。我猜想使用嵌入层和单个 LSTM 层可以达到至少 80% 的训练准确率。不要忘记使用验证方案来监视过度拟合(一个简单的选择是在调用 fit 方法时设置 validation_split 参数)。

关于python - Keras——使用 LSTM 层时精度较低,但不使用 LSTM 时精度很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359127/

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