【问题标题】:Order of timesteps in Keras LSTM training and validation dataKeras LSTM 训练和验证数据中的时间步长顺序
【发布时间】:2020-12-15 07:20:04
【问题描述】:

当使用 Keras 循环层(例如 LSTM 层)时,您的输入数据应该是 [samples,timesteps,features] 的 3 维形式。这里的问题是我无法获得有关输入矩阵中时间步长维度顺序的任何可靠信息。作为一个具体的例子,对于给定的样本,第一个元素/行是最新的已知特征行还是最远的特征行?

我怀疑顺序会很重要,因为模型是循环的,实际上,当翻转 timesteps 列的顺序时,你最终会得到不同的训练结果(当你适当地设置了可以产生可重复性的种子时。)

如果有人强迫我猜测,我会假设第一行(对于一个样本)将是序列中最远的特征,但这里有明确的答案吗?

【问题讨论】:

    标签: python keras lstm


    【解决方案1】:

    在 Keras 中将 3D 数组描述为 2D 数组的数组更容易。第一个维度是样本。

    您的数组必须是 [samples, timesteps, features] 的形状。将其想象为一个长度样本数组,其中每个元素本身就是一个形状为[timesteps, features] 的二维数组。因此,需要明确的是,这个数组中的每个元素都是一个二维数组,其行数为timesteps,列数为features

    每个二维数组中的第一行(索引 0)是第一个时间步,即如您所说的最旧的。每个二维数组的最后一行是最后一个时间步长,即最近的时间步。对于每个 timestep 行,列中都有特征。

    它有助于像上面那样展开阵列,以便更轻松、更清晰地描绘它。

    希望这会有所帮助。

    【讨论】:

    • 是否有动机、定义或合乎逻辑的方式来说明为什么时间步长的顺序应该像你说的那样?首先让我感到困惑的一个原因是 Keras 数据函数 tf.keras.preprocessing.timeseries_dataset_from_array 的使用,该函数在他们自己的 LSTM 示例中使用。这个函数以一种奇怪的方式将特征与目标匹配,给你的印象是,与你所说的相比,时间步长应该以“相反”的顺序给出。
    • 我不确定是否有原因。但是,Keras 文档确实提到输入数据必须在轴 0 上具有时间,这意味着形状 [timesteps, features]。不过,我不明白您所说的“反向”是什么意思。
    • 我指的是 Keras 自己的数据预处理功能,如上所述,它以一种奇怪的方式将输出与特征序列进行匹配,例如反转取决于你如何看待事物。举个例子:设特征为 0,1,2,3,...和 ​​y 完全相同。然后该函数将输出 0 与长度为 4 时间步长的 [0,1,2,3] 序列匹配,如果长度等于 3,则将输出 0 匹配到 [0,1,2]。这变得令人困惑,因为这会意味着第一行时间步长(对于给定的样本)将是最新的已知特征数组,即不是您所说的。
    猜你喜欢
    • 2021-08-07
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2020-01-30
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多