clc
close all
clear all
data=xlsread('B05.xlsx',1,'A2:A169');
numTimeStepsTrain = floor(0.7*numel(data));
dataTrain = data(1:numTimeStepsTrain,:);%选择训练集
dataTest = data(numTimeStepsTrain+1:end,:); % 选择测试集
k =9; %滑动窗口设置为9 具体设多少需要衡量
m = 1 ; %预测步长
for i = 1:size(dataTrain)-k-m+1
XTrain(:,i) = dataTrain(i:i+k-1,:);
YTrain(:,i) = dataTrain(i+k:i+k+m-1,:);
end
for i = 1:size(dataTest)-k-m+1
XTest(:,i) = dataTest(i:i+k-1,:);
YTest(:,i) = dataTest(i+k:i+k+m-1,:);
end
x = XTrain;
y = YTrain;
[xnorm,xopt] = mapminmax(x,0,1);
[ynorm,yopt] = mapminmax(y,0,1);
x = x';
% 转换成2-D image
for i = 1:length(ynorm)
Train_xNorm{i} = reshape(xnorm(:,i),k,1,1);
Train_yNorm(:,i) = ynorm(:,i);
Train_y(i,:) = y(:,i);
end
Train_yNorm= Train_yNorm';
xtest = XTest;
ytest = YTest;
[xtestnorm] = mapminmax('apply', xtest,xopt);
[ytestnorm] = mapminmax('apply',ytest,yopt);
xtest = xtest';
for i = 1:length(ytestnorm)
Test_xNorm{i} = reshape(xtestnorm(:,i),k,1,1);
Test_yNorm(:,i) = ytestnorm(:,i);
Test_y(i,:) = ytest(:,i);
end
Test_yNorm = Test_yNorm';
%% SSA优化参数设置
SearchAgents = 10; % 种群数量 50
Max_iterations = 30 ; % 迭代次数 10
lowerbound = [1e-10 0.001 10 ];%三个参数的下限
upperbound = [1e-2 0.01 200 ];%三个参数的上限
dimension = 3;%数量,即要优化的LSTM参数个数
%% SSA优化LSTM
% [Best_pos,Best_score,Convergence_curve]=SSA(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,ObjFcn)
%% 参数设置
ST = 0.8; % 预警值
PD = 0.2; % 发现者的比列,剩下的是加入者
PDNumber = SearchAgents * PD; % 发现者数量
SDNumber = SearchAgents - SearchAgents * PD; % 意识到有危险麻雀数量
%% 判断优化参数个数
if(max(size(upperbound)) == 1)
upperbound = upperbound .* ones(1, dimension);
lowerbound = lowerbound .* ones(1, dimension);
end
%% 种群初始化
pop_lsat = initialization(SearchAgents, dimension, upperbound, lowerbound);
pop_new = pop_lsat;
%% 计算初始适应度值
fitness = zeros(1, SearchAgents);
for i = 1 : SearchAgents
fitness(i) = fun(pop_new(i,:),Train_xNorm,Train_yNorm,Test_xNorm,Test_y,yopt,k);
end
%% 得到全局最优适应度值
[fitness, index]= sort(fitness);
GBestF = fitness(1);
%% 得到全局最优种群
for i = 1 : SearchAgents
pop_new(i, :) = pop_lsat(index(i), :);
end
GBestX = pop_new(1, :);
X_new = pop_new;
%% 优化算法
for i = 1: Max_iterations
BestF = fitness(1);
R2 = rand(1);
for j = 1 : PDNumber
if(R2 < ST)
X_new(j, :) = pop_new(j, :) .* exp(-j / (rand(1) * Max_iterations));
else
X_new(j, :) = pop_new(j, :) + randn() * ones(1, dimension);
end
end
for j = PDNumber + 1 : SearchAgents
if(j > (SearchAgents - PDNumber) / 2 + PDNumber)
X_new(j, :) = randn() .* exp((pop_new(end, :) - pop_new(j, :)) / j^2);
else
A = ones(1, dimension);
for a = 1 : dimension
if(rand() > 0.5)
A(a) = -1;
end
end
AA = A' / (A * A');
X_new(j, :) = pop_new(1, :) + abs(pop_new(j, :) - pop_new(1, :)) .* AA';
end
end
Temp = randperm(SearchAgents);
SDchooseIndex = Temp(1 : SDNumber);
for j = 1 : SDNumber
if(fitness(SDchooseIndex(j)) > BestF)
X_new(SDchooseIndex(j), :) = pop_new(1, :) + randn() .* abs(pop_new(SDchooseIndex(j), :) - pop_new(1, :));
elseif(fitness(SDchooseIndex(j)) == BestF)
K = 2 * rand() -1;
X_new(SDchooseIndex(j), :) = pop_new(SDchooseIndex(j), :) + K .* (abs(pop_new(SDchooseIndex(j), :) - ...
pop_new(end, :)) ./ (fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));
end
end
%% 边界控制
for j = 1 : SearchAgents
for a = 1 : dimension
if(X_new(j, a) > upperbound(a))
X_new(j, a) = upperbound(a);
end
if(X_new(j, a) < lowerbound(a))
X_new(j, a) = lowerbound(a);
end
end
end
%% 获取适应度值
for j = 1 : SearchAgents
fitness_new(j) = fun(X_new(j, :),Train_xNorm,Train_yNorm,Test_xNorm,Test_y,yopt,k);
end
%% 获取最优种群
for j = 1 : SearchAgents
if(fitness_new(j) < GBestF)
GBestF = fitness_new(j);
GBestX = X_new(j, :);
end
end
%% 更新种群和适应度值
pop_new = X_new;
fitness = fitness_new;
%% 更新种群
[fitness, index] = sort(fitness);
for j = 1 : SearchAgents
pop_new(j, :) = pop_new(index(j), :);
end
%% 得到优化曲线
curve(i) = GBestF;
avcurve(i) = sum(curve) / length(curve);
end
%% 得到最优值
Best_pos = GBestX;
Best_score = curve(end);
%% 得到最优参数
NumOfUnits =abs(round( Best_pos(1,3))); % 最佳神经元个数
InitialLearnRate = Best_pos(1,2) ;% 最佳初始学习率
L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
%
inputSize = k;
outputSize = 1; %数据输出y的维度
layers = [ ...
sequenceInputLayer([inputSize,1,1],'name','input') %输入层设置
sequenceFoldingLayer('name','fold')
convolution2dLayer([2,1],10,'Stride',[1,1],'name','conv1')
batchNormalizationLayer('name','batchnorm1')
reluLayer('name','relu1')
convolution2dLayer([1,1],10,'Stride',[1,1],'name','conv2')
batchNormalizationLayer('name','batchnorm2')
reluLayer('name','relu2')
maxPooling2dLayer([1,3],'Stride',1,'Padding','same','name','maxpool')
sequenceUnfoldingLayer('name','unfold')
flattenLayer('name','flatten')
bilstmLayer(NumOfUnits ,'Outputmode','sequence','name','hidden1')
dropoutLayer(0.3,'name','dropout_1')
bilstmLayer(NumOfUnits ,'Outputmode','sequence','name','hidden3')
dropoutLayer(0.3,'name','dropout_3')
bilstmLayer(NumOfUnits ,'Outputmode','last','name','hidden2')
dropoutLayer(0.3,'name','drdiopout_2')
fullyConnectedLayer(outputSize,'name','fullconnect') % 全连接层设置(影响输出维度)(cell层出来的输出层) %
tanhLayer('name','softmax')
regressionLayer('name','output')];
lgraph = layerGraph(layers)
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');
% 参数设置
% options = trainingOptions('adam', ... % 优化算法Adam
% 'MaxEpochs', 2000, ... % 最大训练次数
% 'GradientThreshold', 1, ... % 梯度阈值
% 'InitialLearnRate', InitialLearnRate, ... % 初始学习率
% 'LearnRateSchedule', 'piecewise', ... % 学习率调整
% 'LearnRateDropPeriod', 850, ... % 训练850次后开始调整学习率
% 'LearnRateDropFactor',0.2, ... % 学习率调整因子
% 'L2Regularization', L2Regularization, ... % 正则化参数
% 'ExecutionEnvironment', 'cpu',... % 训练环境
% 'Verbose', 0, ... % 关闭优化过程
% 'Plots', 'training-progress'); % 画出曲线
opts = trainingOptions('adam', ...
'MaxEpochs',500, ...
'GradientThreshold',1,...
'ExecutionEnvironment','cpu',...
'InitialLearnRate',InitialLearnRate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',100, ... %2个epoch后学习率更新
'LearnRateDropFactor',0.5, ...
'Shuffle','once',... % 时间序列长度
'SequenceLength',1,...
'MiniBatchSize',128,...
'Verbose',1,...
'Plots','training-progress');
% 网
没有合适的资源?快使用搜索试试~ 我知道了~
SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测(Matlab完整程序和数据)

共5个文件
m:3个
xlsx:2个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

温馨提示
SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测(Matlab完整程序和数据)(Matlab完整程序和数据) SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测(Matlab完整程序和数据)(Matlab完整程序和数据) SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测(Matlab完整程序和数据)(Matlab完整程序和数据) 优化学习率,正则化参数,单元数,运行环境MATLAB2020及以上。
资源推荐
资源详情
资源评论






格式:zip 资源大小:66.4KB

格式:zip 资源大小:163.1KB









格式:zip 资源大小:1.1MB










格式:zip 资源大小:76.9KB





收起资源包目录






共 5 条
- 1

前程算法屋
- 粉丝: 7331
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 人工智能辅助动画制作流程优化.docx
- 人工智能驱动下的移动门户建设策略及实践案例分析.docx
- 人工智能领域中数学知识的梳理与总结.docx
- 软件项目开发全周期回顾与总结报告.docx
- 深度优化算法在风光储互补电力系统调度中的应用研究.docx
- COMSOL相场法模拟水力压裂与煤层压裂:多场耦合问题及案例指导 全集
- 双馈发电系统:矢量控制算法优化与稳定性分析.docx
- 水面VLC通信系统的自适应对准算法与信号增强策略.docx
- 图扩散增强对比学习系统:算法框架与性能优化研究.docx
- 中考必会几何模型中点四大模型的解析与应用.docx
- 基于红外、可见光双光源的车辆目标检测
- 基于MATLABSimulink的光储一体机Boost-NPC直流侧耦合仿真模型及功率调度控制 · Boost电路
- Python利用古诗词数据库提取的所有宋朝诗人简介
- 三层层级电梯控制系统与MCGS7.7及三菱FX系列PLC联机技术的应用与实现
- 基于Tensorflow2.x开源的项目,比如:目标检测、风格迁移、图像分类、情感分析等等
- 【数控机床领域】基于多物理场耦合的轻量化设计与可靠性分析:Python实现方案及关键技术解析(含详细代码及解释)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
前往页