Keras:使用 LSTM 时改组数据集
Keras : Shuffling dataset while using LSTM
如果我错了请纠正我,但根据官方 Keras documentation,默认情况下,fit 函数具有参数 'shuffle=True',因此它会在每个 epoch 上打乱整个训练数据集。
然而,使用循环神经网络(如 LSTM 或 GRU)的要点是使用每个数据的精确顺序,以便先前数据的状态影响当前数据。
如果我们打乱所有的数据,所有的逻辑顺序都会被打乱。因此我不明白为什么有那么多 LSTM 的参数未设置为 False 的例子。使用没有序列的 RNN 有什么意义?
此外,当我将 shuffle 选项设置为 False 时,我的 LSTM 模型性能较低,即使数据之间存在依赖关系:我使用链接链接的 KDD99 数据集。
If we shuffle all the data, all the logical sequences are broken.
不,改组发生在批次轴上,而不是时间轴上。
通常,RNN 的数据具有如下形状:(batch_size, timesteps, features)
通常,你给你的网络不仅要学习一个序列,还要给很多序列。只有训练这些序列的顺序才会被打乱。序列本身保持完整。
洗牌通常总是一个好主意,因为您的网络只会学习训练示例本身,而不是它们的顺序。
话虽这么说,但在某些情况下,您确实只有一个巨大的序列可以从中学习。在这种情况下,您仍然可以选择将序列分成几批。如果是这种情况,您担心洗牌会产生巨大的负面影响是完全正确的,所以在这种情况下不要这样做!
注意:RNN 有一个 stateful
参数,您可以将其设置为 True
。在这种情况下,前一批次的最后状态将传递给下一批次,这有效地使您的 RNN 将所有批次视为一个巨大的序列。所以,如果你有多个批次的巨大序列,绝对要这样做。
如果我错了请纠正我,但根据官方 Keras documentation,默认情况下,fit 函数具有参数 'shuffle=True',因此它会在每个 epoch 上打乱整个训练数据集。
然而,使用循环神经网络(如 LSTM 或 GRU)的要点是使用每个数据的精确顺序,以便先前数据的状态影响当前数据。
如果我们打乱所有的数据,所有的逻辑顺序都会被打乱。因此我不明白为什么有那么多 LSTM 的参数未设置为 False 的例子。使用没有序列的 RNN 有什么意义?
此外,当我将 shuffle 选项设置为 False 时,我的 LSTM 模型性能较低,即使数据之间存在依赖关系:我使用链接链接的 KDD99 数据集。
If we shuffle all the data, all the logical sequences are broken.
不,改组发生在批次轴上,而不是时间轴上。
通常,RNN 的数据具有如下形状:(batch_size, timesteps, features)
通常,你给你的网络不仅要学习一个序列,还要给很多序列。只有训练这些序列的顺序才会被打乱。序列本身保持完整。 洗牌通常总是一个好主意,因为您的网络只会学习训练示例本身,而不是它们的顺序。
话虽这么说,但在某些情况下,您确实只有一个巨大的序列可以从中学习。在这种情况下,您仍然可以选择将序列分成几批。如果是这种情况,您担心洗牌会产生巨大的负面影响是完全正确的,所以在这种情况下不要这样做!
注意:RNN 有一个 stateful
参数,您可以将其设置为 True
。在这种情况下,前一批次的最后状态将传递给下一批次,这有效地使您的 RNN 将所有批次视为一个巨大的序列。所以,如果你有多个批次的巨大序列,绝对要这样做。