检查目标时出错:预期 dense_1 具有 3 个维度,但得到形状为 (118, 1) 的数组

新手上路,请多包涵

我正在训练一个模型来预测股票价格,输入数据是收盘价。我使用 45 天的数据来预测第 46 天的收盘价和经济指标作为第二个特征,这是模型:

 model = Sequential()
model.add( LSTM( 512, input_shape=(45, 2), return_sequences=True))
model.add( LSTM( 512, return_sequences=True))
model.add( (Dense(1)))
model.compile(loss='mse', optimizer='adam')
history = model.fit( X_train, y_train, batch_size = batchSize, epochs=epochs, shuffle = False)

当我运行它时,出现以下错误:

ValueError:检查目标时出错:预期 dense_1 具有 3 个维度,但得到形状为 (118, 1) 的数组

但是,我 print 数据的形状是:

 X_train:(118, 45, 2)
y_train:(118, 1)

我不知道为什么当 y_train 为 (118, 1) 时模型需要 3 维输出。我哪里错了,我该怎么办?

原文由 Chris Wong 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 419
2 个回答

你的第二个 LSTM 层也返回序列,默认情况下 Dense 层将内核应用于每个时间步也产生一个序列:

 # (bs, 45, 2)
model.add( LSTM( 512, input_shape=(45, 2), return_sequences=True))
# (bs, 45, 512)
model.add( LSTM( 512, return_sequences=True))
# (bs, 45, 512)
model.add( (Dense(1)))
# (bs, 45, 1)

所以你的输出是形状 (bs, 45, 1) 。要解决这个问题,您需要在第二个 LSTM 层中设置 return_sequences=False 以压缩序列:

 # (bs, 45, 2)
model.add( LSTM( 512, input_shape=(45, 2), return_sequences=True))
# (bs, 45, 512)
model.add( LSTM( 512, return_sequences=False)) # SET HERE
# (bs, 512)
model.add( (Dense(1)))
# (bs, 1)

您将获得所需的输出。注意 bs 是批量大小。

原文由 nuric 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了类似的问题,在 这里 找到了答案:

我在最后一个密集层之前添加了 model.add(Flatten())

原文由 Helen 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题