使用Keras的LSTM进行未来时间序列值预测

3

我希望能预测多变量时间序列的未来值。我使用这段代码作为模板,但将输出激活函数修改为线性。

https://gist.github.com/karpathy/587454dc0146a6ae21fc

输入数据是一个由双精度值组成的8维向量序列。输出是输入序列的下一个时间段内相同的8维向量。这就是选择线性激活函数的原因。

model = Sequential()
model.add(LSTM(512, input_dim=len(chars),return_sequences=True)) #minesh witout specifying the input_length
model.add(LSTM(512, return_sequences=True)) #- original
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(len(chars))))
model.add(Activation('linear'))
model.compile(loss='mean_squared_error', optimizer='rmsprop')

我对Keras和RNN很新,能有人确认一下这个设计吗?

1个回答

2

每个样本中有8x2个输入,对于这8个时间步骤的每一个,您会编码512个特征并进行跟踪。然后又是512个值... 参数数量必须巨大吧?我希望您有足够的数据和模式变化以利用这么多的参数,否则您将出现过拟合。

我还建议您像这样为LSTM使用dropout:

model.add(LSTM(512, return_sequences=True, dropout_W = 0.2)) #- original

还有一个功能叫做dropout_U,但我不建议使用。你应该知道,LSTM有多个门控,每个门控都是密集层,因此可以选择在哪个门控上应用dropout。最佳实践是将其应用于输入门(dropout_W),而不是循环门(dropout_U)。

否则,整体架构是有意义的。


谢谢您的建议。 - bhomass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接