首先说明作者是神经网络纯新手,虽然之前用过神经网络的代码,但基本上都是各种copy,只搞清楚了input_size和output_size,这两天因为工作需要要跑一个lstm的回归预测,在网上找的教程都不太清楚,对新手不是很友好,对新手友好的好像好多都是错的,自己也想了很久才想明白lstm回归预测到低是什么情况,跟大家分享一下,如果有错误也希望大家能指正。
首先是lstm的一张图,引自LSTM神经网络输入输出究竟是怎样的?,建议看本文章之前先找几个教程把lstm搞懂,我个人觉得lstm懂了的标志就是下面这张图你看懂了。
首先,厘清一下本文所针对的任务,多特征的时间序列回归预测,再说直白一点,数据长成这个样子
简单来说就是n*m的ndarray,n表示时间序列的长度,m表示每一个时间点的feature,我图中的数据来自LSTM入门例子:根据前9年的数据预测后3年的客流(PyTorch实现),准确来说,这个数据也不是来自于这个作者,是一个经典的“航空客流预测”任务。这个作者应该是个机器学习的大佬,这篇文章很值得一读,但是估计新手也读不太懂,我纯新手反正一开始是没搞懂,但是非常不建议去看这篇文章的原版,因为原版完全是个错误例子。
因为是小白向我就不先说错误例子怎么做的了,只说一个最关键的点,“航空客流预测”任务中,时间序列很短只有100多个长度,完全可以一次性放进长度为100多的lstm里面训练,但是通常的时间回归预测任务里面,时间长度很多,势必要分成很多个定长的序列,然后再送进去训练。这一点也是最误解我的,我想了半天都想不通time_step到低去哪了,事实上分成训练集之后的时间序列数据本身长度就是那个time_step。(当然也可以不定长,事