Can not know how to use minibatchqueue for a deep learning network that takes input as 4-D numbers and output 3 numbers through fully-connected layer.
There is a MATLAB example that uses minibatchqueue for input date as 4-D (image) and output as categorical. What I need is to update this example to accept output to be three numberical values (through a 3-fully connected layer).
The MATLAB example is:
[XTrain,YTrain] = digitTrain4DArrayData;
dsX = arrayDatastore(XTrain,IterationDimension=4);
dsY = arrayDatastore(YTrain);
dsTrain = combine(dsX,dsY);
classes = categories(YTrain);
numClasses = numel(classes);
net = dlnetwork;
layers = [
imageInputLayer([28 28 1],Mean=mean(XTrain,4))
convolution2dLayer(5,20)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];
net = addLayers(net,layers);
net = initialize(net);
miniBatchSize = 128;
mbq = minibatchqueue(dsTrain,…
MiniBatchSize=miniBatchSize,…
PartialMiniBatch="discard",…
MiniBatchFcn=@preprocessMiniBatch,…
MiniBatchFormat=["SSCB",""]);
function [X,Y] = preprocessMiniBatch(XCell,YCell)
% Extract image data from the cell array and concatenate over fourth
% dimension to add a third singleton dimension, as the channel
% dimension.
X = cat(4,XCell{:});
% Extract label data from cell and concatenate.
Y = cat(2,YCell{:});
% One-hot encode labels.
Y = onehotencode(Y,1);
end
Again, what I need is to know how to modify the code to accept three regression values at fully connected output layer.
Actually, I tried alot and alot without success. I think the main trick is the update that should be done inside this function: preprocessMiniBatch (defined above).
ThanksThere is a MATLAB example that uses minibatchqueue for input date as 4-D (image) and output as categorical. What I need is to update this example to accept output to be three numberical values (through a 3-fully connected layer).
The MATLAB example is:
[XTrain,YTrain] = digitTrain4DArrayData;
dsX = arrayDatastore(XTrain,IterationDimension=4);
dsY = arrayDatastore(YTrain);
dsTrain = combine(dsX,dsY);
classes = categories(YTrain);
numClasses = numel(classes);
net = dlnetwork;
layers = [
imageInputLayer([28 28 1],Mean=mean(XTrain,4))
convolution2dLayer(5,20)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];
net = addLayers(net,layers);
net = initialize(net);
miniBatchSize = 128;
mbq = minibatchqueue(dsTrain,…
MiniBatchSize=miniBatchSize,…
PartialMiniBatch="discard",…
MiniBatchFcn=@preprocessMiniBatch,…
MiniBatchFormat=["SSCB",""]);
function [X,Y] = preprocessMiniBatch(XCell,YCell)
% Extract image data from the cell array and concatenate over fourth
% dimension to add a third singleton dimension, as the channel
% dimension.
X = cat(4,XCell{:});
% Extract label data from cell and concatenate.
Y = cat(2,YCell{:});
% One-hot encode labels.
Y = onehotencode(Y,1);
end
Again, what I need is to know how to modify the code to accept three regression values at fully connected output layer.
Actually, I tried alot and alot without success. I think the main trick is the update that should be done inside this function: preprocessMiniBatch (defined above).
Thanks There is a MATLAB example that uses minibatchqueue for input date as 4-D (image) and output as categorical. What I need is to update this example to accept output to be three numberical values (through a 3-fully connected layer).
The MATLAB example is:
[XTrain,YTrain] = digitTrain4DArrayData;
dsX = arrayDatastore(XTrain,IterationDimension=4);
dsY = arrayDatastore(YTrain);
dsTrain = combine(dsX,dsY);
classes = categories(YTrain);
numClasses = numel(classes);
net = dlnetwork;
layers = [
imageInputLayer([28 28 1],Mean=mean(XTrain,4))
convolution2dLayer(5,20)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
convolution2dLayer(3,20,Padding=1)
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];
net = addLayers(net,layers);
net = initialize(net);
miniBatchSize = 128;
mbq = minibatchqueue(dsTrain,…
MiniBatchSize=miniBatchSize,…
PartialMiniBatch="discard",…
MiniBatchFcn=@preprocessMiniBatch,…
MiniBatchFormat=["SSCB",""]);
function [X,Y] = preprocessMiniBatch(XCell,YCell)
% Extract image data from the cell array and concatenate over fourth
% dimension to add a third singleton dimension, as the channel
% dimension.
X = cat(4,XCell{:});
% Extract label data from cell and concatenate.
Y = cat(2,YCell{:});
% One-hot encode labels.
Y = onehotencode(Y,1);
end
Again, what I need is to know how to modify the code to accept three regression values at fully connected output layer.
Actually, I tried alot and alot without success. I think the main trick is the update that should be done inside this function: preprocessMiniBatch (defined above).
Thanks deep learning, neural network, optimization, deep learning toolbox, deep learning toolbox model quantization library MATLAB Answers — New Questions