Error using trainNetwork (line 184) Conversion to single from struct is not possible.
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
john karli
le 17 Nov 2021
Commenté : john karli
le 22 Nov 2021
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 commentaires
Réponse acceptée
Walter Roberson
le 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 commentaires
Walter Roberson
le 22 Nov 2021
bytes_required = (5000 * 0.7) * 656*875*2 * 8
gigabytes_required = bytes_required / 2^30
You are almost certainly running out of memory.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Install Products dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!