【问题标题】:Is the state preserved between samples for one batch in a stateful LSTM in Keras?Keras 的有状态 LSTM 中的一批样本之间的状态是否保留?
【发布时间】:2019-01-29 22:49:50
【问题描述】:

假设我要对时间序列进行分类,每个时间序列都有 33 个时间步。我把它们分成更小的块。 所以假设我有以下输入X_1,维度是(32,3,1),所以32个样本,3个时间步长,1个特征:

[
    [[1],  [2],  [3]]  # step 1 to step 3 from time series 1
    [[11], [14], [17]] # step 1 to step 3 from time series 2
    [[3],  [5],  [7]]  # step 1 to step 3 from time series 3
    ...
    [[9],  [7],  [2]]  # step 1 to step 3 from time series 32
]

Y = [A, A, B, …, B] 包含这批中 32 个时间序列中每个时间序列的标签。

现在我运行model.fit(X_1, Y)

然后我将每个时间序列的接下来的 3 个时间步长设为X_2

[
    [[4],  [5],  [6]]  # step 4 to step 6 from time series 1
    [[20], [23], [26]] # step 4 to step 6 from time series 2
    [[9],  [11], [13]] # step 4 to step 6 from time series 3
    ...
    [[8],  [1],  [9]]  # step 4 to step 6 from time series 32
]

同样的Y = [A, A, B, …, B]

因为我已经拆分了时间序列,所以我使用有状态模型,以便将来自X_1 的状态保存到X_2

我再次运行model.fit(X_2, Y)。我重复这个直到我到达X_11,其中包含来自我的输入数据的时间步长 31 到 33。在我打电话给model.fit(X_11, y) 之后,我会打电话给model.reset_states(),因为我已经完成了第一批 32 个时间序列,我可以从头开始重新开始一个新的一批 32 个时间序列。

至少到目前为止,我认为这是做到这一点的方法。但是现在我读到,默认情况下,批次中的样本会保留状态,这是否意味着 X_0 中时间序列 1 的前 3 步的状态也用于时间序列 2 的前 3 步?因为那没有意义,他们没有共同点,国家不应该在他们之间共享。那么什么是正确的呢?

【问题讨论】:

    标签: python machine-learning keras neural-network lstm


    【解决方案1】:

    不,状态是其中一个维度是批量大小的矩阵,这意味着每个样本有一行状态。

    系列 1 不与系列 2 通信。

    【讨论】:

    • 谢谢,这就是为什么在使用有状态 LSTM 时批量大小固定的原因,对吧?
    • 如果您记得 batch1 正在与 batch2 通信,是的,这就是原因。 (状态可以灵活地具有任何批量大小,但是当您希望两个批次共享状态时,这些批次必须匹配)
    猜你喜欢
    • 2018-10-07
    • 2020-02-03
    • 2017-08-31
    • 2016-11-09
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2018-03-30
    • 2019-02-09
    相关资源
    最近更新 更多