MATLAB: Deep Learning NNet accuracy doesn’t looks good

deep learning cnnDeep Learning Toolbox

Hi guys
Goood Afternoon
I been trying to train Nnet with 5k images (3.7k for good and 1.7k for validation), but I am getting 0% accuracy. I have attached screen captures of graph with output and please see the code I am using for training. appriceate for your help.
Thanks in advnce.
Have a great time.
digitalDatasetPath = fullfile('D:\MatLab2020\DeeplearningCNN\test');
imdsTrain = imageDatastore(digitalDatasetPath, ...
'IncludeSubfolders', true,'FileExtensions','.jpeg','LabelSource','foldernames');
% set training dataset folder
% set validation dataset folder
validationPath = fullfile('D:\MatLab2020\DeeplearningCNN\train');
imdsValidation = imageDatastore(validationPath, ...
'IncludeSubfolders',true,'FileExtensions','.jpeg','LabelSource','foldernames');
% create a clipped ReLu layer
layer = clippedReluLayer(10,'Name','clip1');
% define network architecture
layers = [
%imageInputLayer([240 320 3], 'Normalization', 'none')
imageInputLayer([300 300 3])
% conv_1
%convolution2dLayer(5,20,'Stride',1)
convolution2dLayer(5,24)
%batchNormalizationLayer
%clippedReluLayer(10);
reluLayer
maxPooling2dLayer(2,'Stride',2)
% fc layer
fullyConnectedLayer(1)
softmaxLayer
classificationLayer];
% specify training option("adam_&_sgdm")
%options = trainingOptions('sgdm', ...
% 'MaxEpochs',20, ...
% 'InitialLearnRate',0.0001, ...
% 'MiniBatchSize',32, ...
% 'Shuffle','every-epoch', ...
% 'ValidationData',imdsValidation, ...
% 'ValidationFrequency',30, ...
% 'Verbose',false, ...
% 'Plots','training-progress');
options = trainingOptions('sgdm', ...
'MaxEpochs',20, ...
'InitialLearnRate',1e-4, ...
'Verbose', false, ...
'Plots','training-progress')
% train network using training data
net = trainNetwork(imdsTrain,layers,options);
% classify validation images and compute accuracy
YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation)/numel(YValidation)

Best Answer

The loss is constantly 0 and the accuracy is 100 during training indicating that there is nothing to learn from the training data.
I see a couple of potential problems:
  1. Since you are using a fullyConnectedLayer(1), you have a binary classification problem. Make sure that the training data has enough number of samples from all the classes. i.e., training data is representative of your entire dataset.
  2. The input size of [300, 300, 3] is big enough to use a deeper network than just 1 conv layer. Sometimes, the first few layers might not be able to capture all the details from your training data, which deeper layers can help.
Hope this helps.
Related Question