【问题标题】:keras LSTM model input and output dimensions mismatchkeras LSTM 模型输入和输出尺寸不匹配
【发布时间】: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


【解决方案1】:

消息说:

您的第一层需要一个具有 2 个维度的输入:(BatchSize, SomeOtherDimension)。但是您的输入有 3 个维度(BatchSize=204564,SomeOtherDimension=630, 1)。

嗯...从您的输入中删除 1,或者在模型中对其进行重塑:

解决方案 1 - 从输入中删除:

X = X.reshape((204564,630))

解决方案 2 - 添加重塑层:

model = Sequential()
model.add(Reshape((630,),input_shape=(630,1)))
model.add(Embedding.....)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2016-11-01
    • 2018-09-18
    • 2019-02-04
    • 2022-07-08
    • 2017-05-13
    • 2020-04-28
    相关资源
    最近更新 更多