在 LSTM 的 keras 示例中,用于对 IMDB 序列数据进行建模(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py),在输入到 LSTM 层之前有一个嵌入层:
model.add(Embedding(max_features,128)) #max_features=20000
model.add(LSTM(128))
嵌入层的真正作用是什么?在这种情况下,这是否意味着 LSTM 层的输入序列的长度是 128?如果是这样,我可以将 LSTM 层写为:
model.add(LSTM(128,input_shape=(128,1))
但也注意到输入X_train
已受到pad_sequences
加工:
print('Pad sequences (samples x time)')
X_train = sequence.pad_sequences(X_train, maxlen=maxlen) #maxlen=80
X_test = sequence.pad_sequences(X_test, maxlen=maxlen) #maxlen=80
好像输入序列长度是80?
引用文档 https://keras.io/layers/embeddings/#embedding:
将正整数(索引)转换为固定大小的密集向量。
例如。 [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
基本上,这会将索引(表示您的 IMDB 评论包含哪些单词)转换为具有给定大小的向量(在您的情况下为 128)。
如果您不知道嵌入是什么,这是维基百科的定义 https://en.wikipedia.org/wiki/Word_embedding:
词嵌入是一组语言建模的统称
以及自然语言处理(NLP)中的特征学习技术
其中词汇表中的单词或短语被映射到向量
低维空间中相对于词汇表的实数
大小(“连续空间”)。
回到你问的另一个问题:
在这种情况下,这是否意味着输入序列的长度
LSTM层是128?
不完全的。对于循环网络,您将有一个时间维度和一个特征维度。 128 是你的特征维度,即每个嵌入向量应该有多少个维度。您的示例中的时间维度存储在maxlen
,用于生成训练序列。
无论您向 128 提供什么LSTM层是LSTM的实际输出单元数 https://keras.io/layers/recurrent/#lstm.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)