我正在尝试在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]
...如果我使用所有这些可用的短系列(示例),我认为我应该选择有状态。但是,因为与1相比,y中的0要多得多,所以我将保留短响应序列中具有1的所有样本(例如:保留此样本[y5=0,y6=1,y7=0]),但我将随机删除许多其他样本,以使数据平衡。
我不确定是否应该在这里使用stateful,因为一些简短的系列可能彼此相距很远。
发布于 2020-04-26 06:21:54
我相信您正在尝试使用LSTM训练模型,但您也希望删除该时间序列数据的某些部分,以便能够在同一时间训练模型。
从技术上讲,您只需使用有状态LSTM并将数据切成相同的长度,然后提供sample_weight.即可实现这一点例如,model.fit(x=data,y=class,sample_weight=np.array(1,1,0,0,0,1)),这将帮助您通过删除索引2,3,4而无需手动将其从数据中删除来实现您想要的结果。
通常,我们修改损失而不是删除时间序列的某一部分,类似于错误分类1类的东西将产生比0类10倍的损失。
希望这对你有所帮助
https://stackoverflow.com/questions/61429788
复制相似问题