keras多层LSTM模型的股价预测收敛到一个恒定值

时间:2018-07-31 16:40:59

标签: python tensorflow keras regression lstm

enter image description here我已经制作了一个多层LSTM模型,该模型使用回归来预测数据的下一帧值。模型在20个纪元后完成。然后,我得到一些预测,并将它们与我的基本真理值进行比较。正如您在上图中看到的那样,预测收敛到一个恒定值。我不知道为什么会这样。 到目前为止,这是我的模型:

str

EDIT1: 我将时代从20减少到3。结果如下: prediction results after 3 epochs.

通过比较2张图片,我可以得出结论,当时期数增加时,预测更有可能收敛到大约-0.1的某个特定值。

1 个答案:

答案 0 :(得分:2)

因此,在尝试了不同数量的LSTM单元和不同类型的体系结构之后,我意识到当前LSTM单元的数量导致模型学习得如此缓慢,而20个纪元不足以实现这种学习对于每一层,我将LSTM单位的数量更改为64,并删除了Dense(1024)层,并将纪元数从20增加到了400,结果非常接近基本的真值。 我应该提到的是,新模型中使用的数据集与前一个模型不同,因为我在使用该数据集时遇到了一些问题。这是新模型:

from keras.optimizers import RMSprop
from keras.initializers import glorot_uniform, glorot_normal, RandomUniform

init = glorot_normal(seed=None)
init1 = RandomUniform(minval=-0.05, maxval=0.05)
optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)

model = Sequential()

model.add(LSTM(units=64, dropout=0.2, recurrent_dropout=0.2, 
               input_shape=(x_train.shape[1], x_train.shape[2]), 
               return_sequences=True, kernel_initializer=init))

model.add(LSTM(units=64, dropout=0.2, recurrent_dropout=0.2, 
               return_sequences=False, kernel_initializer=init))


model.add(Dense(1, activation='linear', kernel_initializer= init1))
model.compile(loss='mean_squared_error', optimizer=optimizer )
model.summary()

您可以在此处查看预测: enter image description here

它仍然不是最好的模型,但至少比以前的模型要好。 如果您有任何进一步的改进建议,将不胜感激。