测试图像分类精度的振荡-VGG-转移学习

时间:2019-03-27 09:37:42

标签: matlab deep-learning classification vgg-net transfer-learning

我正尝试将VGG19与Matlab一起进行性别识别(基于非人类灵长类动物的面部图像)。我有5,000张训练图像(1,500位女性和3,500位男性),并且我需要预测4,000张测试图像的性别(我知道是所有女性,实际上我对分类得分很感兴趣),我还将其用于验证每个20次迭代(以了解发生了什么)。

网络学习得也很好,并且达到了迷你批次精度的100%。在VGG的两个辍学阶段中,将辍学率设置为0.7而不是0.5,不会有任何改变。好啊,为什么不。但是,测试图像是随机分配的(50个周期后约占50%)。奇怪的是,在训练开始时,测试图像的准确性在20%到80%之间波动。仅将20%的图像分配给女性(再次全部代表女性)是不可能偶然发生的,因此我最初认为这是因为这两个培训课程可以在多个维度上划分(不仅是女性与男性)。但是,为什么在多个时期之后,验证(=测试)的准确性会稳定在50%左右呢?我不明白发生了什么。这是训练监控的样子 (PS:net之前已经使用相同的参数进行了预训练,这说明了为什么小批量精度在第一次迭代时就已经达到90%)

enter image description here

这是代码:

% Data augmentation
pixelRange = [-10 10]; 
rotRange = [-10 10]; 
scaleRange = [0.8 1.1];

% Network parameters
miniBatchSize = 42 %max that my GPU can take;
maxEpochs = 100;
initialLearnRate = 1e-3;
validationFrequency = 20;

% Load dataset
imdsLearning = imageDatastore(fullfile(sprintf(learningdata)),...
'IncludeSubfolders',true,'LabelSource','foldernames');
imdsTesting = imageDatastore(fullfile(sprintf(testingdata)),...
'IncludeSubfolders',true,'LabelSource','foldernames');

load net.mat

inputSize = net.Layers(1).InputSize;

imageAugmenter = imageDataAugmenter( ...
    'RandXReflection',true, ...
    'RandXTranslation',pixelRange, ...
    'RandRotation',rotRange, ...
    'RandYTranslation',pixelRange, ...
    'RandScale',scaleRange);

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsLearning, ...
    'DataAugmentation',imageAugmenter);

augimdsTesting = augmentedImageDatastore(inputSize(1:2),imdsTesting);

options = trainingOptions('sgdm', ...
    'ExecutionEnvironment','gpu', ...
    'MiniBatchSize',miniBatchSize, ...
    'MaxEpochs',maxEpochs, ...
    'Shuffle','every-epoch' ,...
    'InitialLearnRate',initialLearnRate, ...
    'ValidationData',augimdsTesting, ...
    'ValidationFrequency',validationFrequency, ...
    'ValidationPatience',Inf, ...
     'Verbose',true, ...
    'Plots','training-progress', ...
    'OutputFcn',@(info)stopIfAccuracyLevelReached(info,80));

net2 = trainNetwork(augimdsTrain,net.Layers,options);

0 个答案:

没有答案