Error using trainNetwork (line 184) Conversion to single from struct is not possible.

10 views (last 30 days)
I am trying to implement the resnet50 on signal dataset.I have a database in which I have 10 folders(Each folder has 12 subfolders). Each file has dimensions 656x875x2 which is a .mat file. While running resnet on the above data I am facing below attached error. Can someone help me out?
location = 'D:\data-11\sir task\New folder\';
imds = imageDatastore(location, 'FileExtensions', '.mat', 'IncludeSubfolders',0, ...
'LabelSource','foldernames',...
'ReadFcn',@matReader);
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7, 'randomized');
net = lgraph_1;
inputSize = lgraph_1.Layers(1).InputSize;
[learnableLayer,classLayer] = findLayersToReplace(lgraph_1);
[learnableLayer,classLayer]
numClasses = numel(categories(imdsTrain.Labels));
if isa(learnableLayer,'nnet.cnn.layer.FullyConnectedLayer')
newLearnableLayer = fullyConnectedLayer(numClasses, ...
'Name','new_fc', ...
'WeightLearnRateFactor',10, ...
'BiasLearnRateFactor',10);
elseif isa(learnableLayer,'nnet.cnn.layer.Convolution2DLayer')
newLearnableLayer = convolution2dLayer(1,numClasses, ...
'Name','new_conv', ...
'WeightLearnRateFactor',10, ...
'BiasLearnRateFactor',10);
end
lgraph_1 = replaceLayer(lgraph_1,learnableLayer.Name,newLearnableLayer);
newClassLayer = classificationLayer('Name','new_classoutput');
lgraph_1 = replaceLayer(lgraph_1,classLayer.Name,newClassLayer);
miniBatchSize = 128;
valFrequency = floor(numel(imdsTrain.Files)/miniBatchSize);
checkpointPath = pwd;
options = trainingOptions('sgdm', ...
'MiniBatchSize',miniBatchSize, ...
'MaxEpochs',100, ...
'InitialLearnRate',1e-3, ...
'Shuffle','every-epoch', ...
'ValidationData',imdsValidation, ...
'ValidationFrequency',valFrequency, ...
'Verbose',false, ...
'Plots','training-progress', ...
'CheckpointPath',checkpointPath);
net = trainNetwork(imdsTrain,lgraph_1,options);
  9 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 17 Nov 2021
When you load() a .mat file and assign the value to a variable, what you get back is a struct with one field for each variable in the file. You need to examine fieldnames(S) and decide which variable to extract from the struct. (The task is of course easier if all of the files contain the same variable name.)
  15 Comments
Walter Roberson
Walter Roberson on 22 Nov 2021
bytes_required = (5000 * 0.7) * 656*875*2 * 8
bytes_required = 3.2144e+10
gigabytes_required = bytes_required / 2^30
gigabytes_required = 29.9364
You are almost certainly running out of memory.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!