python - keras多层LSTM模型的股价预测收敛于恒定值

标签 python tensorflow keras regression lstm

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

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()

编辑1: 我将 epochs 从 20 减少到 3。结果如下: prediction results after 3 epochs.

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

最佳答案

因此,在尝试不同数量的 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

它仍然不是最好的模型,但至少优于前一个模型。 如果您对如何改进它有任何进一步的建议,我们将不胜感激。

关于python - keras多层LSTM模型的股价预测收敛于恒定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618251/

相关文章:

Python json.loads改变对象的顺序

python - 安装 pyspeckit 时 matplotlib 错误

python - 拆分出同时包含 str 和 int 的列

tensorflow - 将图形原型(prototype) (pb/pbtxt) 转换为 SavedModel 以用于 TensorFlow Serving 或 Cloud ML Engine

python - 如何在 TF2 的 Keras Lambda 层中包装卡住的 Tensorflow 图?

python - "max_q_size"中使用的参数 "model.fit_generator"是什么?

python - 使用 alembic 创建数据库表和在 SQLAlchemy 中定义模型有什么区别?

python - 属性错误: module 'tensorflow' has no attribute 'keras'

python - 服务 attention_ocr 模型时出错 ("error": "Expected one or two output Tensors, found 17")

python - Keras/NN - 处理 NaN、缺少输入