作为一名深度学习的小白,最近在做LSTM预测股票问题,发现训练集的shuffle必须为true而测试集的shuffle必须为false。如果训练集的shuffle不设置为true的话训练出来的模型不泛化,也就是只适合预测这一个数据集,换到别的数据集上效果不好也有可能在本数据集上预测的效果也不好。而测试集的shuffle不建议设置为true,一般的教程上只是提了要把训练集的shuffle设置为true,没有提测试集的要不要设置为true,所以困扰了我好几天。至于为什么测试集不能设置为true,我还没有整明白,在这里只是记录一下自己的学习过程和错误。
在LSTM预测时序数据的背景下,不把测试集shuffle设置为true是因为:
该模型的目的是去寻找该序列数据的规律,如果把测试集的顺序打乱那么LSTM预测结果的target就是混乱的,而LSTM预测出来的结果还是按照序列数据的那个规律预测的,那么展示的结果就是不准确的,驴唇对马嘴了属于是
最后,
因为LSTM需要的是序列数据,而训练集加载器的shuffle=true的话不就把这个序列打乱了吗?
猜想1:因为在将时序数据切割成监督数据的时候,比如time_step=3,那么就是三个数据一组,这个时候序列数据的顺序还是没有被打乱的,shuffle=true被打乱的顺序只是组与组之间的顺序,而组内数据与数据之间的顺序没有被打乱。
猜想2:如果上面的猜想1不成立的话,有两种解决办法:第一种就是训练集的加载器shuffle不设置为true,第二种方法是向数据中添加一个维度,这个维度代表了数据在序列中的位置信息