clc;
clear;
%% 参数设置
posdir='./dataset/yes/';
negdir='./dataset/no/';
possubdir = dir(posdir);
negsubdir = dir(negdir);
rows = 64;
cols = 64;
featurenum = 8*8*9;
randomseed = 1234;
%% 初始化
posnum = length(possubdir)-2;
negnum = length(negsubdir)-2;
n=1;
j=0;
label = zeros([posnum + negnum,1]);
feature = zeros([posnum + negnum,featurenum],'double');
index = 0;
%% 正样本特征提取
for i = 1:length(possubdir)
if ~strcmp(possubdir(i).name ,'.') && ~strcmp(possubdir(i).name,'..')
index = index + 1;
img=imread([posdir,possubdir(i).name]);
img=rgb2gray(img);
img_feature = reshape(HOGFunc(img,8,8,9),1,featurenum);
feature(index,:) = img_feature(1,:);
label(index,1) = 1;
else
j=j+1;
end
end
%% 负样本特征提取
for i = 1:length(negsubdir)
if ~strcmp(negsubdir(i).name ,'.') && ~strcmp(negsubdir(i).name,'..')
index = index + 1;
img=imread([negdir,negsubdir(i).name]);
img=rgb2gray(img);
img_feature = reshape(HOGFunc(img,8,8,9),1,featurenum);
feature(index,:) = img_feature(1,:);
label(index,1) = 0;
else
j=j+1;
end
end
%% 训练
rand=randperm(posnum + negnum);
label = label(rand,:);
feature = feature(rand,:);
rangemat = ones(featurenum, 2);
rangemat(:,1)=0;
% 构造神经网络(包含100个隐藏层的节点)
net=newff(rangemat, [100,100,1],{'tansig','tansig','logsig'},'traingd');
net.trainParam.epochs=15000;
net.trainParam.goal=0.1;
LP.lr=0.1;
% 训练网络
net = train(net,feature',label');
save('net.mat','net');
% 显示构造的网络
view(net);
% 用这个网络来预测训练集的分类
y_test = net(feature');
%输出的值四舍五入,认为大于0.5的属于类‘1’,其他的属于类‘0’
predict = round(abs(y_test));
predict = predict';
truePre = predict == label;
a = find(truePre == true);
accuracy = length(a)/length(truePre);
fprintf('训练集准确率为%f',accuracy);