• 基于Adam算法优化GRU神经网络的短期负荷预测(Python代码实现)


    目录

    1 Adam优化算法

    2 Adam算法中的学习率衰减策略

    3 GRU神经网络

    4 运行结果

    5 参考文献

    6 Python代码实现


    1 Adam优化算法

    2 Adam算法中的学习率衰减策略

    该文在Adam算法的基础上引入了学习率衰减策略"",可以加快参数的更新速度,使 Adam算法在前期的收敛速度加快,并且可以提升模型的精度。该文采用的是分数衰减方式,分数衰减的公式为:

    \text { alpha } a_{t}=\frac{\text { alpha }{ }_{t-1}}{1+\text { decayrate } \times \text { epoch }}

    其中, epoch代表样本集内所有的数据经过了一次训练;decayrate为衰减率。文中令参数decayra
    te=1,epoch=1。
    随着迭代次数的增加,学习率将以分数衰减方式衰减,通过衰减后的学习率寻求全局最优解。采用此方法的目的是希望减少迭代过程中收敛曲线的振荡,提高模型收敛速度和稳定性,得到全局最优解。
    为了避免出现采用学习率衰减策略时学习率衰减到零的情况,令最小学习率为0.000 5。在算法迭代过程中,当学习率小于0.0005时,将不再进行学习率衰减。

    Adam优化算法是随机梯度下降的扩展,最近在计算机视觉和自然语言处理中更广泛地采用深度学习应用。亚当不同于经典的随机梯度下降。随机梯度下降对所有体重更新保持单一学习速率(称为 alpha),并且学习速率在训练期间不会改变。每个网络权重(参数)都保持学习速率,并随着学习的展开而单独调整。Adam 意识到 AdaGrad 和 RMSProp 的好处。Adam 没有像 RMSProp 那样根据平均第一矩(平均值)调整参数学习速率,而是利用梯度的第二个时刻的平均值(无中心方差)。具体而言,该算法计算梯度和平方梯度的指数移动平均线,参数beta1和beta2控制这些移动平均线的衰减率。移动平均线的初始值以及接近 1.0 的 beta1 和 beta2 值(推荐)会导致矩估计值偏向于零。通过先计算偏倚估计值,然后再计算偏差校正估计值,可以克服这种偏差。

    3 GRU神经网络


    GRU是在LSTM神经网络的基础上提出来的LSTM神经网络由输入门、遗忘门、输出门组成"
    GRU将ISTM的遗忘门和输入门合并成更新门,可时将记忆单元与隐含层合并成重置门,进而让整个
    结构运算变得更加简化且性能得以增强GRU结构图如图1所示。

    常规的GRU神经网络采用随机梯度下降算法迭代更新神经网络的权重,此模型算法前期的收敛速度较慢,而且容易出现精度下降的问题。为了提高预测的精度,加快模型前期的收敛速度,文中米用Adam优化算法并引入学习率衰减策略,对GRU神经网络模型进行优化。

    4 运行结果


    部分代码: 

    1. xtest = (xtest-xmean)/xstd
    2. Z1t = np.dot(wh, xtest.T) + bh
    3. A1t = sigmoid(Z1t)
    4. Z2t = np.dot(wo, A1t) + bo
    5. A2t = Z2t
    6. ypredt = A2t.T
    7. ypredt = ypredt*ystd+ymean
    8. errort = ytest-ypredt
    9. plt.plot(ypredt,label='预测负荷')
    10. plt.plot(ytest,label='真实负荷')
    11. plt.title('基于Adam算法优化GRU神经网络的短期负荷预测')
    12. plt.legend()
    13. plt.show()
    14. (Rt, pvalt) = stats.pearsonr(ytest.flatten(),ypredt.flatten())
    15. print(Rt)

    5 参考文献

    部分理论引用网络文献,如有侵权请联系删除。

    [1]高翱,李国玉,撖奥洋,周生奇,魏振,张智晟.基于Adam算法优化GRU神经网络的短期负荷预测模型[J].电子设计工程,2022,30(09):180-183+188.DOI:10.14022/j.issn1674-6236.2022.09.038.

    6 Python代码实现

  • 相关阅读:
    黑马C++ 03 提高7 —— STL函数对象
    UTF-8字符串操作方法
    从零学算法128
    【JavaScript】null 和 undefined 的区别
    剑指offer(C++)-JZ59:滑动窗口的最大值(数据结构-队列 & 栈)
    数学建模笔记(二)论文写作:论文结构
    c语言qsort函数使用教程
    golang在goland编译时获取环境变量失效
    简单介绍一下c++正则表达式
    【C++】面向对象示例 - 数组类 ( 示例需求 | 创建封装类 | 数组类头文件 Array.h | 数组类实现 Array.cpp | 测试类 Test.cpp - 主函数入口 )
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/126753900