【lstm预测】基于鲸鱼算法优化lstm预测matlab源码

LSTM

LSTM网络

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

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第1张图片

图3.RNNcell

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

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第2张图片

图4.LSTMcell

LSTM核心思想

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

细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第3张图片

图5.LSTMcell内部结构图

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

门 可以实现选择性地让信息通过,主要是通过一个 sigmoid 的神经层 和一个逐点相乘的操作来实现的。

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第4张图片

图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 表示“完全舍弃”。

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第5张图片

其中ht−1表示的是上一个cell的输出,xt表示的是当前细胞的输入。σσ表示sigmod函数。

输入门

下一步是决定让多少新的信息加入到 cell 状态 中来。实现这个需要包括两个 步骤:首先,一个叫做“input gate layer ”的 sigmoid 层决定哪些信息需要更新;一个 tanh 层生成一个向量,也就是备选的用来更新的内容,C^t 。在下一步,我们把这两部分联合起来,对 cell 的状态进行一个更新。

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第6张图片

现在是更新旧细胞状态的时间了,Ct−1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

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

输出门

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

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第7张图片

实现

``` %% 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层的隐含单元个数963 %序列预测,因此,输入一维,输出一维 numFeatures = 1; numResponses = 1; numHiddenUnits = 203;

layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits) fullyConnectedLayer(numResponses) regressionLayer]; %% WOA lb=0.001;%学习率下限 ub=0.1;%学习率上限

% Main loop

while 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:Maxiter,Convergencecurve,'bo-'); hold on; title('鲸鱼优化后Error-Cost曲线图'); xlabel('迭代次数') ylabel('误差适应度值') ```

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第8张图片

【lstm预测】基于鲸鱼算法优化lstm预测matlab源码_第9张图片

你可能感兴趣的:(算法,python,机器学习,深度学习,神经网络)