(PSO-BP)结合粒子群的神经网络算法以及matlab实现
原理:
PSO(粒子群群算法):可以在全局范围内进行大致搜索,得到一个初始解,以便BP接力
BP(神经网络):梯度搜素,细化能力强,可以进行更仔细的搜索。
数据:对该函数((2.1*(1-x+2*x.^2).*exp(-x.^2/2))+sin(x)+x','x')[-5,5]进行采样,得到30组训练数据,拟合该网络。
神经网络结构设置: 该网络结构为,1-7-1结构,即输入1个神经元,中间神经元7个,输出1个神经元
程序步骤:
第一步:先采用抽取30组数据,包括输入和输出
第一步:运行粒子群算法,进行随机搜索,选择一个最优的解,该解的维数为22维。
第二步:在;粒子群的解基础上进行细化搜索
程序代码:
clc
clear
tic
SamNum=30; HiddenNum=7;
InDim=1;
OutDim=1; load train_x
load train_f a=train_x';
d=train_f'; p=[a];
t=[d];
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); NoiseVar=0.01;
Noise=NoiseVar*randn(1,SamNum);
SamOut=tn + Noise; SamIn=SamIn';
SamOut=SamOut'; MaxEpochs=60000;
lr=0.025;
E0=0.65*10^(-6); %%
%the begin of PSO E0=0.001;
Max_num=500;
particlesize=200;
c1=1;
c2=1;
w=2;
vc=2;
vmax=5;
dims=InDim*HiddenNum+HiddenNum+HiddenNum*OutDim+OutDim;
x=-4+7*rand(particlesize,dims);
v=-4+5*rand(particlesize,dims);
f=zeros(particlesize,1);
%%
for jjj=1:particlesize
trans_x=x(jjj,:);
W1=zeros(InDim,HiddenNum);
B1=zeros(HiddenNum,1);
W2=zeros(HiddenNum,OutDim);
B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error) f(jjj)=SSE;
end
personalbest_x=x;
personalbest_f=f;
[groupbest_f i]=min(personalbest_f);
groupbest_x=x(i,:);
for j_Num=1:Max_num
vc=(5/3*Max_num-j_Num)/Max_num;
%%
v=w*v+c1*rand*(personalbest_x-x)+c2*rand*(repmat(groupbest_x,particlesize,1)-x);
for kk=1:particlesize
for kk0=1:dims
if v(kk,kk0)>vmax
v(kk,kk0)=vmax;
else if v(kk,kk0)<-vmax
v(kk,kk0)=-vmax;
end
end
end
end
x=x+vc*v;
%%
for jjj=1:particlesize
trans_x=x(jjj,:);
W1=zeros(InDim,HiddenNum);
B1=zeros(HiddenNum,1);
W2=zeros(HiddenNum,OutDim);
B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error); f(jjj)=SSE; end
%%
for kk=1:particlesize
if f(kk)<personalbest_f(kk)
personalbest_f(kk)=f(kk);
personalbest_x(kk)=x(kk);
end
end
[groupbest_f0 i]=min(personalbest_f); if groupbest_f0<groupbest_f
groupbest_x=x(i,:);
groupbest_f=groupbest_f0;
end
ddd(j_Num)=groupbest_f
end
str=num2str(groupbest_f);
trans_x=groupbest_x;
W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
%the end of PSO
%% for i=1:MaxEpochs
%%
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error) ErrHistory=[ SSE]; if SSE<E0,break, end
dB2=zeros(OutDim,1);
dW2=zeros(HiddenNum,OutDim);
for jj=1:HiddenNum
for k=1:SamNum
dW2(jj,OutDim)=dW2(jj,OutDim)+Error(k)*Hiddenout(k,jj);
end
end
for k=1:SamNum
dB2(OutDim,1)=dB2(OutDim,1)+Error(k);
end
dW1=zeros(InDim,HiddenNum);
dB1=zeros(HiddenNum,1);
for ii=1:InDim
for jj=1:HiddenNum for k=1:SamNum
dW1(ii,jj)=dW1(ii,jj)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj))*(SamIn(k,ii));
dB1(jj,1)=dB1(jj,1)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj)); end
end
end W2=W2-lr*dW2;
B2=B2-lr*dB2; W1=W1-lr*dW1;
B1=B1-lr*dB1;
end Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1); aa=postmnmx(Networkout,mint,maxt);
x=a;
newk=aa;
figure
plot(x,d,'r-o',x,newk,'b--+')
legend('原始数据','训练后的数据');
xlabel('x');ylabel('y');
toc
注:在(i5,8G,win7,64位)PC上的运行时间为30s左右。鉴于PSO带有概率性,可以多跑几次,看最佳的一次效果。
转载于:https://www.cnblogs.com/jacksin/p/8835907.html
(PSO-BP)结合粒子群的神经网络算法以及matlab实现的更多相关文章
- 群智能优化算法-测试函数matlab源码
群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%% ...
- 粒子群算法(PSO)算法解析(简略版)
粒子群算法(PSO) 1.粒子群算法(PSO)是一种基于群体的随机优化技术: 初始化为一组随机解,通过迭代搜寻最优解. PSO算法流程如图所示(此图是从PPT做好,复制过来的,有些模糊) 2.PSO模 ...
- 粒子群算法优化BP生物能神经网络
定义: 粒子群中每个粒子的位置表示BP神经网络当前迭代中权值的集合,每个粒子的维数由网络中起连接作用的权值的数量和阈值个数决定,以给定训练样本集的神经网络输出误差作为神经网络训练问题的适应度函数,适应 ...
- 粒子群优化算法对BP神经网络优化 Matlab实现
1.粒子群优化算法 粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作 ...
- 算法(三)粒子群算法PSO的介绍
一.引言 在讲算法之前,先看两个例子: 例子一:背包问题,一个书包,一堆物品,每个物品都有自己的价值和体积,装满书包,使得装的物品价值最大. 例子二:投资问题,n个项目,第i个项目投资为ci 收益为p ...
- ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)
ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...
- 计算智能(CI)之粒子群优化算法(PSO)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...
- 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点
目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...
- C语言实现粒子群算法(PSO)二
上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*( ...
随机推荐
- CF633(div.2)C. Powered Addition
题目描述 http://codeforces.com/contest/1339/problem/C 给定一个长度为 \(n\) 的无序数组,你可以在第 \(x\) 秒进行一次下面的操作. 从数组选取任 ...
- web自动化测试中的PO模式(一)
1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...
- RESTful API设计的点
RESTful API 前言 一直在使用RESTful API,但是好像概念还是很模糊的,总结下使用到的点 设计的规范 协议 API与用户的通信协议,总是使用HTTPs协议. 域名 应该尽量将API部 ...
- AJ学IOS(41)UI之核心动画 两行代码搞定3D转场
AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...
- 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素
模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...
- 【MyBatis深入剖析】应用分析与最佳实践
##### 文章目标1. 了解ORM框架的发展历史,了解MyBatis特性2. 掌握MyBatis编程式开发方法和核心对象3. 掌握MyBatis核心配置含义4. 掌握MyBatis的高级用法与扩展方 ...
- work of 1/5/2016
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 UI页面切换,词本显示下滑条 6 继续下滑条等增删补 ...
- 安全测试-WEB安全渗透测试基础知识(四)
.4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...
- Labyrinth 树的直径加DFS
The northern part of the Pyramid contains a very large and complicated labyrinth. The labyrinth is d ...
- Windows Pains poj 2585
Boudreaux likes to multitask, especially when it comes to using his computer. Never satisfied with j ...