我正在尝试在Keras的时间序列数据上训练ANN。我有三个数据向量被分解为滚动窗口序列(即向量l)。神经网络为所有输入产生类似的模式
np.array([l[i:i+window_size] for i in range(len(l) - window_size)])
靶载体类似地加窗,从而神经网络输出的时间的步骤的下一个数WINDOW_SIZE目标矢量的预测。所有数据都使用min-max缩放器进行标准化。它以形状=(nb_samples,window_size,3)形式输入神经网络。这里是3个输入向量的图。
我已经成功从ANN鼓起的唯一输出如下情节。蓝色目标矢量,红色预测(绘图放大,使预测模式更清晰)。预测向量以window_size间隔绘制,因此每个重复模式都是来自网络的一个预测。
我已经尝试了许多不同的模型架构,数量的时代,激活功能,短而胖的网络,瘦,高。这是我目前的(这里有一点)。
Conv1D(64,4, input_shape=(None,3)) ->
Conv1d(32,4) ->
Dropout(24) ->
LSTM(32) ->
Dense(window_size)
但是我尝试的任何东西都不会影响输出这种重复模式的神经网络。我必须误解Keras的时间序列或LSTM。但是我现在非常失落,所以任何帮助都非常感谢。我已将完整的代码附加到此存储库。
https://github.com/jaybutera/dat-toy
感谢您的响应。自从我提出这个问题以来,我一直在编辑代码,这是一个错误。事情是我想要预测未来一个多步的时间。当我问这个问题的时候,输入的形状是(18830,30,8),正如你所描述的那样,但是输出是无意义的。是否有另一种预测未来一个以上时间步骤的方法? – jay
@jay我不太熟悉序列预测,但我添加了一个简单的例子,试图预测一些短序列。随机生成的数据不是真正的序列,因此没有可以学习的模式,所以输出并不意味着很多,但是可以看到一些结果。 – Nigel
@jay实际上,我稍微改进了这个例子,它现在确实学到了一些东西,尽管数据仍然不是真正的顺序,所以前5个输入时间步可能实际上并不能帮助模型学习关于最后5个输出时间步的任何事情。也不是说,如果你的输入和输出序列的长度相同,你不需要'RepeatVector'业务,并且可以在整个模型中保持顺序。 – Nigel