分别对状态和无状态LSTM网络以及input_shape感到完全困惑

时间:2019-01-29 20:15:47

标签: python tensorflow machine-learning keras lstm

比方说,我有2500个A类时间序列,每17个时间步长:

Time series a_1: [0, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4]
Time series a_2: [10,11,12,13,12,11,10,11,12,13,12,11,10,11,12,13,14]
...
Times series a_2500: [3,5,7,5,3,5,7,5,3,5,7,5,3...]

我有2500个B类时间序列,又是17个时间步长:

Time series b_1: [3, 6, 3, 4, 5, 6, 7, 1, 4, 5, 4, 1, 5, 6, 7, 4, 1]
Time series b_2: [12,41,54,64,12,53,12,12,43,21,32,1, 32,31,53,12,1]
...
Time series b_2500: [some more random numbers]

每个时间序列只有一个数字功能,即上面的数字。我想使用Keras训练LSTM将时间序列分类为两个类之一。使用要求LSTM理解数据之间的时间相关性的功能,应该易于区分它们。A类具有季节性,而B类则没有。

我的问题是无状态LSTM和有状态LSTM之间的区别,以及如何为LSTM网络构造input_dimension。据我了解,LSTM的输入定义为(batch_size, time steps, features)。我将尝试介绍对这个问题进行建模的两种变体,我认为这将是“无状态”解决方案,而另一种是“ statefull”解决方案。如果是这样,哪个更可取?如果没有,那两种解决方案是什么?

变体1-无状态解决方案

我的X现在为(batch_size,17,1)。这意味着一批包含多个时间序列。

X将在该示例中:

[
                [[0], [1], [2], [3], [4], [3], [2], ..., [4]] # <- this here is time series a_1
                [[3], [6], [3], [4], [5], [6], [7], ..., [1]] # <- this here is time series b_1
                [[10], [11], [12], [13],          ..., .[14]] # <- this here is time series a_2
                ... # <- continue for all time series for one batch
]

我现在可以使用f.e. batch_size为32并一次使用不同的时间序列训练我的LSTM,同时预测我可以只显示一个时间序列的批次并将获得输出?

变体2-有状态的解决方案

还是我一次显示每个时间步长的时间序列,所以我的输入是(1,1,1),然后我只显示每个时间步长每个时间步长17次的单个功能?在完成一个时间序列后,我会调用model.reset_states()方法来忘记新时间序列的所有内容吗?

因此,我使用[[[0]]]的X(a_1的第一步),拟合模型,显示[[[1]]]a_1的第二步),拟合模型等。如果我到达了a_1的最后一个时间步,我会调用model.reset_state()并可以继续执行b_1中的所有时间步?

对于有状态解决方案,我需要使用1的批处理大小,因为如果我要一次对多个时间序列进行训练,那么在预测过程中也必须始终让它一次对多个时间序列进行分类,因此我可以在培训和测试过程中不要使用不同的批次大小?

0 个答案:

没有答案