資源簡介
說明,這個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
評論
共有 條評論