MATLAB神經網路學習(1):單層感知器
阿新 • • 發佈:2018-12-23
單層感知器由一個線性組合器和一個二值閾值元件組成。
輸入是一個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)