1. 程式人生 > >Matlab 實現神經網絡實例

Matlab 實現神經網絡實例

初始 分配 plot 當前 style idt wid break width

% Matlab實現簡單BP神經網絡 
% http://blog.csdn.net/zjccoder/article/details/40713147
    for i=1:20 %樣本個數  
        xx(i)=2*pi*(i-1)/20;  
        d(i)=0.5*(1+cos(xx(i)));  
    end  
    n=length(xx);%樣本個數  
    p=6; %隱層個數  
    w=rand(p,2);  
    wk=rand(1,p+1);  
    max_epoch=10000;%最大訓練次數  
    error_goal=0.002;%均方誤差  
    q
=0.09;%學習速率 a(p+1)=-1; %training %此訓練網絡采取1-6-1的形式,即一個輸入,6個隱層,1個輸出 for epoch=1:max_epoch e=0; for i=1:n %樣本個數 x=[xx(i);-1]; %按照行來連接,初始的輸出都是-1,向著d(i)=0.5*(1+cos(xx(i))) 進行擬合 neto=0; for j=1:p neti(j)
=w(j,1)*x(1)+w(j,2)*x(2); %w(j,1)輸入層權值 a(j)=1/(1+exp(-neti(j))); %隱層的激活函數采取s函數,f(x)=1/(1+exp(-x)) neto=neto+wk(j)*a(j); % 輸出層wk(j)權值 end neto=neto+wk(p+1)*(-1); %加上偏置 y(i)=neto; %輸出層的激活函數采取線性函數,f(x)=x de
=(1/2)*(d(i)-y(i))*(d(i)-y(i)); e=de+e; %反向傳播倒數第二層到輸出層權值調整的量因為是線性激活函數,不需要求導 %參考http://www.cnblogs.com/daniel-D/archive/2013/06/03/3116278.html %LMS算法 dwk=q*(d(i)-y(i))*a; for k=1:p %(d(i)-y(i))*wk(k) 輸出層的殘差權值分配 %a(k)*(1-a(k)為激活函數輸出的倒數, %f(x) = 1/(1+exp(-x)) f(x) = f(x)(1-f(x)) = a(1-a) %x是當前層的輸出,由於是第一層,輸出和輸入是相同的 %參考blog.csdn.net/langb2014/article/details/46670901 dw(k,1:2)=q*(d(i)-y(i))*wk(k)*a(k)*(1-a(k))*x; end wk=wk+dwk; %從隱層到輸出層權值的更新 w=w+dw; %從輸入層到隱層的權值的更新 end error(epoch)=e; m(epoch)=epoch; if(e<error_goal) break; elseif(epoch==max_epoch) disp(在目前的叠代次數內不能逼近所給函數,請加大叠代次數) end end %simulation for i=1:n %樣本個數 x=[xx(i);-1]; neto=0; for j=1:p neti(j)=w(j,1)*x(1)+w(j,2)*x(2); a(j)=1/(1+exp(-neti(j))); neto=neto+wk(j)*a(j); end neto=neto+wk(p+1)*(-1); y(i)=neto; %線性函數 end %plot figure(1) plot(m,error) xlabel(叠代次數) ylabel(均方誤差) title(BP算法的學習曲線) figure(2) plot(xx,d) hold on plot(xx,y,r) legend(藍線是目標曲線,紅線是逼近曲線)

技術分享 技術分享

Matlab 實現神經網絡實例