【MATLAB第21期】基于matlab的MWOA-LSTM-Attention注意力机制结合的回归预测模型
运行环境:
matlab2020a,cpu
数据:
本文采用600行6输入1输出数据样本,其中前500(90%训练,10%验证),后100进行测试。
为了简化数据 ,对下图数据缩小100倍值 。
思路:
LSTM_Attention的代码网上基本有售卖,本文在基础上进行优化,即通过嵌入Circle映射和逐维小孔成像反向学习的鲸鱼优化算法(MWOA)以及普通鲸鱼优化算法WOA优化LSTM_Attention模型的3个超参数,分别为隐含层神经元数量、最小批处理数量,最大训练次数,目标函数选用测试集的1-R2作为评价指标,3个超参数上下限为:
lb = [20 5 5 ];%三个参数的下限 隐含层神经元数量 最小批样本处理数量 最大训练次数 ub = [90 20 40 ];%三个参数的上限
参数设置:
%LSTM结构参数 LearnRateDropFactor = 0.9;%学习率下降因子 LearnRate = 0.01;%初始学习率 LearnRatestep=5;%每5轮更新学习率 executionEnvironment = "auto";%运行环境为自动 validatasize=10%;%训练过程中验证集比例为10% validationFrequency = 10;%每10次训练验证1次 gradientDecayFactor = 0.9;%梯度衰减因子为0.9 squaredGradientDecayFactor = 0.999;%平方梯度衰减因子为0.999 gradientThreshold = 6;%梯度阈值为6 loss = mse;%训练过程中损失函数为mse函数 %WOA参数 SearchAgents_no = 5; % 种群数量 5 Max_iteration = 5; % 迭代次数 5
注意力机制部分代码:
%% 输入部分 % Lstm_Y LSTM输出序列(CBT) % Train_Y 训练样本标签 % params 训练权重参数 % state 状态变量 %% 需要学习的参数 weight = params.cnn.weight; recurrentWeights = params.lstm.recurrentWeights; bias = params.lstm.bias; %% 不同批次间传递的参数(这里假设每一轮epoch中,不同Batch间的state是传递的,但不学习; % 不同epoch之间的state重置) h0 = state.lstm.h0; c0 = state.lstm.c0; [Lstm_Y,h0,c0] = lstm(Train_X,h0,c0,weight,recurrentWeights,bias);
%% Attention Attentionweight = params.attention.weight; % 计算得分权重 Ht = Lstm_Y(:,:,end); % 参考向量 %% Attention输出 weight1 = params.attenout.weight1; bias1 = params.attenout.bias1; weight2 = params.attenout.weight2; bias2 = params.attenout.bias2; Hthat = fullyconnect(Vt,weight1,bias1) + fullyconnect(Ht,weight2,bias2); %% 全连接层前置层(降维) LastWeight = params.fullyconnect.weight1; LastBias = params.fullyconnect.bias1 ; FullyconnectInput = fullyconnect(Hthat,LastWeight,LastBias); FullyconnectInput = relu(FullyconnectInput); %% Fullyconnect输入参数 fullyweight = params.fullyconnect.weight2; fullybias = params.fullyconnect.bias2; output_Y = fullyconnect(FullyconnectInput,fullyweight,fullybias); output_Y = squeeze(output_Y); output_Y = relu(output_Y);
预测结果:
优化前超参数设置为【50,10,10】即神经元50个,训练次数及最小批为10.
WOA优化后为【64 6 11】
MWOA优化后为【30 9 18】
分析:
案例数据精度仍存在一些不足,除了超参数范围对结果的影响,进化算法选取及参数设置以外,数据的选择,目标函数的选择以及运行环境(CPU/GPU)对结果影响也较大。 研究发现,通过试验发现GPU的精度要明显高一些,其次,选择1-R2作为目标函数比选择RMSE均方根误差作为目标函数的精度高一些。
代码获取:
代码有偿。有意向后台(非评论区)私聊回复“注意力机制”,即可获得下载链接。创作不易,感谢理解。