当前位置: 首页 > news >正文

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

目录

    • 分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测
      • 分类效果
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考文献

分类效果

1
2
3
4

5
6

基本介绍

1.Matlab实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测,运行环境Matlab2018b及以上;
2.运行主程序MainSSA_CNNC即可,其余为函数文件,无需运行,可视化输出分类准确率,可在下载区获取数据和程序内容。
3.输入15个特征,输出4类标签。
4.SSA优化CNN的超参数,一共有9个参数需要优化,分别是学习率、迭代次数、批处理样本、第一层卷积层的核大小和数量、第2层卷积层的核大小和数量,以及两个全连接层的神经元数量。

模型描述

卷积神经网络(CNN)中超参数众多,人工选择比较困难,利用麻雀搜索算法(SSA)对卷积神经网络中的参数进行优化,消除人工操作的不确定性。本模型共优化8 个超参数,分别是迭代次数、学习率、第1 层卷积核大小和数量、第2 层卷积核大小和数量,以及2 个全连接层的神经元数量(conv 表示卷积层,fc 表示全连接层)。本文建立的模型组成包括输入层、2 层卷积层、2 层激活层、2 层全连接层和输出层。SSA CNN 模型预测具体实现步骤如下。
第1 步:对数据进行归一化处理。
第2 步:设定初始参数,包括种群中的个体总数、子群体数、每个子群体中的麻雀数、最大迭代次数、发现者的数量及SSA 其他参数等。
第3 步:初始化种群并定义适应度函数,以CNN的预测值与实际值的均方误差最小化作为适应度函数,SSA 的目的就是找到一组超参数,用这组超参数训练得到的CNN 的误差能够最小化。
第4 步:计算适应度函数值并排序。
第5 步:确定每个子群体中的最优解、最差解和全局最优解。
第6 步:更新麻雀位置,获取当前的新位置,如果新位置比以前的位置更好就更新它,若达到设定的最大迭代次数,则将其输出,否则返回继续寻优,直到得到最好的麻雀坐标。
第7 步:将寻优得到的麻雀坐标代入CNN 模型中,得到预测模型的输出。

7

程序设计

  • 完整程序和数据私信博主。
%种群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
%计算初始适应度值
fitness = zeros(1,pop);
for i = 1:popfitness(i) =  fobj(X(i,:));
end
[fitness, index]= sort(fitness);%升排序
BestF = fitness(1);
WorstF = fitness(end);
GBestF = fitness(1);%全局最优适应度值
for i = 1:popX(i,:) = X0(index(i),:);
end
curve=zeros(1,Max_iter);
GBestX = X(1,:);%全局最优位置
X_new = X;
for i = 1: Max_iterdisp(['第',num2str(i),'次迭代'])BestF = fitness(1);WorstF = fitness(end);R2 = rand(1);for j = 1:PDNumberif(R2<ST)X_new(j,:) = X(j,:).*exp(-j/(rand(1)*Max_iter));elseX_new(j,:) = X(j,:) + randn()*ones(1,dim);end     endfor j = PDNumber+1:pop
%        if(j>(pop/2))if(j>(pop - PDNumber)/2 + PDNumber)X_new(j,:)= randn().*exp((X(end,:) - X(j,:))/j^2);else%产生-11的随机数A = ones(1,dim);for a = 1:dimif(rand()>0.5)A(a) = -1;endend AA = A'*inv(A*A');     X_new(j,:)= X(1,:) + abs(X(j,:) - X(1,:)).*AA';endendTemp = randperm(pop);SDchooseIndex = Temp(1:SDNumber); for j = 1:SDNumberif(fitness(SDchooseIndex(j))>BestF)X_new(SDchooseIndex(j),:) = X(1,:) + randn().*abs(X(SDchooseIndex(j),:) - X(1,:));elseif(fitness(SDchooseIndex(j))== BestF)K = 2*rand() -1;X_new(SDchooseIndex(j),:) = X(SDchooseIndex(j),:) + K.*(abs( X(SDchooseIndex(j),:) - X(end,:))./(fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));endend%边界控制for j = 1:popfor a = 1: dimif length(ub)>1if(X_new(j,a)>ub(a))X_new(j,a) =ub(a);endif(X_new(j,a)<lb(a))X_new(j,a) =lb(a);endelseif(X_new(j,a)>ub)X_new(j,a) =ub;endif(X_new(j,a)<lb)X_new(j,a) =lb;endendendend %更新位置for j=1:popfitness_new(j) = fobj(X_new(j,:));endfor j = 1:popif(fitness_new(j) < GBestF)GBestF = fitness_new(j);GBestX = X_new(j,:);   endendX = X_new;fitness = fitness_new;%排序更新[fitness, index]= sort(fitness);%排序BestF = fitness(1);WorstF = fitness(end);for j = 1:popX(j,:) = X(index(j),:);endcurve(i) = GBestF;disp(['current iteration is: ',num2str(i), ', best fitness is: ', num2str(GBestF)]);
end

参考文献

[1] https://blog.csdn.net/kjm13182345320/article/details/128713044?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128700127?spm=1001.2014.3001.5501

http://www.lryc.cn/news/3354.html

相关文章:

  • 华为10年经验测试工程师,整理出来的python自动化测试实战
  • OpenCV杂谈 - 如何导出图像到内存中其他结构
  • Session与Cookie的区别(四)
  • Linux 文件锁 - fcntl
  • CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享
  • OpenStack云平台搭建(6) | 部署Neutron
  • Lesson 05.Configuring the Oracle Network Environment
  • 理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口
  • 【Hello Linux】 Linux的权限以及Shell原理
  • 【STM32】【HAL库】遥控关灯2 分机
  • 代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II
  • Unity UI合批的问题
  • MWORKS--系统建模与仿真
  • PC端开发GUI
  • 解读手机拍照的各个参数(拍照时,上面会有6个符号)
  • 数字钥匙最新进展文章
  • 如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)
  • C++中的强制类型转换
  • 任何人都可以学习Rasa之优秀Rasa学习资源推荐
  • 数据中心的 TCP-Delay ACK 与 RTO, RACK
  • MySQL与常见面试题
  • FFmpeg进阶: 采用音频滤镜对音频进行转码
  • C++:AVL树
  • Docker中安装Oracle-12c
  • 教你如何用Python分析出选注双色球号码
  • elasticsearch映射及字段类型
  • 1493围圈报数(队列)
  • 【ArcGIS Pro二次开发】(2):创建一个Add-in项目
  • 浏览器缓存是如何提升网站访问速度的
  • Linux中几个在终端中有趣的命令