Error using trainNetwork. Unable to read file.

조회 수: 3 (최근 30일)
Hassan Ashraf
Hassan Ashraf 2019년 4월 2일
댓글: Walter Roberson 2021년 12월 15일
I am trying to implement CNN on signal's Data. I have a database in which I have 10 folders(Each folder has 12 subfolders). Each file has dimensions 12x2000 which is a .mat file. While running CNN on the above data I am facing below attached error. Can someone help me out?
location = 'C:\Users\AKRA\Desktop\New folder (3)';
imds = imageDatastore(location, 'FileExtensions', '.mat', 'IncludeSubfolders',1, ...
'LabelSource','foldernames');
labelCount = countEachLabel(imds)
img = readimage(imds,1);
size(img)
numTrainFiles = 8;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
layers = [
imageInputLayer([12 2000 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.01, ...
'MaxEpochs',4, ...
'Shuffle','every-epoch', ...
'ValidationData',imdsValidation, ...
'ValidationFrequency',30, ...
'Verbose',false, ...
'Plots','training-progress');
net = trainNetwork(imdsTrain,layers,options);
YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation)/numel(YValidation)
Screenshot (9).png
  댓글 수: 3
Hassan Ashraf
Hassan Ashraf 2019년 4월 2일
What could be other options?
Catalytic
Catalytic 2019년 4월 2일
편집: Catalytic 2019년 4월 2일

댓글을 달려면 로그인하십시오.

채택된 답변

Catalytic
Catalytic 2019년 4월 2일
편집: Catalytic 2019년 4월 2일
I think it is expecting more traditional types of image files like .jpg,.png, etc.. I think for .mat you need to specify a specialized ReadFcn. Maybe this?
imds = imageDatastore(location, 'FileExtensions', '.mat', 'IncludeSubfolders',1, ...
'LabelSource','foldernames',...
'ReadFcn',@(f) getfield(load(f)),___);
  댓글 수: 16
Lan  Anh
Lan Anh 2021년 12월 14일
The file only contains a single variable and the name of the variable to read from the file is always the same
Walter Roberson
Walter Roberson 2021년 12월 15일
function S = matReader(filename)
data_struct = load(filename);
fields = fieldnames(data_struct);
S = data_struct.(fields{1});
end
This code will handle the case of exactly one variable in the file, no matter what the variable is named.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matt J
Matt J 2019년 4월 2일
Maybe it's a corrupt file. Are you able to open CNN1.mat simply by using load?
  댓글 수: 3
john karli
john karli 2021년 11월 17일
hellow Hassan
I need your help. I am also trying to train model on .mat file. I do the same like you but i am facing some issue. I have tried the above code
imds = imageDatastore(location, 'FileExtensions', '.mat', 'IncludeSubfolders',1,...
'LabelSource','foldernames','ReadFcn',@matReader);
and my matReader is
function S = matReader(filename)
S = load(filename);
end
but when i run the following code
net = trainNetwork(imdsTrain,lgraph_1,options);
Error using trainNetwork (line 184)
Conversion to single from struct is not possible.
Caused by:
Error using cast
Conversion to single from struct is not possible.
Please assist i have also attached the image
Hassan Ashraf
Hassan Ashraf 2021년 11월 17일
If its a struct file, then there must be different fields within that struct file. You need to specify which file (field) from that struct file to read. See my code to read and call the struct file
function I=readFcn1(filename)
I=load(filename);
I=I.S;
and on the other hand, this is how I am calling this function
location = 'C:\EMG\Test\Subject5\Day5';
test = imageDatastore(location, 'FileExtensions', '.mat', 'IncludeSubfolders',1, ...
'LabelSource','foldernames',...
'ReadFcn', @readFcn1);

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Image Data Workflows에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by