基于神經(jīng)網(wǎng)絡的人臉識別(附代碼)_第1頁
基于神經(jīng)網(wǎng)絡的人臉識別(附代碼)_第2頁
基于神經(jīng)網(wǎng)絡的人臉識別(附代碼)_第3頁
基于神經(jīng)網(wǎng)絡的人臉識別(附代碼)_第4頁
基于神經(jīng)網(wǎng)絡的人臉識別(附代碼)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【代碼及說明見第四頁】基于三層BP神經(jīng)網(wǎng)絡的人臉識別實驗要求采用三層前饋BP神經(jīng)網(wǎng)絡實現(xiàn)標準人臉YALE數(shù)據(jù)庫的識別。二、BP神經(jīng)網(wǎng)絡的結構和學習算法實驗中建議采用如下最簡單的三層BP神經(jīng)網(wǎng)絡,輸入層為,有n個神經(jīng)元節(jié)點,輸出層具有m個神經(jīng)元,網(wǎng)絡輸出為,隱含層具有k個神經(jīng)元,采用BP學習算法訓練神經(jīng)網(wǎng)絡。BP神經(jīng)網(wǎng)絡的結構BP網(wǎng)絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不需要任何輸入和輸出之間的精確的數(shù)學表達式,只要用已知的模式對BP網(wǎng)絡加以訓練,網(wǎng)絡就具有輸入輸出對之間的映射能力。BP網(wǎng)絡執(zhí)行的是有教師訓練,其樣本集是由形如(輸入向量,期望輸出向量)的向量對構成的。在開始訓練前,所有的權值和閾值都應該用一些不同的小隨機數(shù)進行初始化。BP算法主要包括兩個階段:(1)向前傳播階段①從樣本集中取一個樣本(Xp,Yp),將Xp輸入網(wǎng)絡,其中Xp為輸入向量,Yp為期望輸出向量。②計算相應的實際輸出Op。在此階段,信息從輸入層經(jīng)過逐級的變換,傳送到輸出層。這個過程也是網(wǎng)絡在完成訓練后正常運行時執(zhí)行的過程。在此過程中,網(wǎng)絡執(zhí)行的是下列運算:(2)向后傳播階段①計算實際輸出Op與相應的理想輸出Yp的差;②按極小化誤差的方法調整權矩陣。這兩個階段的工作一般應受到精度要求的控制,定義(1)作為網(wǎng)絡關于第p個樣本的誤差測度(誤差函數(shù))。而將網(wǎng)絡關于整個樣本集的誤差測度定義為(2)如前所述,將此階段稱為向后傳播階段,也稱之為誤差傳播階段。為了更清楚地說明本文所使用的BP網(wǎng)絡的訓練過程,首先假設輸入層、中間層和輸出層的單元數(shù)分別是N、L和M。X=(x0,x1,…,xN-1)是加到網(wǎng)絡的輸入矢量,H=(h0,h1,…,hL-1)是中間層輸出矢量,Y=(y0,y1,…,yM-1)是網(wǎng)絡的實際輸出矢量,并且用D=(d0,d1,…,dM-1)來表示訓練組中各模式的目標輸出矢量。輸出單元i到隱單元j的權值是Vij,而隱單元j到輸出單元k的權值是Wjk。另外用θk和Φj來分別表示輸出單元和隱單元的閾值。于是,中間層各單元的輸出為:(3)而輸出層各單元的輸出是:(4)其中f(*)是激勵函數(shù),采用S型函數(shù):(5)在上述條件下,網(wǎng)絡的訓練過程如下:(1)選定訓練集。由相應的訓練策略選擇樣本圖像作為訓練集。(2)初始化各權值Vij,Wjk和閾值Φj,θk,將其設置為接近于0的隨機值,并初始化精度控制參數(shù)ε和學習率α。(3)從訓練集中取一個輸入向量X加到網(wǎng)絡,并給定它的目標輸出向量D。(4)利用式(7)計算出一個中間層輸出H,再用式(8)計算出網(wǎng)絡的實際輸出Y。(5)將輸出矢量中的元素yk與目標矢量中的元素dk進行比較,計算出M個輸出誤差項:對中間層的隱單元也計算出L個誤差項:functionmain()%%clcclearall;%closeall;load('date1_5.mat','feature');warningoffallSamNum=35;%輸入樣本數(shù)量TestSamNum=35;%測試樣本數(shù)量ForcastSamNum=20;%預測樣本數(shù)量HiddenUnitNum=8;%中間層隱節(jié)點數(shù)量取8InDim=40;%網(wǎng)絡輸入維度OutDim=4;%網(wǎng)絡輸出維度%%inputp=[];t=[];pnew=[];fori=1:55if(mod(i,11)<=7&&mod(i,11)>0)p=[p;feature(i,:)];elsepnew=[pnew;feature(i,:)];endendp=p';pnew=pnew';%%outputs1=[00000000000000000000000000000000000];s2=[00000000000000000000011111111111111];s3=[00000001111111111111100000000000000];s4=[11111110000000111111100000001111111];t=[s1;s2;s3;s4];size(t)%%4*35輸出size(p)%%40*35輸入[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%原始樣本對(輸入和輸出)初始化rand('state',sum(100*clock))%依據(jù)系統(tǒng)時鐘種子產生隨機數(shù)SamOut=tn;TestSamIn=SamIn;%這里取輸入樣本與測試樣本相同因為樣本容量偏少TestSamOut=SamOut;%也取輸出樣本與測試樣本相同MaxEpochs=50000;%最多訓練次數(shù)為50000lr=0.035;%學習速率為0.035E0=0.65*10^(-3);%目標誤差為0.65*10^(-3)W1=0.5*rand(HiddenUnitNum,InDim)-0.2;%初始化輸入層與隱含層之間的權值B1=0.5*rand(HiddenUnitNum,1)-0.2;%初始化輸入層與隱含層之間的閾值W2=0.5*rand(OutDim,HiddenUnitNum)-0.2;%初始化輸出層與隱含層之間的權值B2=0.5*rand(OutDim,1)-0.2;%初始化輸出層與隱含層之間的閾值ErrHistory=[];%給中間變量預先占據(jù)內存fori=1:MaxEpochs%HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum));%隱含層網(wǎng)絡輸出HiddenOut=1./(1+exp(-(W1*SamIn+repmat(B1,1,SamNum))));%隱含層網(wǎng)絡輸出NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum);%輸出層網(wǎng)絡輸出Error=SamOut-NetworkOut;%實際輸出與網(wǎng)絡輸出之差SSE=sumsqr(Error);%能量函數(shù)(誤差平方和)ErrHistory=[ErrHistorySSE];ifSSE<E0,break,end%調整權值(閾值)Delta2=Error;Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);dW2=Delta2*HiddenOut';dB2=Delta2*ones(SamNum,1);dW1=Delta1*SamIn';dB1=Delta1*ones(SamNum,1);%對輸出層與隱含層之間的權值和閾值進行修正W2=W2+lr*dW2;B2=B2+lr*dB2;%對輸入層與隱含層之間的權值和閾值進行修正W1=W1+lr*dW1;B1=B1+lr*dB1;endHiddenOut=1./(1+exp(-((W1*SamIn+repmat(B1,1,TestSamNum)))));%隱含層輸出最終結果NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum);%輸出層輸出最終結果a=postmnmx(NetworkOut,mint,maxt);%還原網(wǎng)絡輸出層的結果%%%利用訓練好的網(wǎng)絡進行預測pnewn=tramnmx(pnew,minp,maxp);%歸一化;HiddenOut=1./(1+exp(-(W1*pnewn+repmat(B1,1,ForcastSamNum))));anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum);%輸出層輸出預測結果%把網(wǎng)絡預測得到的數(shù)據(jù)還原為原始的數(shù)量級;anew=postmnmx(anewn,mint,maxt);answer=zeros(1,size(anew,2));d=1;forj=1:20fori=4:-1:1answer(j)=answer(j)+anew(i,j)*d;d=d*2;endd=1;endanswer=answer+0.5;answer=floor(answer)

function[feature]=read_can_use()clc,clear;%%fori=1:5forjj=1:11%%s1='YALE\subject0';s2=int2str(i);s22='_';s222=int2str(jj);s3='.bmp';str=strcat(s1,s2);str=strcat(str,s22);str=strcat(str,s222);str=strcat(str,s3);a2=imread(str);M=double(a2);%%num=1;forj=1:10fork=1:4x=i;%將圖片的灰度矩陣劃分成32塊小矩陣temp_num1=size(M,1)./10;%100*80temp_num2=size(M,2)./4;temp=M((j-1)*temp_num1+1:j*temp_num1,(k-1)*temp_num2+1:k*temp_num2);%對每個小矩陣進行SVD變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論