1 简介 BP神经网络算法使用非常广泛,传统的BP神经网络算法虽然具有不错的拟合非线性函数的能力,但是容易陷入局部的极小值,并且传统的算法收敛的速度慢.本篇文章详细地论述了如何
1 简介
BP神经网络算法使用非常广泛,传统的BP神经网络算法虽然具有不错的拟合非线性函数的能力,但是容易陷入局部的极小值,并且传统的算法收敛的速度慢.本篇文章详细地论述了如何使用帝企鹅算法优化传统的BP神经网络算法中初始的权值和阀值,通过相应的验证和比较提出了该模型的有效性.
2 部分代码
%% 2021.9.2 AFO 算法优化神经网络% 2021.9.2 AFO algorithm optimizes neural network weights and thresholds
%% 这是使用原始算法的直接求解结果,添加专用于本问题的更新方式可以进一步提高精度
% This is the direct result of using the original algorithm,
% adding some specific update methods to this problem can further improve the accuracy
clc;
clear;
close all;
warning off
%% 固定随机数种子
noRNG=1;
rng('default')
rng(noRNG)
%% 载入数据
%% 数据预处理
load input
load output
%%
data.x=[input'];
data.y=[output];
num_Train=120; %训练集数量
data.len_train=num_Train;
num_Test=48; %测试集数量
index=randperm(num_Train+num_Test); %随机乱序
data.train_x=data.x(:,index(1:num_Train))';
data.train_y=data.y(:,index(1:num_Train))';
data.test_x=data.x(:,index(num_Train+1:end))';
data.test_y=data.y(:,index(num_Train+1:end))';
% 归一化
[data.train_x0,option.ps_x]=mapminmax(data.train_x');
data.train_x0=data.train_x0';
[data.train_y0,option.ps_y]=mapminmax(data.train_y');
data.train_y0=data.train_y0';
data.test_x0 = mapminmax('apply',data.test_x',option.ps_x);
data.test_x0=data.test_x0';
data.test_y0 = mapminmax('apply',data.test_y',option.ps_y);
data.test_y0=data.test_y0';
%%
data.weight=1;
data=data;
data.hiddenumber= [5];%隐含神经元数
%% 未优化神经网络
clear result
[x(1,:),result(1)]=creat_x_1(option,data);
%draw(result(1),'未优化')
data.m=result(1).m;
data.n=result(1).n;
data.m_lw=result(1).m_lw;
data.n_lw=result(1).n_lw;
data.m_iw=result(1).m_iw;
data.n_iw=result(1).n_iw;
data.m_b=result(1).m_b;
data.n_b=result(1).n_b;
data.len=result(1).len;
[y(1),result(1)]=aimFcn_1(x(1,:),option,data,result(1).net);
%% 参数设置
lb=-5;
ub=5;
option.lb=lb;
option.ub=ub;
dim=length(x(1,:));
%%
option.dim=dim; %八个决策变量
lb=0;
ub=1;
option.lb=lb;
option.ub=ub;
if length(option.lb)==1
option.lb=ones(1,option.dim)*option.lb;
option.ub=ones(1,option.dim)*option.ub;
end
option.fobj=@aimFcn_1;
%option.fobj0=option.fobj;
option.showIter=0;
%% 算法参数设置 Parameters
% 基本参数
tic
[bestY(1,:),bestX(1,:),best_result1,recording(1)]=AFO1(x,y,result,option,data);
tt(1,1)=toc;
%%
figure
hold on
for i=1:length(recording)
plot((recording(i).bestFit),'LineWidth',2)
end
legend(str_legend)
title('fitness curve')
%% 未优化神经网络
rng(7)
[x(1,:),result(1)]=creat_x_1(option,data);
[y(1),result(1)]=aimFcn_1(x(1,:),option,data,result(1).net);
%%
figure
hold on
plot(result(1).ygabptest(i,:));
plot(best_result1.ygabptest(i,:));
plot(data.test_y(:,i));
legend(['未优化神经网络(mse=',num2str(result(1).mse(i)),')'],['AFO优化神经网络(mse=',num2str(best_result1.mse(i)),')'],['真实数据'])
3 仿真结果
4 参考文献
[1]肖雄. PSO优化BP神经网络岩爆预测的Matlab实现[J]. 中国房地产业, 2018, 000(025):244.