RNN 无法对时间序列进行分类

数据挖掘 分类 时间序列 张量流 rnn
2022-02-24 08:05:42

我有 400 个长度为 50 的时间序列。其中 200 个的值介于 1-10 之间,被认为是 A 类。其余 200 个的值是 1-10,但 50 个数据点中的 3 个的值是 20,并且被认为是B型。

我正在尝试使用 RNN 网络使其使用 tensorflow 学习这些差异。

我使用 GRU 单元,输入大小为 50(整个时间序列),内部状态为 100,3 层,特征长度为 1,dropout 为 0.8。批量大小为 1(50 个值的 1 个整个时间序列)80% 的序列用于训练,20% 用于测试,均匀分布在 A 类和 B 类之间。

我使用 softmax 作为激活函数,对于梯度下降优化我使用 RMSPropOptimizer。另外,在将数据输入神经网络之前,我根本没有更改数据,我尝试使用 (x-min()/max()-min()) 对其进行归一化,但它没有用。

当我试图训练它时,我总是得到 50% 的错误。我尝试的最大时代是 10,它仍然是 50%。

如果我将相同的网络用于比这 3 个点具有更多差异的数据上,即使在每种类型大约 50 次运行的小型数据集上,相同的网络也可以正确分类。

RNN 不可能仅从 50 个数据点中的这 3 个数据点上学习这些微小的差异吗?你有什么建议我可以改变我的配置?我也尝试了 2000 个时间序列,但错误仍然相同。

另请注意,这 3 个数据点存在于时间序列的开头。(如果这与我的问题有关)。

1个回答

按照建议,我让它运行了更多的 epoch,我注意到在 23 个 epoch 之后,rnn 确实得到了 0% 的错误。

然后我尝试将 GRUCell 的激活函数从默认的 tanh 更改为 relu,它大大加快了训练速度。需要 1-4 个 epoch 才能获得 0% 的错误。