我正在关注Keras LSTM教程here,该教程使用了IMDb评论数据集。我有些困惑。加载数据集后,我们使用pad_sequences(X, maxlen=500)
确保所有输入文本的长度相同。但是稍后,在构建网络时,我们使用model.add(LSTM(100))
添加100个LSTM单位的层,而不是500个。
据我了解,pad_sequences
默认用零填充序列的 front ,对吗?这意味着,如果我们的评论长为一句话,则输入序列将大部分为零,最后是一句话。因此,如果我们的LSTM层只使用前100个字,那岂不是会完全取零吗?
简而言之,问题是,为什么我们不将LSTM层设置为等于序列长度?为什么在填充序列时不指定padding='post'
?
这是从教程中提取的代码:
from keras.datasets import imdb
from keras.models import Sequential, Dense, LSTM
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
# load the dataset but only keep the top n words, zero the rest
top_words = 5000
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words)
# truncate and pad input sequences
max_review_length = 500
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)
# create the model
model = Sequential()
model.add(Embedding(top_words, 32, input_length=max_review_length))
model.add(LSTM(100)) # HERE: why is this 100?
model.add(Dense(1, activation='sigmoid'))