Divide a 4D array into training set and validation set for CNN (regression)

Hi everybody,

I am trying to design a CNN for regression following this Matlab example. It uses a 4D array to store the images and vector to store the values associated to every picture. I am using this code to create a 4D array called ‘database’ that contains my images and a vector ‘labels’ that contains the values.

k = 1;
for i = 1:1000
str = sprintf('images/2cm/%d.jpg', i);
image_to_store = imread(str);
database(:,:,1,k) = (image_to_store(:,:)); % images are in grey scale
labels(k) = 2;
k = k+1;
for i = 1:1000
str = sprintf('images/20cm/%d.jpg', i);
image_to_store = imread(str);
database(:,:,1,k) = (image_to_store(:,:));
labels(k) = 20;
k = k+1;
% ...

Now, I have my 4D array and the vector, so I am trying to divide them into a Training Set and a Validation Set as suggested in the example linked. Can anyone please help me to understand how can I do that?


Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

Hope this does what you wanted:

% Your data set:
% The first 1000 entries with labels 2cm,
% The second 1000 entries with labels 20cm,
database = rand(28,28,1,2000);
% percentage of training points = 70%, validation = 30%, test = 0%
% One way to divide the 2000 database entries
[trainInd,valInd,testInd] = dividerand(2000,p,1-p,0);
trainDatabaseBad = database(:,:,:,trainInd);
valDatabaseBad = database(:,:,:,valInd);
size(trainDatabaseBad) % output: 28 28 1 1400
size(valDatabaseBad) % output: 28 28 1 600
% A better way to divide, which ensures that
% there is equal propotion of 2cm to 20cm samples in
% the training set, validation set, and the whole set
[trainInd1,valInd1,testInd1] = dividerand(1000,p,1-p,0);
[trainInd2,valInd2,testInd2] = dividerand(1000,p,1-p,0);
trainDatabase = cat(4, database(:,:,:,trainInd1), database(:,:,:,trainInd2));
valDatabase = cat(4, database(:,:,:,valInd1), database(:,:,:,valInd2));




Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store