我有一个标记句子列表。我用以下方式改变了每一个:
input_dim
的向量); len(sentence)
的窗口分割time_steps
个子句中的每个句子(以获取预测下一个单词的上下文)。例如,使用time_steps=2
,单个句子["this", "is",
"an", "example"]
将转换为:
[
[one_hot_enc("empty_word"), one_hot_enc("empty_word")],
[one_hot_enc("empty_word"), one_hot_enc("this")],
[one_hot_enc("this"), one_hot_enc("is")],
[one_hot_enc("is"), one_hot_enc("an")],
]
最后,将子句子视为唯一列表,列车数据X_train
的形状为(num_samples, time_steps, input_dim)
,其中:
input_dim
:我的词汇量的大小; time_steps
:用于LSTM的序列长度; num_samples
:样本数量(子句); 现在,我想使用Embedding
图层,以便将每个单词映射到较小的连续维度空间,以及LSTM
,其中我使用上面构建的上下文。< / p>
我试过这样的事情:
model = Sequential()
model.add(InputLayer(input_shape=(time_steps, input_dim)))
model.add(Embedding(input_dim, embedding_size, input_length=time_steps))
model.add(LSTM(32))
model.add(Dense(output_dim))
model.add(Activation('softmax'))
但是给了我以下错误:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
我错过了什么?我正在尝试做什么有一些逻辑错误?
答案 0 :(得分:1)
您只需删除输入图层,然后让嵌入图层成为网络的第一层。 或者你可以通过删除&#34; input_dim&#34;来构造输入层。像
model.add(InputLayer(input_shape=(time_steps, )))