【发布时间】: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