Khaki S, Wang L. Crop yield prediction using deep neural networks[J]. Frontiers in plant science, 2019, 10: 621.
1、数据处理
估算缺失值来预处理数据,定义阈值作为每个遗传标记允许的最大缺失值数量。如果遗传标记的缺失值超过定义的阈值,则将其丢弃。
在数据挖掘中,通常建议不要设置太大的阈值,因为它会增加数据集中的误差和噪声,从而导致非常差的预测。
根据阈值删除具有过多缺失值的遗传标记后,将估算所有缺失值。在统计学中,插补是用替代值替换缺失数据的过程,而不是删除具有缺失值的实例。插补通过用基于其他可用信息的估计值替换缺失数据来保留观察结果。一旦估算了所有缺失值,就可以使用标准技术分析数据集以获取完整数据 。有许多用于缺失值插补的方法,例如均值、中值、最频繁和随机回归方法。
由于遗传数据集仅包含只有三个值(-1、0、1)的分类数据,因此我们尝试了中值和最常见的方法,其中中值方法证明在验证集上效果更好。因此,采用中值法进行插补。
2、方法
神经网络通常有很多权重和偏差需要训练。训练过程是循环的,包含以下步骤:
-
前向传播:在这个阶段,输入数据被输入网络,并通过网络一层一层地向前传播,直到到达输出层。
-
计算损失:在此阶段,将输出与实际目标值进行比较,以查看当前模型的准确度。
-
反向传播:在此阶段,使用微积分中的链式法则,针对网络中所有层的所有权重和偏差计算损失函数的梯度。
-
更新:在此阶段,我们使用基于梯度的优化方法更新所有权重和偏差,例如随机梯度下降 (SGD)、Adam、Adagrad 优化算法。
更深的网络更难训练,或者它们有梯度消失问题。通过反向传播,梯度从输出层流回网络的最开始层,其中包括许多通常较小值的乘法。因此,当它到达神经网络的第一层时,有时会导致梯度几乎为零。因此,第一层的权重不会更新,从而导致高误差。
为了解决这个问题,对输入数据进行归一化,这有助于使用随机梯度下降 (SGD)来帮助更深层次的网络收敛。通过引入深度残差学习框架缓解梯度退化问题。他们没有拟合表示为 H(x) 的所需底层映射,而是让堆叠的非线性层拟合 F(x) 的残差映射。
他们假设优化残差映射比优化原始网络更容易。在残差网络中,每两个堆叠层都有一个快捷连接。快捷连接只是一个添加门,在反向传播中,添加门保留了梯度,并在整个网络中充当梯度高速公路。因此,我们确保网络中的所有权重都将通过正向和反向传播的循环得到充分更新。
它们既没有给网络增加额外的参数,也没有增加计算复杂度。整个网络仍然可以通过 SGD 使用反向传播进行端到端训练,并且可以使用 Tensorflow 和 Pytorch 等通用库轻松实现,而无需修改求解器。
在本文中,他们训练了一个深度 21 层的神经网络,用于产量和检查产量预测。我们在网络的每两个堆叠层之后使用了残差捷径。批量归一化也用于每个中间层以获得更好的收敛性。最后,使用 Adam 优化器优化网络。整个过程使用 Tensorflow 开源软件库在 Python 3.5 中编码。
使用了以下实现:
-
21个隐藏层
-
每层40个神经元
-
学习率 0.0003 的 Adam 优化器
-
学习率的指数衰减率为 0.95
-
批量大小为 64
-
所有隐藏层的批量标准化
-
300,000 次迭代
-
剩余的捷径
-
143,999 个训练样本
-
4453 个样本作为验证集(训练集的 0.03)
-
Relu 家族激活函数
-
所有权重的 Xavier 初始化
验证方法:
回归评价指标MSE、RMSE、MAE、R-Squared_sljwy的博客-CSDN博客
3.天气预报神经网络
需要预测 2017 年的天气变量。存在 315 个不同的位置,每个位置应预测 72 个天气变量。
将任何位置的每个变量视为单个时间序列。为了进行时间序列分析,已经训练了一个隐藏层神经网络。但是,首先应该创建训练数据。天气数据通常是周期性数据,因此明年某个特定变量的值可能仅取决于前几年的某些数量。由于作物挑战天气数据集中没有提供有关变量名称的信息,因此所有 72 个天气变量都考虑了介于 1 到 13 年之间的所有相关性(滞后),并选择了具有最小均方误差 (MSE) 的那个。
对于每个变量,有 315 个位置,一个特定变量的所有位置一起根据上述方法创建训练数据集。最后,以 2001 年到 2015 年的天气数据作为训练集,2016 年的天气数据作为验证集。验证时所有 72 个变量的平均 MSE 为 0.18。然后,本节的结果用于产量预测过程。