✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
针对传统BP神经网络存在学习效率低、收敛速度慢和容易陷入局部极小值的问题,提出一种基于改进的PSO来优化BP神经网络的方法。实验结果表明,该方法较好地解决了传统BP神经网络易陷入局部极小值的问题,提高了算法的收敛速度和稳定性。
⛄ 部分代码
%%
warning('off');
% Data Loading
clear;
netdata=load('fortest2.mat');
netdata=netdata.FinalReady;
% Data and Label
network=netdata(:,1:end-1);
netlbl=netdata(:,end);
% Var Change
inputs = network;
targets = netlbl;
% Dim Size
InputNum = 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 Weights
Network1 = TrainPSO(Network1,inputs,targets);
view(Network1)
% Generating Outputs from Our PSO + NN Network Model
outputs = Network1(inputs');
outputs=outputs';
% Size
sizenet=size(network);
sizenet=sizenet(1,1);
% Outputs Error
MSE=mse(outputs);
% Bias Output for Confusion Matrix
outputs=outputs-(MSE*0.1)/2;
% Detecting Mislabeled Data
for 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.