✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
针对传统BP神经网络存在学习效率低、收敛速度慢和容易陷入局部极小值的问题,提出一种基于改进的PSO来优化BP神经网络的方法。实验结果表明,该方法较好地解决了传统BP神经网络易陷入局部极小值的问题,提高了算法的收敛速度和稳定性。
⛄ 部分代码
%%warning('off');% Data Loadingclear;netdata=load('fortest2.mat');netdata=netdata.FinalReady;% Data and Labelnetwork=netdata(:,1:end-1);netlbl=netdata(:,end);% Var Changeinputs = network;targets = netlbl;% Dim SizeInputNum = size(inputs,2);OutputNum = size(targets,2);pr = [-1 1];PR = repmat(pr,InputNum,1);% NN Structure (log-sigmoid transfer function)NH=5; % Number of Hidden Layers (more better)Network1 = newff(PR,[NH OutputNum],{'tansig' 'tansig'});% Train with PSO on Networks WeightsNetwork1 = TrainPSO(Network1,inputs,targets);view(Network1)% Generating Outputs from Our PSO + NN Network Modeloutputs = Network1(inputs');outputs=outputs';% Sizesizenet=size(network);sizenet=sizenet(1,1);% Outputs ErrorMSE=mse(outputs);% Bias Output for Confusion Matrixoutputs=outputs-(MSE*0.1)/2;% Detecting Mislabeled Datafor i=1 : 50 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=1; end;end;for i=51 : 100 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=2; end;end;for i=101 : 150 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=3; end;end;for i=151 : 200 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=4; end;end;for i=201 : 250 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=5; end;end;for i=251 : 300 if outputs(i) <= 0.9 out(i)=0; elseif outputs(i) >= 0.9 out(i)=6; end;end; out1=single(out');% PSO Final Accuracy psomse=mse(out1,targets); MSEError=abs(mse(targets)-mse(out1)); cnt=0; for i=1:sizenet if out1(i)~= targets(i) cnt=cnt+1; end; end; fin=cnt*100/ sizenet; psoacc=(100-fin)-psomse;
⛄ 运行结果
⛄ 参考文献
[1]杨宝华, 叶生波, 戴前颖,等. 一种基于粒子群算法优化BP神经网络的茶叶存储时间分类方法:, 2019.