我正在训练一个预测股价的模型,输入的数据是收盘价。我使用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: Error when checking target: expected dense_1 to have 3 dimensions, but got array with shape (118, 1)
然而,Iprint
数据的形状,它们是:
X_train:(118, 45, 2)
y_train:(118, 1)
我不知道为什么当yúu列为(118,1)时,模型会期望三维输出。我错在哪里?我该怎么办?
第二个LSTM层还返回序列,默认情况下,密集层将内核应用于每个时间步,同时生成序列:
所以你的输出是shape
(bs, 45, 1)
。要解决这个问题,需要在第二个LSTM层中设置return_sequences=False
,该层将压缩序列:你就会得到想要的结果。注
bs
是批大小。训练数据的格式应为:
(num_samples,num_features,num_signals/num_vectors)
。 按照此约定,尝试以数组的形式传递训练数据,该数组的大小按上述约定重塑,并确保在model.fit
命令中添加validation_data
参数。例如:其中,
X_input
,y_input
分别是具有形状(126711,1)和(126,1)的训练数据数组,X_output
,y_output
分别是具有形状(53711,1)和(53,1)的验证/测试数据数组。如果发现shuffle错误,请按照上述方法设置shuffle参数的值为True。
我也遇到了类似的问题,找到了答案here:
我在最后一层致密层之前加了
model.add(Flatten())
相关问题 更多 >
编程相关推荐