基于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 运行结果


部分代码: 

xtest = (xtest-xmean)/xstd
Z1t = np.dot(wh, xtest.T) + bh
A1t = sigmoid(Z1t)
Z2t = np.dot(wo, A1t) + bo
A2t = Z2t
ypredt = A2t.T
ypredt = ypredt*ystd+ymean
errort = ytest-ypredt

plt.plot(ypredt,label='预测负荷')
plt.plot(ytest,label='真实负荷')
plt.title('基于Adam算法优化GRU神经网络的短期负荷预测')
plt.legend()
plt.show()

(Rt, pvalt) = stats.pearsonr(ytest.flatten(),ypredt.flatten())
print(Rt)

5 参考文献

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

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

6 Python代码实现

CNN-GRU(Convolutional Neural Network - Gated Recurrent Unit)是一种深度学习模型,它结合了卷积神经网络(CNN)和门控循环单元(GRU)。CNN主要用于处理图像数据,提取局部特征,而GRU是一种递归神经网络(RNN)的一种变体,特别适合处理序列数据,如文本、音频等。 在Python中,常用的库如TensorFlow和Keras可以方便地构建这种结构。以下是基本步骤: 1. **导入所需库**:首先需要import tensorflow、keras以及相关的层模块,例如`tensorflow.keras.layers.Conv2D`(用于创建卷积层)和`tensorflow.keras.layers.GRU`(用于创建GRU层)。 ```python import tensorflow as tf from tensorflow.keras import layers ``` 2. **定义模型**:创建一个Sequential模型,并添加一个或多个卷积层来捕获空间特征,接着添加一个GRU层作为序列处理部分。 ```python model = tf.keras.Sequential([ layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu', input_shape=(image_width, image_height, channels)), # 其他可能的卷积层... layers.GRU(units=64, return_sequences=True) # 如果输入是时间序列,return_sequences=True ]) ``` 3. **连接全连接层和输出层**:根据任务需求,可能还需要添加一些全连接层和适当的激活函数(如sigmoid或softmax),最后加上一个输出层。 ```python model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(num_classes, activation='softmax')) # 对于分类问题 ``` 4. **编译模型**:设置损失函数、优化器和评估指标。 ```python model.compile(optimizer=tf.optimizers.Adam(), loss='categorical_crossentropy', metrics=['accuracy']) ``` 5. **训练模型**:提供训练数据和标签,调用`fit()`函数训练模型。 ```python history = model.fit(X_train, y_train, epochs=num_epochs, validation_data=(X_val, y_val)) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值