フィルターのクリア

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.

12 ビュー (過去 30 日間)
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
  3 件のコメント
Umar
Umar 2024 年 7 月 21 日 4:06

Hi Nader,

In case, you could not figure out, I am providing code snippets for network architecture modification and update preprocessing function

Network Architecture Modification

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(3) % Three output nodes for regression
    regressionLayer]; % Use regressionLayer for regression tasks

Update Preprocessing Function

function [X, Y] = preprocessMiniBatch(XCell, YCell)

    % Extract image data from the cell array and concatenate over the fourth dimension
    X = cat(4, XCell{:});
    % Extract and concatenate regression labels
    Y = cat(2, YCell{:});

end

Goodluck!

Nader Rihan
Nader Rihan 22分 前
Thank you Umar, but there still exists an issue and the code can not run as attached in the figure.
Also, after some research I found that. the regressionLayer is not supported in dlnetwork, please refer to this question's answer:
I still have issue :D, if you find the solution please reply, waiting for your help, thanks alot.

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeImage Data Workflows についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by