【lstm预测】鲸鱼优化算法之改进的lstm预测【Matlab 105期】【预测模型3】

LSTM
LSTM网络

long short term memory,即我们所称呼的LSTM,是为了解决长期以来问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。
在这里插入图片描述
图3.RNNcell

LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互
在这里插入图片描述
图4.LSTMcell

LSTM核心思想

LSTM的关键在于细胞的状态整个(绿色的图表示的是一个cell),和穿过细胞的那条水平线。

细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
在这里插入图片描述
图5.LSTMcell内部结构图

若只有上面的那条水平线是没办法实现添加或者删除信息的。而是通过一种叫做 门(gates) 的结构来实现的。

门 可以实现选择性地让信息通过,主要是通过一个 sigmoid 的神经层 和一个逐点相乘的操作来实现的。
在这里插入图片描述
图6.信息节点

sigmoid 层输出(是一个向量)的每个元素都是一个在 0 和 1 之间的实数,表示让对应信息通过的权重(或者占比)。比如, 0 表示“不让任何信息通过”, 1 表示“让所有信息通过”。

LSTM通过三个这样的基本结构来实现信息的保护和控制。这三个门分别输入门、遗忘门和输出门。

深入理解LSTM

遗忘门

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取h t − 1 h_{t−1}ht−1​和x t x_txt​,输出一个在 0到 1之间的数值给每个在细胞状态C t − 1 C_{t-1}Ct−1​中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
在这里插入图片描述
其中ht−1表示的是上一个cell的输出,xt表示的是当前细胞的输入。σσ表示sigmod函数。

输入门

下一步是决定让多少新的信息加入到 cell 状态 中来。实现这个需要包括两个 步骤:首先,一个叫做“input gate layer ”的 sigmoid 层决定哪些信息需要更新;一个 tanh 层生成一个向量,也就是备选的用来更新的内容,C^t 。在下一步,我们把这两部分联合起来,对 cell 的状态进行一个更新。
在这里插入图片描述
现在是更新旧细胞状态的时间了,Ct−1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

我们把旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上it∗C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

输出门

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

在这里插入图片描述

%%
clc
clear all
close all
%加载数据,重构为行向量
num=100;
x=1:num;
db=0.1;
data =abs(0.5.*sin(x)+0.5.*cos(x)+db*rand(1,num));
data1 =data;%把你的负荷数据赋值给data变量就可以了。
%data是行向量。要是还不明白,就留言吧。
 
%%
%序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain = floor(0.9*numel(data));
dataTrain = data(1:numTimeStepsTrain+1);
dataTest = data1(numTimeStepsTrain+1:end);
 
%数据预处理,将训练数据标准化为具有零均值和单位方差。
mu = mean(dataTrain);
sig = std(dataTrain);
dataTrainStandardized = dataTrain;
 
%输入LSTM的时间序列交替一个时间步
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
%%
%创建LSTM回归网络,指定LSTM层的隐含单元个数96*3
%序列预测,因此,输入一维,输出一维
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 20*3;
 
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits)
    fullyConnectedLayer(numResponses)
    regressionLayer];
%% WOA
lb=0.001;%学习率下限
ub=0.1;%学习率上限
 
% Main loop
 
while t<Max_iter
    t
   
end
 
%将预测值与测试数据进行比较。
figure(1)
subplot(2,1,1)
plot(YTest,'gs-','LineWidth',2)
hold on
plot(YPred_best,'ro-','LineWidth',2)
hold off
legend('观测值','预测值')
xlabel('时间')
ylabel('数据值')
title('Forecast with Updates')
 
subplot(2,1,2)
stem(YPred_best - YTest)
xlabel('时间')
ylabel('均方差值')
title('均方差图 ' )
 
 
figure(2)
plot(dataTrain(1:end-1))
hold on
idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);
plot(idx,[data(numTimeStepsTrain) YPred_best],'.-')
hold off
xlabel('时间')
ylabel('数据值')
title('预测图')
legend('观测值', '预测值')
 
figure(3)
plot(1:Max_iter,Convergence_curve,'bo-');
hold on;
title('鲸鱼优化后Error-Cost曲线图');
xlabel('迭代次数')
ylabel('误差适应度值')

在这里插入图片描述
在这里插入图片描述
注:完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【lssvm预测】基于鲸鱼优化算法的lssvm数据预测matlab源码【Matlab 104期】【预测模型2】
【SVM预测】基于蝙蝠算法改进的SVM预测【Matlab 106期】【预测模型4】
【SVM预测】灰狼算法优化svm支持向量机预测matlab源码【Matlab 107期】【预测模型5】
BP神经网络的预测【Matlab 108期】【预测模型6】
【lssvm预测模型】基于蝙蝠算法改进的最小二乘支持向量机lssvm预测【Matlab 109期】【预测模型7】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/112985552