首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras多层LSTM模型的股价预测收敛于一个常数

keras多层LSTM模型的股价预测收敛于一个常数
EN

Stack Overflow用户
提问于 2018-07-31 16:40:59
回答 1查看 2.4K关注 0票数 2

我建立了一个多层LSTM模型,它使用回归来预测数据的下一个帧的值。该模型在20年代后完成。然后,我得到一些预测,并将它们与我的实际真值进行比较。正如您在上面的图片中所看到的,预测会聚合到一个恒定的值。我不知道为什么会这样。到目前为止,我的模型如下:

代码语言:javascript
复制
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers import LSTM, BatchNormalization
from tensorflow.python.keras.initializers import RandomUniform

init = RandomUniform(minval=-0.05, maxval= 0.05)

model = Sequential()

model.add(LSTM(kernel_initializer=init, activation='relu', return_sequences=True, units=800, dropout=0.5, recurrent_dropout=0.2, input_shape=(x_train.shape[1], x_train.shape[2]) ))
model.add(LSTM(kernel_initializer=init, activation='relu', return_sequences=False, units=500, dropout=0.5, recurrent_dropout=0.2 ))

model.add(Dense(1024, activation='linear', kernel_initializer=init))
model.add(BatchNormalization())
model.add(Dropout(0.5))
model.add(Dense(1, activation='linear', kernel_initializer= 'normal'))

model.compile(loss='mean_squared_error', optimizer='rmsprop' )
model.summary()

EDIT1: I将历元从20减少到3。结果如下:

通过对两幅图片的比较,我可以得出结论,当年代数增加时,预测更有可能收敛到某个特定值,即-0.1左右。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 09:10:49

所以,在尝试了不同数量的LSTM单元和不同类型的体系结构之后,我意识到当前的LSTM单元数会导致模型学习得太慢,而对于如此庞大的model.For每层都有20个时代是不够的,我将LSTM单元的数量更改为64,并删除了Dense(1024)层,并将时间从20个增加到400个,结果非常接近于地面真值。--我应该提到,在新模型中使用的数据集不同于前一个模型,因为我遇到了该数据集的一些问题。以下是新的模式:

代码语言:javascript
复制
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()

你可以在这里看到预测:

这仍然不是最好的模式,但至少表现优于前一个。如果你对如何改进它有任何进一步的建议,它将是非常感谢的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51618251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档