京東金融大數據競賽豬臉識別(8)- 識別方法之四

除了softmax層構建的深度網絡,Matlab還有一個簡單的構建數據分類的函數,那就是patternnet,其用法類似。可以直接對圖像特徵數據處理,也可以對圖像集處理。代碼如下:

%exam1.m 用訓練圖像特徵構建深度網絡並計算測試圖像得分
clear;
load('JDPig_mlhmslbp_spyr.mat');
m = numel(classe_name);
n = length(y);
label = []
for i=1:n
    label(:,i) = zeros(m,1);
    label(y(i),i) = 1;
end
testImg  = load('JDTest_mlhmslbp_spyr.mat');
if ~exist('patternnet.mat')    
    net = patternnet(1000);
    net = train(net,X,label);
    fprintf('saving net\n');
    save('patternnet.mat','net');
else
    load('patternnet.mat','net');
    fprintf('loading net\n');
end

if ~exist('resPatternnet.mat')
    view(net);
    scores = net(testImg.X);    
    save('resPatternnet.mat','scores');
else
    load('resPatternnet.mat','scores');
end
fprintf('Testing images!\n');
load('testName.mat','imgName');
for i=1:length(scores)
    for j=1:m
        indImg((i-1)*m+j) = imgName(i);
        plabel((i-1)*m+j)  = j;
        prob((i-1)*m+j)   = scores(j,i);
    end
end
T = table(indImg',plabel',prob');
writetable(T,'resPatternnet.csv');
fprintf('Image recognition finished!\n');
clear;
% 不用特徵文件,對圖像文件夾進行處理
trainFolder = fullfile(pwd, 'image');
testFolder = fullfile(pwd, 'query');
testSet   = imageSet(testFolder);              %query image
trainImds = imageDatastore(trainFolder,'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');
testImds  = imageDatastore(testFolder,'IncludeSubfolders',false);
setNum = numel(qImageSets);
y = trainImds.Labels;
n = length(y);
label = []
for i=1:n
    label(:,i) = zeros(m,1);
    label(y(i),i) = 1;
end
for i=1:
if ~exist('patternnet1024.mat')    
    net = patternnet(1024);
    net = train(net,X,label);
    fprintf('saving net\n');
    save('patternnet1024.mat','net');
else
    load('patternnet1024.mat','net');
    fprintf('loading net\n');
end

if ~exist('resPatternnet1024.mat')
    view(net);
    scores = net(testImg.X);    
    save('resPatternnet1024.mat','scores');
else
    load('resPatternnet1024.mat','scores');
end
fprintf('Testing images!\n');
load('testName.mat','imgName');
for i=1:length(scores)
    for j=1:m
        indImg((i-1)*m+j) = imgName(i);
        plabel((i-1)*m+j)  = j;
        prob((i-1)*m+j)   = scores(j,i);
    end
end
T = table(indImg',plabel',prob');
writetable(T,'resPatternnet2000.csv');
fprintf('Image recognition finished!\n');

代碼功能與上節京東金融大數據競賽豬臉識別(6)- 識別方法之三類似,可參看其註釋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章