使用 tensorflow 构建用于时间序列预测的 2 层 LSTM

数据挖掘 Python 神经网络 张量流 时间序列 lstm
2022-02-18 18:48:12

从 Tensorflow 教程中,我正在用 LSTM 试验时间序列

在使用 LSTM 教程的“多步预测”部分中说

由于这里的任务比前一个任务复杂一些,因此模型现在由两个 LSTM 层组成。最后,由于进行了 72 个预测,因此密集层输出 72 个预测。

之前的任务是对单点进行预测。

我们如何知道一个问题需要多少层(这里是 2)?

然后,从实现的角度来看,使用 Python 的 Tensorflow 库,

multi_step_model = tf.keras.models.Sequential()
multi_step_model.add(tf.keras.layers.LSTM(32,
                                          return_sequences=True,
                                          input_shape=x_train_multi.shape[-2:]))
multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))
multi_step_model.add(tf.keras.layers.Dense(72))

为什么需要添加Dense(72)图层?该功能Dense()在做什么?(阅读文档并没有真正帮助)

1个回答

第一个问题: 多少层?

这是架构问题,也是构建 NN 时最重要的问题之一。一般来说,任务越复杂,你应该使用更多的层来近似(直到某个点,ResNet 的动机矫枉过正我们一开始就做得太过分了,我们可以通过一些聪明的技巧来取得一些好的结果,而不会做得太深。

TL;DR这取决于问题,但对于 98% 的问题并没有我们想象的那么深。

第二个(第三个?)问题: 为什么需要添加 Dense(72) 层?Dense() 函数在做什么?好吧,您说最后,由于进行了 72 个预测,因此密集层输出 72 个预测。对于这个问题,简而言之,密集函数在做什么,它产生一个(输出)向量。在 longdense layer 中表示一个矩阵向量的乘法。矩阵中的值实际上是在反向传播过程中更新的可训练参数(权重),如果您看到带有矩阵的 NN 的数学表示(这就是您如何利用 GPU-s bla bla 的力量),这正是密集层代表。