【发布时间】:2017-07-06 10:37:27
【问题描述】:
model = Sequential()
model.add(Embedding(630, 210))
model.add(LSTM(1024, dropout = 0.2, return_sequences = True))
model.add(LSTM(1024, dropout = 0.2, return_sequences = True))
model.add(Dense(210, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
filepath = 'ner_2-{epoch:02d}-{loss:.5f}.hdf5'
checkpoint = ModelCheckpoint(filepath, monitor = 'loss', verbose = 1, save_best_only = True, mode = 'min')
callback_list = [checkpoint]
model.fit(X, y , epochs = 20, batch_size = 1024, callbacks = callback_list)
X:输入向量的形状为 (204564, 630, 1)
y:目标向量的形状为 (204564, 210, 1)
即对于每 630 个输入,必须预测 210 个输出,但代码在编译时会引发以下错误
ValueError Traceback (most recent call last)
<ipython-input-57-05a6affb6217> in <module>()
50 callback_list = [checkpoint]
51
---> 52 model.fit(X, y , epochs = 20, batch_size = 1024, callbacks = callback_list)
53 print('successful')
ValueError: Error when checking model input: expected embedding_8_input to have 2 dimensions, but got array with shape (204564, 630, 1)
请有人解释为什么会出现这个错误以及如何解决这个问题
【问题讨论】:
-
你的维度太多了,为什么是 (204564, 630, 1) 而不仅仅是 (204564, 630)?
-
实际上 - 并不是说对于 630 个序列元素中的每一个,您都有 210 个预测中的一个。您对整个序列有 210 个预测。您能否详细说明您的
y代表什么? -
您似乎也错误地定义了
Embedding层。您想要的词汇量和嵌入暗度是多少? -
@Marcin Mozejko 也许你能给我一些更好的想法来解决这个问题:
-
我必须一次查看三个单词并预测下一个单词(文本生成问题),现在每个单词都有 3 个标签,因此分析 9 个标签并预测下一个后续单词的 3 个标签。有70个唯一标签,一个词最多可以有70个标签中的3个。有什么想法吗?我还需要提高模型的效率
标签: python-3.x machine-learning deep-learning keras mismatch