资源简介

代码分为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个文件信息

评论

共有 条评论