1. 引言
水是农业、国民经济乃至人类生活的命脉,我国是一个水资源严重不足的国家,人均水资源占有量仅相当于世界水平的1/4,是世界上人均水资源最匮乏的13个国家之一。而农业用水量大约占全国用水量的70%,但有效利用率仅为40%左右 [1]。因此准确预测作物的需水量,根据预测结果对作物进行指导灌溉在农业节水工作中具有重要的意义。
作物需水量即蒸发蒸腾量是农业水资源开发利用中必不可少的基本资料,作物需水量的预测是灌溉预报的关键 [2]。当前作物的需水量主要应用Penman-Monteith公式来计算,但因其计算过程较为复杂需要用到的气象数据过多,所以国内外学者利用先进的计算机技术对作物需水量的预测进行了一系列的研究。其中李志新 [3] 等利用基于遗传算法优化的Elman神经网络构建了作物需水量预测模型,并验证了模型的可行性。孟玮 [4] 等构建了基于人工蜂群径向基神经网络的预测模型。其余还有灰色神经网络、贝叶斯模型、BP神经网络 [5] [6] [7] 等不同模型对作物的需水量进行了预测。目前作物需水量的预测在农业节水方面有着重大的意义。因此本文构建了基于LSTM时间序列的作物需水量预测模型,并与其他模型进行了准确性对比分析。
2. LSTM模型算法
LSTM指的是长短期记忆神经网络,是循环神经网络RNN (recurrent neural network)算法的改进。RNN相较于传统的前馈型神经网络区别在于其在隐含层上增加了一个反馈连接,能够通过循环反馈连接看到前面所有时刻的信息,并将之前信息的记忆保留在中间的隐藏节点中,从而影响网络的输出 [8]。
如图1所示为序列长度4的RNN模型经典结构,x为序列的输入,h为隐含状态其作用是对序列数据进行特征提取接着再转化为输出y,每一个箭头都代表一次h到y的转换。由于在RNN模型中输入和输出序列必须是等长的,这就限制了RNN的适用范围,其在训练过程中,如果需要参考的信息距离当前预测任务过远,超过8~10个步长后,RNN可能就会出现梯度消失问题,因此其保存的信息通常为短期信息无法体现其长期的记忆效果。为了解决这一问题,LSTM长短时记忆网络模型被提出。
长短时记忆网络(Long Short Term Memory Network)通过三个不同的门控制之前信息对当前信息的影响即遗忘门(forget gate);输入门(input gate);输出门(output gate) [9]。遗忘门决定上一时刻单元状态,输入门决定了当前的网络输入,输出门控制单元的状态,在每一个时间步t中可描述为 [10]
(1)
(2)
(3)
式中:
——遗忘门;
——输入门;
——输出门
——门状态函数
——遗忘门权重系数;
——输入门权重系数;
——输出门权重系数
——LSTM当前输出值
——LSTM当前输入值
——遗忘门偏置项;
——输入门偏置项;
——输出门偏置项
这些门节点决定了LSTM的记忆功能,当模型需要前面的训练结果影响当前计算的时候,门节点就会被打开,反之则将门节点关闭。因此通过调节阀门的开关就可以实现早期序列对最终结果的影响 [11],其结构如图2所示。
LSTM中,决定当前时刻网络输出的不仅是这一时刻的输入,还有上一时刻网络的隐状态和输出状态,依次循环传递。在这种传递下历史输入的重要信息就会得以保留,从而达到长期记忆的效果。
3. 模型的构建与结果分析
3.1. 数据来源与预处理
数据采用全国温室系统新疆自治区阿拉尔站点2014~2017年的日气象数据,包括平均气温、平均风速、相对湿度、日照时数和参照蒸发量。其中2014~2016年的气象数据作为模型的训练数据,2017年的数据作为模型的验证数据。首先根据气象数据由公式(4) [12] 计算出作物的需水量。
(4)
式中:
——需水量;
——作物系数;
——参照蒸发量。
试验选取干旱区枣树全年需水量为研究对象,所以萌芽展叶期取KC为0.86;开花坐果期取1.36;果实膨大期取1.22;果实成熟期取0.83分别计算出各时期枣树的需水量 [13]。将计算得出的需水量分为验证集和训练集两部分,并作为模型的输出值。将空气温度、空气相对湿度、日照时数、风速作为模型的特征值输入。将整理好的数据保存为csv格式或xlsx格式,部分数据如表1所示。
模型在训练前要将试验数据进行预处理操作,读取训练集2014~2016三年气象数据的csv格式或xlsx格式的原始数据文件,得到原始数据集,经过一系列处理,如提取表头、获取特征数据、获取标签数据、获取特征数据最值、归约化特征数据、归约化标签数据、获取标签数据最值、保存预处理数据等操作后得到模型训练使用的数据集。数据预处理运行结果如图3所示。
Figure 3. Screenshot of the results of the data preprocessing operation
图3. 数据预处理运行结果截图
以上执行结果表示的含义是各特征和标签的矩阵规模(shape),数据集的输入特征是合并四个特征后的四维特征,标签是water属性,所以shape为:(1096, 4)、(1096, 1),即2014~2016三年共1096行数据记录,每个数据记录都是4维的输入特征和1维的需水量标签。预处理后的数据集会自动保存在npy文件中,以供模型加载训练。
3.2. 模型的参数设置
由于模型在训练好后需要移植到硬件中运用,而MATLAB软件的可移植性较差,所以本模型的构建使用Python3.7语言,在TensorFlow开发环境下进行。损失函数采用均方差损失函数(Mean Square Error),其优点为曲线光滑、连续、处处可导,便于使用梯度下降算法。其梯度会随着误差的减小而下降,有利于收敛,用固定的学习速率,也能较快的收敛到最小值。计算公式如公式(5) [14]。
(5)
式中:
——预测值;y——目标值;n——样本个数。
根据本实验的气象数据特点与模型的框架结构,将模型的具体参数值设置如表2。
Table 2. Parameter settings of the prediction model
表2. 预测模型的参数设置
3.3. 结果与分析
模型的性能评价指标选择均方误差MSE,均方误差是指参数的估计值与真实值之差平方的期望值。在模型训练未出现过拟合的情况下,MSE的值越小,说明预测模型对试验数据的精确度描述越高,模型的性能越优。
Figure 4. LSTM training index curve
图4. LSTM训练指标曲线图
如图4所示模型在迭代过程中每个指标曲线整体下降且开始下降快,后来稳定几乎不变说明网络逐步收敛,训练的模型效果较好;Val_的损失值保持在和训练集同等的水平且没有曲线上翘说明模型性能较优。
在模型未出现过拟合的情况下,由表3可知LSTM模型的MSE值与RNN与FCNN模型对比最低,所以LSTM模型的训练效果较RNN与FCNN要好,其对试验数据描述的精确度更高。
模型训练好后会生成h5文件,为了方便模型的实际应用,编写一个infer.py的脚本,运行时可以对训练好的模型直接进行调用。如图5模型运行的结果0.44即为对应[−6.8、0.8、79、7.4]四个气象数据预测的作物当前需水量,在后期模型投入实际应用后可以利用sys.argv代码将传感器采集的气象数据替换到矩阵中,供模型预测当前作物需水量使用。
为了清晰的比较处预测模型的准确性,从验证集2017年的数据中随机选取10组数据作为预测数据验证。对三种模型的验证结果进行相对误差比较。
由图6与表4可以看出LSTM预测模型的预测结果无论是每一组的相对误差还是平均相对误差相较于其他两种模型都较低,其预测的准确性更高。而且LSTM预测模型的误差幅度变化比较小,与RNN与FCNN比较更适合用于需水量的预测。
Figure 6. Comparison of model prediction results
图6. 模型预测结果对比图
Table 4. Comparison and analysis table of model predicted values
表4. 模型预测值对比分析表
4. 结语
本文以全国温室系统,阿拉尔站点2014~2017年的日气象数据为基础,以枣树为研究对象建立了基于LSTM的作物需水量预测模型。并对预测结果与RNN模型、FCNN模型进行误差对比分析。在输入因子相同的情况下,得到LSTM预测值与实际值的平均相对误差为6.26%低于RNN与FCNN的10.7%和13.05%,且在模型训练过程中三种模型的MSE值分别为0.0032、0.0044、0.0065可见LSTM模型的预测准确性与模型性能都有优于RNN与FCNN模型,说明其作为作物需水量的预测模型是可行的,为作物需水量的预测及实现高效节水灌溉提供一定参考。并且该模型在PyCharm环境下使用python编程语言进行构建相较于文献 [5] 可移植性高,实用性更好。后期可将训练好的模型移植到上位机硬件中运用,实际指导系统灌溉。在后续的开发试验中可以将实际测得的枣树灌水量替换掉模型中的理论需水量,重新对模型进行训练,以达到更加准确的预测效果。