我收到来自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?
答案 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表示您需要的尺寸大小。