Индекс превышает количество элементов массива (0) - PullRequest
0 голосов
/ 27 февраля 2019

Я новичок в среде глубокого обучения, особенно в области аудио, я следую каждому шагу здесь , используя matlab.Я использую свой собственный аудио набор данных в стерео, вот код

%% Compute Speech Spectrograms

segmentDuration = 2;
frameDuration = 0.025;
hopDuration = 0.010;
numBands = 40;

epsil = 1e-6;

%XTrain = speechSpectrograms(adsTrain(:), segmentDuration, frameDuration, hopDuration, numBands);
XTrain = speechSpectrograms(adsTrain,segmentDuration,frameDuration,hopDuration,numBands);
XTrain = log10(XTrain + epsil);

XValidation = speechSpectrograms(adsValidation,segmentDuration,frameDuration,hopDuration,numBands);
XValidation = log10(XValidation + epsil);

XTest = speechSpectrograms(adsTest,segmentDuration,frameDuration,hopDuration,numBands);
XTest = log10(XTest + epsil);

YTrain = adsTrain.Labels;
YValidation = adsValidation.Labels;
YTest = adsTest.Labels;

%% Add Data Augmentation

sz = size(XTrain);
specSize = sz(1:2);
imageSize = [specSize 1];
augmenter = imageDataAugmenter( ...
    'RandXTranslation',[-10 10], ...
    'RandXScale',[0.8 1.2], ...
    'FillValue',log10(epsil));
augimdsTrain = augmentedImageDatastore(imageSize,XTrain,YTrain, ...
    'DataAugmentation',augmenter);

%% Define Neural Network Architecture

classWeights = 1./countcats(YTrain);
classWeights = classWeights'/mean(classWeights);
numClasses = numel(categories(YTrain));

dropoutProb = 0.2;
numF = 12;
layers = [
    imageInputLayer(imageSize)

    convolution2dLayer(3,numF,'Padding','same')
    batchNormalizationLayer
    reluLayer

    maxPooling2dLayer(3,'Stride',2,'Padding','same')

    convolution2dLayer(3,2*numF,'Padding','same')
    batchNormalizationLayer
    reluLayer

    maxPooling2dLayer(3,'Stride',2,'Padding','same')

    convolution2dLayer(3,4*numF,'Padding','same')
    batchNormalizationLayer
    reluLayer

    maxPooling2dLayer(3,'Stride',2,'Padding','same')

    convolution2dLayer(3,4*numF,'Padding','same')
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,4*numF,'Padding','same')
    batchNormalizationLayer
    reluLayer

    maxPooling2dLayer([1 13])

    dropoutLayer(dropoutProb)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    weightedClassificationLayer(classWeights)];

%% Train Network

miniBatchSize = 128;
validationFrequency = floor(numel(YTrain)/miniBatchSize);
options = trainingOptions('adam', ...
    'InitialLearnRate',3e-4, ...
    'MaxEpochs',25, ...
    'MiniBatchSize',miniBatchSize, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',validationFrequency, ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropFactor',0.1, ...
    'LearnRateDropPeriod',20), ...

doTraining = true;
if doTraining
    trainedNet = trainNetwork(augimdsTrain,layers,options);
else
    load('commandNet.mat','trainedNet');
end

И теперь я сталкиваюсь с ошибкой в ​​trainNetwork, вот сообщения об ошибках:

Error using trainNetwork (line 150)
Index exceeds the number of array elements (0).

Error in tensorflow (line 193)
    trainedNet = trainNetwork(augimdsTrain,layers,options);

Caused by:
    Index exceeds the number of array elements (0).

И здесьэто код строки ошибки в trainNetwork:

narginchk(3,4);

try
    [layersOrGraph, opts, X, Y] = iParseInputArguments(varargin{:});
    [trainedNet, info] = doTrainNetwork(layersOrGraph, opts, X, Y);
catch e
    iThrowCNNException( e );
end

end

Я знаю, что означает ошибка, но я не знаю, почему и где исправить эти проблемы.Кто-нибудь может мне помочь?Заранее спасибо.

...