我正在使用 Keras 创建一个 LSTM,用于通过 IMDB 数据库(的子集)进行情感分析。如果我在最终的密集层之前添加一个扁平层,我的训练、验证和测试准确性将显着提高:
def lstm_model_flatten():
embedding_dim = 128
model = Sequential()
model.add(layers.Embedding(vocab_size, embedding_dim, input_length=maxlen))
model.add(layers.LSTM(128, return_sequences = True, dropout=0.2))
# Flatten layer
model.add(layers.Flatten())
model.add(layers.Dense(1,activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
return model
Run Code Online (Sandbox Code Playgroud)
这很快就会过拟合,但验证准确率高达 76% 左右:
Model: "sequential_43"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_42 (Embedding) (None, 500, 128) 4768256
_________________________________________________________________
lstm_63 (LSTM) (None, 500, 128) 131584
_________________________________________________________________
flatten_10 (Flatten) (None, 64000) 0
_________________________________________________________________
dense_40 (Dense) (None, 1) 64001
=================================================================
Total params: 4,963,841
Trainable params: 4,963,841
Non-trainable params: …Run Code Online (Sandbox Code Playgroud)