基于MATLAB的人脸朝向识别.docVIP

  • 73
  • 0
  • 约9.48千字
  • 约 12页
  • 2018-04-23 发布于河南
  • 举报
基于MATLAB的人脸朝向识别

clear all clc; %% 人脸特征向量提取 % 人数 M=10; % 人脸朝向类别数 N=5; % 特征向量提取 pixel_value=feature_extraction(M,N); %% 训练集/测试集产生 % 产生图像序号的随机序列 rand_label=randperm(M*N); % 人脸朝向标号 direction_label=repmat(1:N,1,M); % 训练集 train_label=rand_label(1:30); P_train=pixel_value(train_label,:); Tc_train=direction_label(train_label); T_train=ind2vec(Tc_train); % 测试集 test_label=rand_label(31:end); P_test=pixel_value(test_label,:); Tc_test=direction_label(test_label); %% K-fold交叉验证确定最佳神经元个数 k_fold=10; Indices=crossvalind(Kfold,size(P_train,2),k_fold); error_min=10e10; best_number=1; best_input=[]; best_output=[]; best_train_set_index=[]; best_validation_set_index=[]; h=waitbar(0,正在寻找最佳神经元个数.....); for i=1:k_fold % 验证集标号 validation_set_index=(Indices==i); % 训练集标号 train_set_index=~validation_set_index; % 验证集 validation_set_input=P_train(:,validation_set_index); validation_set_output=T_train(:,validation_set_index); % 训练集 train_set_input=P_train(:,train_set_index); train_set_output=T_train(:,train_set_index); for number=10:30 for j=1:5 rate{j}=length(find(Tc_train(:,train_set_index)==j))/length(find(train_set_index==1)); end net=newlvq(minmax(train_set_input),number,cell2mat(rate)); % 设置网络参数 net.trainParam.epochs=100; net.trainParam.show=10; net.trainParam.lr=0.1; net.trainParam.goal=0.001; % 训练网络 net=train(net,train_set_input,train_set_output); waitbar(((i-1)*21+number)/219,h); %% 仿真测试 T_sim=sim(net,validation_set_input); Tc_sim=vec2ind(T_sim); error=length(find(Tc_sim~=Tc_train(:,validation_set_index))); if errorerror_min error_min=error; best_number=number; best_input=train_set_input; best_output=train_set_output; best_train_set_index=train_set_index; best_validation_set_index=validation_set_index; end end end disp([经过交叉验证,得到的最佳神经元

文档评论(0)

1亿VIP精品文档

相关文档