Как я могу прочитать наборы аудиосигналов .ogg для обучения и применения LSTM в Matlab в соответствии со следующим кодом?

#matlab #machine-learning #lstm

#matlab #машинное обучение #lstm

Вопрос:

Существует код Matlab, который выполняет следующие шаги для глубокого обучения и применения LSTM, мне нужно изменить первые три шага, чтобы использовать наш набор данных для обучения этой модели, необходимо применить это для аудиофайлов .ogg, поэтому создайте и используйте некоторые аудиофайлы в формате .ogg в качестве образца данных и дайте мнекод.

Следующие шаги для вашей информации:

Генерируются три класса аудиосигналов, которые помечаются как «белые», «коричневые» и «розовые». Каждый класс имеет 1000 образцов. 800 выборок из каждого класса используются в качестве обучающих выборок для обучения глубокой нейронной сети, таким образом, всего 800 * 3 = 2400 выборок в обучающем наборе данных. Их метки — это имена их классов «white», «brown» и «pink». (Строки 29 и 30) 200 выборок из каждого класса используются в качестве проверочных выборок для проверки производительности глубокой нейронной сети, таким образом, всего 600 выборок в наборе данных проверки. Их метки — это имена их классов «white», «brown» и «pink» (строки 32 и 33), извлекающие объекты из обучающего набора данных и набора данных проверки. определите структуру модели нейронной сети (LSTM), задайте параметры обучения, обучайте модель итеративно, используя обучающий набор данных, и тестируйте модель, используя набор данных проверки на каждой итерации. завершите обучение и получите обученную модель. создайте тестовый набор данных и используйте обученную модель для классификации тестового набора данных на три класса: «белый», «коричневый» и «розовый».

код: «‘

 fs = 44.1e3;

duration = 0.5;

N = duration*fs;

wNoise = 2*rand([N,1000]) - 1;

wLabels = repelem(categorical("white"),1000,1);

bNoise = filter(1,[1,-0.999],wNoise);

bNoise = bNoise./max(abs(bNoise),[],'all');

bLabels = repelem(categorical("brown"),1000,1);

pNoise = pinknoise([N,1000]);

pLabels = repelem(categorical("pink"),1000,1)

sound(wNoise(:,1),fs)

melSpectrogram(wNoise(:,1),fs)

title('White Noise')

sound(bNoise(:,1),fs)

melSpectrogram(bNoise(:,1),fs)

title('Brown Noise')

sound(pNoise(:,1),fs)

melSpectrogram(pNoise(:,1),fs)

title('Pink Noise')

featuresTrain = extract(aFE,audioTrain);

[numHopsPerSequence,numFeatures,numSignals] = size(featuresTrain)

audioTrain = [wNoise(:,1:800),bNoise(:,1:800),pNoise(:,1:800)];

labelsTrain = [wLabels(1:800);bLabels(1:800);pLabels(1:800)];

audioValidation = [wNoise(:,801:end),bNoise(:,801:end),pNoise(:,801:end)];

labelsValidation = [wLabels(801:end);bLabels(801:end);pLabels(801:end)];

aFE = audioFeatureExtractor("SampleRate",fs, ...

"SpectralDescriptorInput","melSpectrum", ...

"spectralCentroid",true, ...

"spectralSlope",true);

featuresTrain = permute(featuresTrain,[2,1,3]);

featuresTrain = squeeze(num2cell(featuresTrain,[1,2]));

numSignals = numel(featuresTrain)

[numFeatures,numHopsPerSequence] = size(featuresTrain{1})

featuresValidation = extract(aFE,audioValidation);

featuresValidation = permute(featuresValidation,[2,1,3]);

featuresValidation = squeeze(num2cell(featuresValidation,[1,2]));

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(50,"OutputMode","last")

fullyConnectedLayer(numel(unique(labelsTrain)))

softmaxLayer

classificationLayer];

options = trainingOptions("adam", ...

"Shuffle","every-epoch", ...

"ValidationData",{featuresValidation,labelsValidation}, ...

"Plots","training-progress", ...

"Verbose",false);

net = trainNetwork(featuresTrain,labelsTrain,layers,options);

wNoiseTest = 2*rand([N,1]) - 1;

classify(net,extract(aFE,wNoiseTest)')

bNoiseTest = filter(1,[1,-0.999],wNoiseTest);

bNoiseTest= bNoiseTest./max(abs(bNoiseTest),[],'all');

classify(net,extract(aFE,bNoiseTest)')

pNoiseTest = pinknoise(N);

classify(net,extract(aFE,pNoiseTest)')
'''
  

Комментарии:

1. Привет @puyanmj1, добро пожаловать в StackOverflow! Я не уверен, что понимаю, в чем заключается ваш вопрос. Не могли бы вы рассказать нам немного больше о проблемах, с которыми вы столкнулись?

2. Кроме того, пустая строка после каждой строки кода затрудняет чтение

3. Я объяснил коды здесь и что он делает в разделе шаги. Проблема в том, что я хочу использовать наборы аудиосигналов .ogg. Предположим, что у меня много файлов audio .ogg с секундами звуковых звуков. Я хочу использовать эту классификацию и метод LSTM в упомянутом коде (который вы можете легко скопировать и запустить) с моими наборами данных. Следовательно, мне нужно изменить первую часть, чтобы использовать мои наборы данных, как я могу это сделать? какой метод я должен использовать? Спасибо

4. Наш набор данных имеет 2 класса: «нормальный» и «аномалия», вместо трех классов «белый», «коричневый» и «розовый», используемых в этом примере. Мы знаем, какие сигналы являются нормальными, а какие — аномальными, поэтому класс каждого сигнала известен, и вам не нужно делать маркировку. Вы можете разделить наши данные на три части. Например, 80% всех нормальных и аномальных сигналов для обучения (2 класса), 10% для проверки и 10% для тестирования.