in the following code I have applied LSTM on audio files. Now I want to add confusion matrix for the results. Please advise me.
clear allclose allTrainRatio=0.8;ValidationRatio=0.1;folder='/Users/pooyan/Documents/normal/'; % change this path to your normal data folder
audio_files=dir(fullfile(folder,'*.ogg'));nfileNum=length(audio_files);%nfileNum=200
normal=[];for i = 1:nfileNum normal_name = [folder audio_files(i).name]; normal(i,:) = audioread(normal_name); end normal=normal';nLabels = repelem(categorical("normal"),nfileNum,1);folder='/Users/pooyan/Documents/anomaly/'; % change this path to your anomaly data folder
audio_files=dir(fullfile(folder,'*.ogg'));afileNum=length(audio_files);anomaly=[];for i = 1:afileNum anomaly_name = [folder audio_files(i).name]; anomaly(i,:) = audioread(anomaly_name); end anomaly=anomaly';aLabels = repelem(categorical("anomaly"),afileNum,1);% randomize the inputs if necessary
% normal=normal(:,randperm(nfileNum, nfileNum));
% anomaly=anomaly(:,randperm(afileNum, afileNum));
nTrainNum = round(nfileNum*TrainRatio);aTrainNum = round(afileNum*TrainRatio);nValidationNum = round(nfileNum*ValidationRatio);aValidationNum = round(afileNum*ValidationRatio);audioTrain = [normal(:,1:nTrainNum),anomaly(:,1:aTrainNum)];labelsTrain = [nLabels(1:nTrainNum);aLabels(1:aTrainNum)];audioValidation = [normal(:,nTrainNum+1:nTrainNum+nValidationNum),anomaly(:,aTrainNum+1:aTrainNum+aValidationNum)];labelsValidation = [nLabels(nTrainNum+1:nTrainNum+nValidationNum);aLabels(aTrainNum+1:aTrainNum+aValidationNum)];audioTest = [normal(:,nTrainNum+nValidationNum+1:end),anomaly(:,aTrainNum+aValidationNum+1:end)];labelsTest = [nLabels(nTrainNum+nValidationNum+1:end); aLabels(aTrainNum+aValidationNum+1:end)];fs=44100;% Create an audioFeatureExtractor object
%to extract the centroid and slope of the mel spectrum over time.
aFE = audioFeatureExtractor("SampleRate",fs, ... %Fs "SpectralDescriptorInput","melSpectrum", ... "spectralCentroid",true, ... "spectralSlope",true);featuresTrain = extract(aFE,audioTrain);[numHopsPerSequence,numFeatures,numSignals] = size(featuresTrain);numHopsPerSequence;numFeatures;numSignals;%treat the extracted features as sequences and use a
%sequenceInputLayer as the first layer of your deep learning model.
featuresTrain = permute(featuresTrain,[2,1,3]); %permute switching dimensions in array
featuresTrain = squeeze(num2cell(featuresTrain,[1,2]));%remove dimensions
numSignals = numel(featuresTrain); %number of signals of normal and anomalies
[numFeatures,numHopsPerSequence] = size(featuresTrain{1});%Extract the validation features.
featuresValidation = extract(aFE,audioValidation);featuresValidation = permute(featuresValidation,[2,1,3]);featuresValidation = squeeze(num2cell(featuresValidation,[1,2]));%Define the network architecture.
layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(50,"OutputMode","last") fullyConnectedLayer(numel(unique(labelsTrain))) %%labelTrain=audio
softmaxLayer classificationLayer];%To define the training options
options = trainingOptions("adam", ... "Shuffle","every-epoch", ... "ValidationData",{featuresValidation,labelsValidation}, ... %%labelValidatin=audioValidation "Plots","training-progress", ... "Verbose",false);%To train the network
net = trainNetwork(featuresTrain,labelsTrain,layers,options);%Test the network %10 preccent
%classify(net,permute(extract(aFE,audioTest),[2 257 35]))
TestFeature=extract(aFE, audioTest);for i=1:size(TestFeature, 3)TestFeatureIn = TestFeature(:,:,i)';classify(net,TestFeatureIn)end
Best Answer