0

我正在尝试在 Keras 中使用 LSTM,但我不确定我应该使用 statefull 还是 stateless 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]
...

如果我使用所有这些可用的短系列(样本),我认为我应该选择有状态的。但是,由于y与 1 相比,0 更多,我将保留所有在短响应系列中具有 1 的样本(例如:保留此样本[y5=0,y6=1,y7=0]),但我会随机丢弃许多其他样本,只是为了制作数据平衡。

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

4

1 回答 1

1

我相信您正在尝试使用 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 倍的损失。

希望这有帮助

于 2020-04-25T22:21:54.210 回答