Parfor: Unable to perform assignment because the size of the left side is 98-by-50 and the size of the right side is 107-by-50
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Abigail Allen
am 13 Apr. 2020
Kommentiert: Camila Gil
am 1 Mär. 2021
Hello,
I have been trying to modify the speech command recognition example (https://uk.mathworks.com/help/audio/examples/Speech-Command-Recognition-Using-Deep-Learning.html) by adding in one of my own words into the data set.
However when I get to the feature extraction for the valdation set, I get the error "Unable to perform assignment because the size of the left side is 98-by-50 and the size of the right side is 107-by-50" on the line:
parfor ii = 1:numPar
I am unsure of why this section is flagging an error when my test set did this without any hiccups. Any help on this would be much appreciated, thank you!
Here is the section of code it occurs in:
%%
% Perform the feature extraction steps described above to the validation
% set.
if ~isempty(ver('parallel'))
pool = gcp;
numPar = numpartitions(adsValidation,pool);
else
numPar = 1;
end
parfor ii = 1:numPar
subds = partition(adsValidation,numPar,ii);
XValidation = zeros(numHops,numBands,1,numel(subds.Files));
for idx = 1:numel(subds.Files)
x = read(subds);
xPadded = [zeros(floor((segmentSamples-size(x,1))/2),1);x;zeros(ceil((segmentSamples-size(x,1))/2),1)];
XValidation(:,:,:,idx) = extract(afe,xPadded);
end
XValidationC{ii} = XValidation;
end
XValidation = cat(4,XValidationC{:});
XValidation = XValidation/unNorm;
XValidation = log10(XValidation + epsil);
0 Kommentare
Akzeptierte Antwort
Edric Ellis
am 14 Apr. 2020
Unfortunately, error reporting from parfor has some limitations, and specifically it cannot indicate the precise line within the loop body where the error is occurring.
Having said that, I cannot see in your loop body any places where you're performing a 2-dimensional assignment operation to generate the error that you're observing... (although my guess would be the assignment into XValidation).
One option in this case is to place the entire body of your parfor loop into a separate function - that way when things do fail, you should get a more precise error location. Something like this:
parfor ii = 1:numPar
% Unfortunately, it looks like you'll need to pass through quite a number of parameters.
XValidationC{ii} = loopBodyFcn(adsValidation, numPar, ii, numHops, numBands); % more here
end
5 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!