我有一个使用LSTM预测时间序列值的tensorflow 模型,它训练得很好,但当我要求它预测一些时间值时,它只给我T+1值,
我怎样才能让它给予我从T+1到T+n的值而不仅仅是T+1。
我想把预测值还给他,让他在一个循环中再次进行分析,例如:
We look back at 20 samples for this example
T±0 = now value
T-k = value k steps into the past (known)
T+n = value n steps into the future (unkown at the start)
--- Algorithm
T+1 = model.predict(data from T-20 to T±0)
T+2 = model.predict(data from T-19 to T+1) #using the previously found T+1 value
T+3 = model.predict(data from T-18 to T+2) #using the previously found T+1 and T+2 values
.
.
.
T+n = model.predict(data from T-(k-n) to T+(n-1)) # using the previously found T+1 .. T+(n-1) values
问题是,T+1的平均绝对误差约为0.75%,误差是否会通过预测传播/复合?如果是,则意味着如果我要求程序预测T+10,其平均绝对误差将为0.75%^10 = ~ 7.7%,这在我的情况下不是很好。因此,我正在寻找其他方法来预测多达T+n个值。
我看过几个youtube教程,但每次似乎他们对 model.predict(X) 的调用都已经返回了多个值,我不知道我可能错过了哪些参数。
编码:
第一个
如果没有办法防止误差传播,您有什么技巧可以减少模型的误差吗?
先谢谢你。
2条答案
按热度按时间dy1byipe1#
您可以让LSTM返回完整的序列,而不仅仅是最后一个输出,如下所示:
每个LSTM输出都将经过相同的密集权重(因为我们没有展平)。您的输出将是形状
(None, window_size, 10)
这意味着对于k个输入时间点,您将得到k个输出时间点。
缺点是,第一个输出只能使用第一个输入计算,第二个输出只能使用前两个输入计算,依此类推。因此,我建议使用双向LSTM,并将两个方向结合起来,如下所示:
roejwanj2#
一种方法是,假设您最初对模型进行了如下训练:
培训是使用www.example.com进行model.fit并进行了所有适当的重塑。
那么,当你试图预测
但是,假设您希望它也预测下一个值,预期输出为8,然后是9,或者对于***n***个预期输出,您将预期结果为8、9、10、11......等等。
那么我建议用以下方法来处理这个问题:
现在,这不会直接工作,你将不得不做一些重塑,但核心思想保持不变。