1. 程式人生 > >MATLAB神經網路學習(1):單層感知器

MATLAB神經網路學習(1):單層感知器

   單層感知器由一個線性組合器和一個二值閾值元件組成。

  輸入是一個N維向量 x=[x1,x2,...,xn],其中每一個分量對應一個權值wi,隱含層輸出疊加為一個標量值:

                      

  隨後在二值閾值元件中對得到的v值進行判斷,產生二值輸出:

                          

  可以將資料分為兩類。實際應用中,還加入偏置,值恆為1,權值為b。這時,y輸出為:

                  

  單層感知器結構圖:

                

  單層感知器進行模式識別的超平面由下式決定:

                    

  當維數N=2時,輸入向量可以表示為平面直角座標系中的一個點。此時分類超平面是一條直線:

                    

  這樣就可以將點沿直線劃分成兩類。

  

 

  單層感知器例項:

  

 

  .....重複上步驟,直到達到設定的loop值,或者誤差小於設定值

 

% perception_hand_un.m
%% 清理
clear,clc
close all

%%
n=0.1;                  % 學習率
w=[0,0,0]; 
P=[ -9,  1, -12
, -4, 0, 5;... 15, -8, 4, 5, 11, 9]; d=[1,1,0,0,0,1]; % 期望輸出 P=[ones(1,6);P]; MAX=100; % 最大迭代次數為100次 %% 訓練 i=0; while 1 v=w*P; y=hardlim(v); % 實際輸出 %更新 e=(d-y); ee(i+1)=mae(e); if (ee(i+1)<0.001) % 判斷 disp('we have got it:'); disp(w);
break; end % 更新權值和偏置 w=w+n*(d-y)*P'; if (i>=MAX) % 達到最大迭代次數,退出 disp('MAX times loop'); disp(w); disp(ee(i+1)); break; end i= i+1; end %% 顯示 figure; subplot(2,1,1); % 顯示待分類的點和分類結果 plot([ -12 -4 0],[ 4 5 11],'o'); hold on; plot([-9 ,1,5],[15,-8,9],'*'); axis([-13,6,-10,16]); legend('第一類','第二類'); title('6個座標點的二分類'); x=-13:.2:6; y=x*(-w(2)/w(3))-w(1)/w(3); plot(x,y); hold off; subplot(2,1,2); % 顯示mae值的變化 x=0:i; plot(x,ee,'o-'); s=sprintf('mae的值(迭代次數:%d)', i+1); title(s);
% perception_newp.m
% 清理
clear,clc
close all

% 建立感知器
net=newp([-20,20;-20,20],1);

%定義輸入訓練向量
P=[ -9,  1, -12, -4,   0, 5;...
   15,  -8,   4,  5,  11, 9];
% 期望輸出
T=[0,1,0,0,0,1]

% 訓練
net=train(net,P,T);

% 輸入訓練資料模擬驗證
Y=sim(net,P)