在Keras的有状态LSTM中,批次之间的状态是否保留?

时间:2019-01-29 22:49:50

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

假设我要对时间序列进行分类,它们每个都有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)

然后,我将每个时间序列的下三个时间步设为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)。我重复此过程,直到从输入数据中到达包含时间步骤31至33的X_11。在我致电model.fit(X_11, y)之后,我要致电model.reset_states(),因为我已经完成了第一批的32个时间序列,并且可以从头开始重新开始新的32个时间序列。 / p>

至少直到现在,我还以为这是做到这一点的方法。但是,现在我读到,默认情况下,批次中的所有样本都保留状态,所以这意味着X_0中时间序列1的前3个步骤中的状态也将用于时间的前3个步骤中系列2?因为那没有意义,所以它们之间没有任何共同点,因此不应在它们之间共享状态。那么什么是正确的?

1 个答案:

答案 0 :(得分:1)

否,状态是矩阵,其维度之一是批处理大小,这意味着每个样本有一行状态。

系列1与系列2不通讯。