原理
李宏毅老师讲RNN LSTM 视频
很好地讲述了lstm的原理。

timesteps理解
lstm的样本:样本数,时间步长,特征数量,在时间序列中如何转化?
对于多变量时间序列的预测,最后一段解释了。
y~y-1 y-2 y-3 x-1 x-2 x-3
假定样本数600,一个因变量,6个自变量(yx的滞后项)
那么,可以这样写:
(600,1,6):timesteps为1,不进行记忆的传递,特征数为6.
(600,6,1):timesteps为6,只有一个特征,但是记忆传递6次
(600,3,2):2个特征,滞后3次:注意在r转化矩阵时,要检验得到的矩阵是否准确
这取决于我们的自变量特征上下文是否有联系。

实操
lstm代码jason
这里设置timestep=1
首先需要把2维的时间序列多变量数据转化为3维,inputoutput不用管,选用dense,隐藏层用lstm层。
#python
# split into input and outputs
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
# design network
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)
# make a prediction
yhat = model.predict(test_X)
test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))
# invert scaling for forecast
inv_yhat = concatenate((yhat, test_X[:, 1:]), axis=1)
inv_yhat = scaler.inverse_transform(inv_yhat)
inv_yhat = inv_yhat[:,0]
# invert scaling for actual
test_y = test_y.reshape((len(test_y), 1))
inv_y = concatenate((test_y, test_X[:, 1:]), axis=1)
inv_y = scaler.inverse_transform(inv_y)
inv_y = inv_y[:,0]
变量和步
多变量多步lstm jason
多变量:特征维数是变量个数
多步预测:output层节点是提前预测步数,相应的y的维度也是提前预测步数
lstm变种
lstm变种评析
总结一下,这里只是讲述了现在非常常用的lstm和变种gru。但其实还有许多其他种类,比由Gers & Schmidhuber (2000)介绍的广受欢迎的lstm变种,添加了“门镜连接”。这意味着我们可以让门观察cell状态。比如Yao, et al. (2015)提出的Depth Gate RNN,又比如 Koutnik, et al. (2014)提出的Clockwork RNN等等…
然后对于我们来说,选择那种lstm或者变种呢?其实 Greff, et al. (2015)对流行的变种做了一个很好的比较,发现它们都是一样的。Jozefowicz, et al. (2015)测试了超过一万中RNN结构,发现某些任务情形下,有些比LSTM工作得更好,但那也是比较特殊的时候。
如果只是对gru和lstm来说的话,一方面GRU的参数更少,因而训练稍快或需要更少的数据来泛化。另一方面,如果你有足够的数据,LSTM的强大表达能力可能会产生更好的结果。
本文介绍了LSTM的工作原理,重点解释了时间步长(timesteps)的理解,包括如何将多变量时间序列数据转化为适合LSTM模型的格式。实操部分展示了LSTM模型的构建,强调了在处理多变量和多步预测时的注意事项。此外,还讨论了LSTM的变种,如GRU,并引用了相关研究比较不同RNN结构的性能,指出在特定情况下GRU可能因为参数少而训练更快,但LSTM在数据充足时可能表现更优。

2332

被折叠的 条评论
为什么被折叠?



