Keras预期density_13具有2维

时间:2018-09-04 09:02:19

标签: python keras lstm

我收到来自Keras的非常令人困惑的错误消息。我使用以下模型并将形状为(num_examples, n, 1)的输入传递给它。

def create_model():
    model = Sequential()
    model.add(LSTM(64, input_shape=(n,1), return_sequences=False))
    model.add(Dense(units=n, activation='linear'))
    return model

我收到此错误消息: ValueError: Error when checking target: expected dense_16 to have 2 dimensions, but got array with shape (11030, 50, 1)

那怎么可能呢?如果我使用model.summary(),则表明LSTM的输出具有以下形状:(None, 64)。那么它将如何将形状为(11030, 50, 1)的数组传递到密集层?

此外,如果我尝试在LSTM和Dense之间添加model.add(Flatten()),则会收到此错误:ValueError: Input 0 is incompatible with layer flatten_3: expected min_ndim=3, found ndim=2

那么,它将2D传递给Flatten,但是如何将3D传递给Dense?

2 个答案:

答案 0 :(得分:4)

问题不是您的模型,而是您提供的目标,即 y 标签。您不匹配,因为您的模型输出了(batch_size, n),而您给出的是(batch_size, 50, 1)

假设n=50,则需要将目标标签压缩到2维并删除1。y_train = y_train.squeeze()应该可以解决形状不匹配的问题。

答案 1 :(得分:0)

这可能会有所帮助

import numpy as np
input_array = np.array(input_array).reshape(dim1, dim2)

其中dim1,dim2表示您需要的尺寸大小。