LSTM预测基于matlab鲸鱼算法优化双向长短时记忆BiLSTM航空发动机寿命预测 (多输入单输出)含Matlab源码 2288期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LSTM预测基于matlab鲸鱼算法优化双向长短时记忆BiLSTM航空发动机寿命预测 (多输入单输出)含Matlab源码 2288期相关的知识,希望对你有一定的参考价值。
一、LSTM和BiLSTM神经网络结构及原理介绍
长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程中发生梯度消失和梯度爆炸的问题。相比于RNN,LSTM主要是引入了细胞形态(cell state)用于保存长期状态,而LSTM的关键就在于如何控制长期状态c,从而引用了控制门的机制,该机制可以去除或者增加信息到细胞状态的能力。通过sigmoid函数将门输出为[0,1]的实数向量。当门输出为0时,乘以该向量的任何向量都将得到0向量,即判定为不能通过。当输出为1时,乘以任何向量都不会改变其原值,即可以通过。神经元中加入了输入门(input gate),遗忘门(forget gate),输出门(output gate),以及内部记忆单元(cell),其网络结构图如图1所示。
图1 LSTM网络结构
在LSTM神经网络训练学习的过程中,第一步是由遗忘门(forget gate)决定从细胞状态中丢弃哪些信息。该步骤会读取和输入数据点乘计算得到一个输出值,其决定了上一时刻的状态有多少会保留到当前时刻。计算公式如式(1)所示。
ft=σ(Wf×[ht-1,xt]+bf) (1)
式中: xt——当前细胞的输入;
ht-1——cell的前一次输出;
Wf——遗忘门的权重矩阵;
bf——遗忘门的偏置项;
σ——sigmoid函数。
第二步,将确定哪些新信息将会被添加到网络结构或细胞状态中。计算公式如式(2)所示。
it=σ(Wi×[ht-1,xt])+bi) (2)
式中: Wi——输入门的权重矩阵;
bi——输入门的偏置项。
接下来,就计算用于描述当前输入状态的C˜t,它的值是根据上一次的输出和本次的输出来进行计算的。计算公式如式(3)所示。
C˜t=tanh(Wc×[ht−1,xt]+bc) (3)
式中: Wc——计算细胞状态的权重矩阵;
bc——计算细胞状态的偏置项。
第三步,进行细胞状态更新,将cell状态的Ct-1更新为Ct,ft×Ct-1忘记旧的值,it×C˜t用于添加新的值。计算公式如式(4)所示。
Ct=ft×Ct−1+it×C˜t (4)
第四步,需要决定输出怎样的信息。计算公式如式(5)和式(6)所示。
Qt=σ(Wo×[ht-1,xt]+bo) (5)
ht=ot×tanh(Ct) (6)
式中: Wo——输出门的权重矩阵;
bo——输出门的偏置项。
LSTM是一个单向的循环神经网络,模型实际上只接收到了“上文”的信息,而没有考虑到“下文”的信息,在实际应用场景中,输出结果可能需要由前面若干输入和后面若干输入共同决定,获取到整个输入序列的信息,而BILSTM网络就可以同时保存双向数据信息。一个完整的BILSTM网络包含输入层,前向LSTM层、反向LSTM层和输出层。
图2 BILSTM网络结构图
图2所示,在Forward层从1时刻到t时刻正向计算一遍,得到并保存每个时刻向前隐含层的输出,wf表示为前向LSTM层。该步骤数学表达公式如式(7)所示。
ht=f(w1xt+w2ht-1) (7)
在Backward层沿着时刻t到时刻1反向计算一遍,得到并保存每个时刻向后隐含层的输出,表示为后向LSTM层。该步骤数学表达公式如式(8)所示。
h′t=f(w3xt+w5h′t+1) (8)
最后,在每个时刻将正向层和反向层在相应时间的输出结果进行组合从而获得最终输出,该输出结合了双向输入序列的信息。该步骤数学表达公式如式(9)所示。
ot=g(w4ht+w6h′t) (9)
BILSTM、LSTM模型网络结构和神经元个数分别如图3(a)和图3(b)所示。
图3 预测模型搭建
图3(a)为BILSTM神经网络预测模型,其结构如下。
结构第一层为LSTM层的初始神经元个数为128。结构第二层为BILSTM,初始神经元个数为128,激活函数使用ReLu。结构第三层为全连接层,神经元个数为128,激活函数使用ReLu。结构第四层添加正则化Dropout, 参数按0.25比例随机置0。结构第五层为全连接层,神经元个数为64,激活函数ReLu。结构第六层添加正则化Dropout, 参数按0.25比例随机置0。结构第七层为输出层,输出维度为1,激活函数使用PReLu。
LSTM神经网络模型采用同样的网络结构和神经元个数,网络优化器和损失函数与BILSTM模型均保持一致。不同之处为该模型将BILSTM神经网络舍弃,用LSTM神经网络进行模型预测训练和论证。图3(b)即LSTM价格预测模型,其结构如下。
结构第一层为LSTM,初始神经元个数为128。结构第二层为LSTM,初始神经元个数为128,激活函数使用ReLu。结构第三层为全连接层,神经元个数为128,激活函数使用ReLu。结构第四层添加正则化Dropout, 参数按0.25比例随机置0。结构第五层为全连接层,神经元个数为64,激活函数ReLu。结构第六层添加正则化Dropout, 参数按0.25比例随机置0。结构第七层为输出层,输出维度为1,激活函数使用PReLu。
二、部分源代码
%% 基于鲸鱼算法优化BiLSTM实现寿命预测
clc;clear all;close all
filenamePredictors = fullfile(“train_FD001.txt”);
[XTrain,YTrain] = processTurboFanDataTrain(filenamePredictors);
% 删除具有常量值的特征
% 在所有时间步都保持不变的特征可能对训练产生负面影响。找到最小值和最大值相同的数据行,然后删除这些行。
m = min([XTrain:],[],2);
M = max([XTrain:],[],2);
idxConstant = M == m;
for i = 1:numel(XTrain)
XTraini(idxConstant,:) = [];
end
numFeatures = size(XTrain1,1);%查看序列中其余特征的数量。
% 归一化训练预测变量
% 将训练预测变量归一化为具有零均值和单位方差。要计算所有观测值的均值和标准差,请水平串联序列数据。
mu = mean([XTrain:],2);
% 要更多地从发动机快要出现故障时的序列数据中进行学习,请以阈值 150 对响应进行裁剪。这会使网络将具有更高 RUL 值的实例视为等同。
thr = 150;
for i = 1:numel(YTrain)
YTraini(YTraini > thr) = thr;
end
for i=1:numel(XTrain)
sequence = XTraini;
sequenceLengths(i) = size(sequence,2);
end
filenamePredictors = fullfile(“test_FD001.txt”);
filenameResponses = fullfile(“RUL_FD001.txt”);
[XTest,YTest] = processTurboFanDataTest(filenamePredictors,filenameResponses);
% 使用根据训练数据计算出的 idxConstant 删除具有常量值的特征。使用与训练数据相同的参数来归一化测试预测变量。使用与训练数据相同的阈值对测试响应进行裁剪。
for i = 1:numel(XTest)
XTesti(idxConstant,:) = [];
XTesti = (XTesti - mu) ./ sig;
YTesti(YTesti > thr) = thr;
figure
lb=[0.0001; 0.01];%学习率 LearnRateDropFactor 下限
ub=[0.01; 1];%学习率 LearnRateDropFactor 上限
dim=2;%参数个数
miniBatchSize = 20;%选择可均匀划分训练数据的小批量大小,并减少小批量中的填充量。指定小批量大小为 20。下图显示了未排序序列和已排序序列的填充情况。
numResponses = size(YTrain1,1);
numHiddenUnits = 200;
fboj=@(x)fun(x,XTrain,YTrain ,numFeatures,numResponses,numHiddenUnits,XTest,YTest);
[FoodFitness,FoodPosition,Convergence_curve]=WOA(N,Max_iter,lb,ub,dim,fboj);
figure
plot(Convergence_curve);
xlabel(‘迭代次数’)
ylabel(‘RMSE’)
layers = [ …
sequenceInputLayer(numFeatures)
bilstmLayer(numHiddenUnits,‘OutputMode’,‘sequence’)
fullyConnectedLayer(50)
dropoutLayer(0.5)
fullyConnectedLayer(numResponses)
regressionLayer];
% 指定训练选项。使用求解器 ‘adam’ 以大小为 20 的小批量进行 60 轮训练。指定学习率为 0.01。要防止梯度爆炸,请将梯度阈值设置为 1。要使序列保持按长度排序,请将 ‘Shuffle’ 设置为 ‘never’。
maxEpochs = 60;
options = trainingOptions(‘adam’, …
‘MaxEpochs’,maxEpochs, …
‘MiniBatchSize’,miniBatchSize, …
‘InitialLearnRate’,FoodPosition(1), …
‘GradientThreshold’,1, …
‘LearnRateDropFactor’,FoodPosition(2), …
‘Shuffle’,‘never’, …
‘Verbose’,0);
%训练网络
% 使用 trainNetwork 训练网络。
net = trainNetwork(XTrain,YTrain,layers,options);
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]江知航,王艳霞,颜家均,周堂容.基于BILSTM的棉花价格预测建模与分析[J].中国农机化学报. 2021,42(08)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于LSTM预测基于matlab鲸鱼算法优化双向长短时记忆BiLSTM航空发动机寿命预测 (多输入单输出)含Matlab源码 2288期的主要内容,如果未能解决你的问题,请参考以下文章
lstm预测基于鲸鱼优化算法改进的lstm预测matlab源码
lstm预测基于鲸鱼优化算法改进的lstm预测matlab源码
时间序列预测基于matlab鲸鱼算法优化LSTM时间序列预测含Matlab源码 1233期