Keras 有状态与无状态LSTM

Keras 有状态与无状态LSTM,keras,time-series,lstm,lstm-stateful,Keras,Time Series,Lstm,Lstm Stateful,我正在尝试在Keras中使用LSTM,我不确定是应该使用statefull还是无状态LSTM。我在网上读了很多资料,但似乎它们不适用于我的案例 我有一个长的预测序列X=[X1,X2,…,Xn]和一个长的响应序列y=[0,0,…,1,1,0,….0]。它们具有相同的长度,响应只能取值1或0。我的计划是对长预测序列进行二次抽样,并使用短序列(长度4)预测接下来3个时间点的响应。我的训练数据是这样的 [X1,X2,X3,X4],[y5,y6,y7] [X2,X3,X4,X5],[y6,y7,y8] .

我正在尝试在Keras中使用LSTM,我不确定是应该使用statefull还是无状态LSTM。我在网上读了很多资料,但似乎它们不适用于我的案例

我有一个长的预测序列
X=[X1,X2,…,Xn]
和一个长的响应序列
y=[0,0,…,1,1,0,….0]
。它们具有相同的长度,响应只能取值1或0。我的计划是对长预测序列进行二次抽样,并使用短序列(长度4)预测接下来3个时间点的响应。我的训练数据是这样的

[X1,X2,X3,X4],[y5,y6,y7]
[X2,X3,X4,X5],[y6,y7,y8]
...
如果我使用所有这些可用的短系列(示例),我想我应该选择stateful。但是,由于与1相比,y中的0要多得多,因此我将在短响应系列中保留所有具有1的样本(例如:保留此样本
[y5=0,y6=1,y7=0]
),但我将随机丢弃许多其他样本,以实现数据平衡


我不确定是否应该在这里使用stateful,因为一些短序列可能彼此相距很远。

我相信您正在尝试使用LSTM训练模型,但您也希望删除该时间序列数据的某些部分,并能够同时训练模型

从技术上讲,只需使用有状态的LSTM并将数据切分为相同的长度,然后提供一个样本权重即可实现这一点。例如,model.fit(x=data,y=class,sample_weight=np.array([1,1,0,0,0,1]),这将帮助您通过删除索引2,3,4而无需手动将其从数据中删除来实现所需的功能

通常,我们会修改损失,而不是删除时间序列的某些部分,例如错误地将类别1分类将产生比类别0 10倍的损失


希望这有帮助

谢谢你的回答。我同意你的看法,我们可以使用样本权重的类权重来达到同样的效果。然而,我最初的系列非常长,需要很长的时间才能将整个故事切分清楚。我想知道如果我删除了很多片会发生什么,我是否仍然应该使用有状态的LSTM?如果您需要删除那么多的数据,那么使用LSTM,LSTM尝试近似从前一个状态到下一个状态的转换函数是没有用的。因此,如果删除两点之间的数据,则数据已断开连接,因此您无法再训练模型,除非您有办法获得LSTM以前的内部状态。您仍然可以毫无问题地训练模型,只需指定断开连接组件的初始状态即可。此外,您可以使用类似于“for loop”的方法,并为概率为P到0的实例随机设置权重。结合损耗修正可以非常有效。或者,您可以将数据分成小块,而不考虑连续性和初始状态,并对其进行训练,这可能会导致性能下降。