資源簡介
代碼分為read_can_use.m和main_can_ues.m
先運行read_can_use.m 讀取圖片的像素值,使用奇異值分解的方法得到對應的特征。程序預設了只讀取前5個人的人臉圖片 ,可以自己改成最多15個人。
然后運行main_can_use.m ,程序會輸出 1 1 2 3 2 3,每個數字代表一張圖片最有可能的識別類別(就是人的編號)。
對每個人的11張圖片,取前7張訓練網絡,后4張測試網絡,取前5個人進行實驗。所以共有35個訓練樣本,20個測試樣本。
比如輸出的結果是 1 1 1 1 2 2 1 2 3 3 3 3 …..,因為每4個數字是屬于同一個人的,前四個都是1則都預測正確,第二組的4個數字2 2 1 2 中的那個1 就是預測錯誤(本來是2預測成了1)。
由于參數的隨機初始化,不保證每次的結果都相同。

代碼片段和文件信息
function?main()
%%
clc
clear?all;
%close?all;
load(‘date1_5.mat‘‘feature‘);
warning?off?all
SamNum=35;??????????????????%輸入樣本數量
TestSamNum=35;??????????????%測試樣本數量
ForcastSamNum=20;????????????%預測樣本數量
HiddenUnitNum=8;????????????%中間層隱節點數量取8
InDim=40;????????????????????%網絡輸入維度
OutDim=4;???????????????????%網絡輸出維度
%%input
p=[];t=[];pnew=[];
for?i=1:55
????if(mod(i11)<=7&&mod(i11)>0)
????????p=[p;feature(i:)];
????else
????????pnew=[pnew;feature(i:)];
????end
end
p=p‘;pnew=pnew‘;
%%output
s1=[0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?];
s2=[0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?1?1?1?1?1?1?1?1?1?1?1?1?1?1?];
s3=[0?0?0?0?0?0?0?1?1?1?1?1?1?1?1?1?1?1?1?1?1?0?0?0?0?0?0?0?0?0?0?0?0?0?0?];
s4=[1?1?1?1?1?1?1?0?0?0?0?0?0?0?1?1?1?1?1?1?1?0?0?0?0?0?0?0?1?1?1?1?1?1?1?];
t=[s1;s2;s3;s4];
size(t)?%%4*35?輸出
size(p)?%%40*35?輸入
[SamInminpmaxptnmintmaxt]=premnmx(pt);?%原始樣本對(輸入和輸出)初始化
rand(‘state‘sum(100*clock))???%依據系統時鐘種子產生隨機數
SamOut=tn;
TestSamIn=SamIn;???????????????????????????%這里取輸入樣本與測試樣本相同因為樣本容量偏少
TestSamOut=SamOut;?????????????????????????%也取輸出樣本與測試樣本相同
MaxEpochs=50000;??????????????????????????????%最多訓練次數為50000
lr=0.035;???????????????????????????????????????%學習速率為0.035
E0=0.65*10^(-3);??????????????????????????????%目標誤差為0.65*10^(-3)
W1=0.5*rand(HiddenUnitNumInDim)-0.2;???%初始化輸入層與隱含層之間的權值
B1=0.5*rand(HiddenUnitNum1)-0.2;???????%初始化輸入層與隱含層之間的閾值
W2=0.5*rand(OutDimHiddenUnitNum)-0.2;?%初始化輸出層與隱含層之間的權值
B2=0.5*rand(OutDim1)-0.2;????????????????%初始化輸出層與隱含層之間的閾值
ErrHistory=[];??????????????????????????????%給中間變量預先占據內存
for?i=1:MaxEpochs
????%?????HiddenOut=logsig(W1*SamIn+repmat(B11SamNum));?%?隱含層網絡輸出
????HiddenOut=1./(1+exp(-(W1*SamIn+repmat(B11SamNum))));?%?隱含層網絡輸出
????
????NetworkOut=W2*HiddenOut+repmat(B21SamNum);????%?輸出層網絡輸出
????Error=SamOut-NetworkOut;???????????????????????%?實際輸出與網絡輸出之差
????SSE=sumsqr(Error)???;????????????????????????????%能量函數(誤差平方和)
????
????ErrHistory=[ErrHistory?SSE];
????
????if?SSE ????%?調整權值(閾值)
????Delta2=Error;
????Delta1=W2‘*Delta2.*HiddenOut.*(1-HiddenOut);
????dW2=Delta2*HiddenOut‘;
????dB2=Delta2*ones(SamNum1);
????dW1=Delta1*SamIn‘;
????dB1=Delta1*ones(SamNum1);
????%對輸出層與隱含層之間的權值和閾值進行修正
????W2=W2+lr*dW2;
????B2=B2+lr*dB2;
????%對輸入層與隱含層之間的權值和閾值進行修正
????W1=W1+lr*dW1;
????B1=B1+lr*dB1;
end
HiddenOut=1./(1+exp(-((W1*SamIn+repmat(B11TestSamNum)))));?%?隱含層輸出最終結果
NetworkOut=W2*HiddenOut+repmat(B21TestSamNum);????%?輸出層輸出最終結果
a=postmnmx(NetworkOutmintmaxt);???????????????%?還原網絡輸出層的結果
%%
%?利用訓練好的網絡進行預測
pnewn=tramnmx(pnewminpmaxp);?????????%歸一化;
HiddenOut=1./(1+exp(-(W1*pnewn+repmat(B11ForcastSamNum))));
anewn=W2*HiddenOut+repmat(B21ForcastSamNum);???????????%?輸出層輸出預測結果
%把網絡預測得到的數據還原為原始的數量級;
anew=postmnmx(anewnmintmaxt);
answer=zeros(1size(anew2));
d=1;
for?j=1:20
????for?i=4:-1:1
????????answer(j)=answer(j)+anew(ij)*d;
????????d=d*2;
????en
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-16?15:52??基于神經網絡的人臉識別\
?????文件????????3434??2016-07-10?13:19??基于神經網絡的人臉識別\main_can_use.m
?????文件????????1042??2018-05-16?15:46??基于神經網絡的人臉識別\read_can_use.m
?????目錄???????????0??2017-09-16?12:16??基于神經網絡的人臉識別\YALE\
?????文件????????9080??2002-07-26?10:01??基于神經網絡的人臉識別\YALE\subject01_1.bmp
?????文件????????9080??2002-07-26?10:04??基于神經網絡的人臉識別\YALE\subject01_10.bmp
?????文件????????9080??2002-07-26?10:05??基于神經網絡的人臉識別\YALE\subject01_11.bmp
?????文件????????9080??2002-07-26?10:05??基于神經網絡的人臉識別\YALE\subject01_2.bmp
?????文件????????9080??2002-07-26?10:06??基于神經網絡的人臉識別\YALE\subject01_3.bmp
?????文件????????9080??2002-07-26?10:07??基于神經網絡的人臉識別\YALE\subject01_4.bmp
?????文件????????9080??2002-07-26?10:08??基于神經網絡的人臉識別\YALE\subject01_5.bmp
?????文件????????9080??2002-07-26?10:09??基于神經網絡的人臉識別\YALE\subject01_6.bmp
?????文件????????9080??2002-07-26?10:12??基于神經網絡的人臉識別\YALE\subject01_7.bmp
?????文件????????9080??2002-07-26?10:12??基于神經網絡的人臉識別\YALE\subject01_8.bmp
?????文件????????9080??2002-07-26?10:13??基于神經網絡的人臉識別\YALE\subject01_9.bmp
?????文件????????9080??2002-07-26?10:15??基于神經網絡的人臉識別\YALE\subject02_1.bmp
?????文件????????9080??2002-07-26?10:16??基于神經網絡的人臉識別\YALE\subject02_10.bmp
?????文件????????9080??2002-07-26?10:16??基于神經網絡的人臉識別\YALE\subject02_11.bmp
?????文件????????9080??2002-07-26?10:17??基于神經網絡的人臉識別\YALE\subject02_2.bmp
?????文件????????9080??2002-07-26?10:18??基于神經網絡的人臉識別\YALE\subject02_3.bmp
?????文件????????9080??2002-07-26?10:18??基于神經網絡的人臉識別\YALE\subject02_4.bmp
?????文件????????9080??2002-07-26?10:19??基于神經網絡的人臉識別\YALE\subject02_5.bmp
?????文件????????9080??2002-07-26?10:20??基于神經網絡的人臉識別\YALE\subject02_6.bmp
?????文件????????9080??2002-07-26?10:20??基于神經網絡的人臉識別\YALE\subject02_7.bmp
?????文件????????9080??2002-07-26?10:21??基于神經網絡的人臉識別\YALE\subject02_8.bmp
?????文件????????9080??2002-07-26?10:22??基于神經網絡的人臉識別\YALE\subject02_9.bmp
?????文件????????9080??2002-07-26?10:25??基于神經網絡的人臉識別\YALE\subject03_1.bmp
?????文件????????9080??2002-07-26?10:27??基于神經網絡的人臉識別\YALE\subject03_10.bmp
?????文件????????9080??2002-07-26?10:28??基于神經網絡的人臉識別\YALE\subject03_11.bmp
?????文件????????9080??2002-07-26?10:29??基于神經網絡的人臉識別\YALE\subject03_2.bmp
?????文件????????9080??2002-07-26?10:30??基于神經網絡的人臉識別\YALE\subject03_3.bmp
............此處省略139個文件信息
- 上一篇:寫字機制作方案
- 下一篇:張志華《機器學習導論》筆記和補充材料
評論
共有 條評論