资源简介

说明,这个matlab程序的目标是对BP神经网络中的神经元连接权和阈值构成的高维参数空间进行最优求解,试图用PSO算法求解神经网络中的参数,而不是用传统的误差反传算法。但由于经典粒子群算法存在局部最优的问题。该算法也存在同样的问题。该算法在迭代数较大时可以基本做到误差较大的函数拟合。但是通过该资源提供的图解和代码注释,用户可以很容易的学习到PSO算法的过程。至于如何突破局部最优,这个就有待各位PSO爱好者进行优化了。

资源截图

代码片段和文件信息

%适应度函数
function y=AdaptFunc_BP(x)
%求解偏差的均方根,也就是每个预测点和实际点的平方和再求平方根
%x是行向量,数量为ParticleSize
%x(1:5)---V:输入到隐层神经元的权值
%x(6:10)---theta1:隐层神经元的阈值
%x(11:15)---W:输出层神经元的连接权
%x(16)---W:输出层神经元的阈值

[rowcol]=size(x);

%训练集的X
X=-1:0.1:1;
%col2有用
[row2col2]=size(X);

D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609 ...
    0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988 ...
    0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];

if row>1
    error(‘适应度函数:输入的参数错误‘);
end

%net = newff([-1 1][5 1]{‘tansig‘‘tansig‘});
net = newff(XD5{‘tansig‘‘tansig‘});
%net.trainParam.epochs = 100; %训练的最大次数
%net.trainParam.goal = 0.005; %全局最小误差
 V=x(1:5)‘;
 theta1=x(6:10)‘;
 W=x(11:15);
 theta2=x(16);
 net.iw{11}=V;
 net.b{1}=theta1;
 net.lw{21}=W;
 net.b{2}=theta2;
 O2 = sim(netX);
 
 %计算当前参数下,神经网络的实际输出O2与目标输出D之间的误差的平方和
 total=sqrt(sum((O2-D).^2));
    TempStr=sprintf(‘误差平方和%g‘total);
    disp(TempStr);
y=total;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1205  2014-06-18 20:36  AdaptFunc_BP.m

     文件        572  2014-06-19 09:25  Check_PSO_Result_BP.m

     文件       1011  2014-06-18 20:31  ContrastBP_PSO.m

     文件      15572  2014-06-19 09:58  PSO_Stand.m

     文件        669  2014-06-19 10:44  ShowAllResult.asv

     文件        693  2014-06-19 10:49  ShowAllResult.m

     文件       1594  2014-06-19 11:14  Test_PSO_Stand.m

     文件     611072  2014-06-19 11:21  采用粒子群进行曲线拟合的过程.docx

     文件        594  2014-06-19 12:12  使用说明.txt

----------- ---------  ---------- -----  ----

               632982                    9


评论

共有 条评论