主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

딥러닝을 사용해 음성 명령 인식하기

이 예제에서는 오디오에서 음성 명령의 존재 여부를 감지하는 딥러닝 모델을 훈련시키는 방법을 보여줍니다. 이 예제에서는 语音命令数据集을 사용하여 컨벌루션 신경망이 주어진 명령 세트를 인식하도록 훈련시킵니다[1].

신경망을 처음부터 훈련시키려면 먼저 데이터 세트를 다운로드해야 합니다. 데이터 세트 다운로드나 신경망 훈련을 원치 않는 경우에는 이 예제와 함께 제공된 사전 훈련된 신경망을 불러온 후 이 예제의 다음 두 섹션사전훈련된신경망을사용하여명령인식하기마이크의 스트리밍 오디오를 사용하여 명령 감지하기를실행할수있습니다。

사전훈련된신경망을사용하여명령인식하기

훈련과정을자세히살펴보기전에사전훈련된음성인식신경망을사용하여음성명령을식별해보겠습니다。

사전 훈련된 신경망을 불러옵니다.

负载(“commandNet.mat”)

이 신경망은 다음 음성 명령을 인식하도록 훈련되어 있습니다.

  • “是的”

  • “不”

  • 《飞屋环游记》

  • “向下”

  • “左”

  • “正确”

  • “上”

  • “关闭”

  • “停止”

  • “走”

한사람이“停止”이라고말하는짧은음성신호를불러옵니다。

[x, fs] = audioread (“停止命令。flac”);

명령을 들어봅니다.

声音(x,fs)

이사전훈련된신경망은청각기반스펙트로그램을입력값으로받습니다。먼저,음성파형을청각기반스펙트로그램으로변환해보겠습니다。

함수extractAuditoryFeature를사용하여청각스펙트로그램을계산합니다。특징추출에대해서는이예제의뒷부분에서자세히살펴봅니다。

auditorySpect = helperExtractAuditoryFeatures (x, fs);

청각스펙트로그램을기반으로명령을분류합니다。

命令=分类(trainedNet、auditorySpect)
命令=无条件停止

이신경망은이세트에속하지않는단어를“未知”으로분류하도록훈련되어있습니다。

이제,식별할명령목록에포함되지않은단어(“玩”)를분류해보겠습니다。

음성신호를불러와서들어봅니다。

x = audioread (“play_command.flac”);声音(x,fs)

청각스펙트로그램을계산합니다。

auditorySpect = helperExtractAuditoryFeatures (x, fs);

신호를분류합니다。

命令=分类(trainedNet、auditorySpect)
命令=分类未知

이 신경망은 배경 잡음을 “背景”로 분류하도록 훈련되어 있습니다.

랜덤 잡음으로 구성된 1.초 길이의 신호를 만듭니다.

x=针孔(16e3);

청각스펙트로그램을계산합니다。

auditorySpect = helperExtractAuditoryFeatures (x, fs);

배경잡음을분류합니다。

命令=分类(trainedNet、auditorySpect)
命令=分类背景

마이크의 스트리밍 오디오를 사용하여 명령 감지하기

사전 훈련된 명령 감지 신경망을 마이크의 스트리밍 오디오에 대해 테스트합니다.是的,没有,停止과같은명령을말해봅니다。그런다음马文,希拉,,房子,,0 9과사또는이의임의의숫자와같은알려지지않은단어를말해봅니다。

분류속도를赫兹단위로지정하고마이크의오디오를읽을수있는오디오장치리더를만듭니다。

分类率=20;adr=音频设备阅读器(“SampleRate”fs,“样品性能框架”、地板(fs / classificationRate));

오디오를위한버퍼를초기화합니다。신경망의분류레이블을추출합니다。스트리밍오디오의레이블및분류확률을위해0.5초분량의버퍼를초기화합니다。초기화한버퍼를사용하여보다긴시간에걸쳐분류결과를비교하고,이를사용하여명령이감지된때를대상으로”일치하는'부분을구축합니다。의사결정로직에대한임계값을지정합니다。

audioBuffer = dsp.AsyncBuffer (fs);. class标签= trainedNet.Layers(结束);YBuffer (1: classificationRate / 2) =分类(“背景”);probBuffer = 0([元素个数(标签),classificationRate / 2));countThreshold =装天花板(classificationRate * 0.2);probThreshold = 0.7;

图를만들고,이가존재하는한계속해서명령을감지합니다。루프를무한정으로실행하려면期限로 설정하십시오. 라이브 감지를 중단하려면 图形를 닫으십시오.

h=数字(“单位”,“正常化”,“位置”,[0.20.1 0.6 0.8]);时限=20;tic句柄(h) && toc < timeLimit%从音频设备提取音频样本并将样本添加到%的缓冲。x = adr ();写(audioBuffer x);fs, y =阅读(audioBuffer fs-adr.SamplesPerFrame);规范= helperExtractAuditoryFeatures (y, fs);%对当前光谱图进行分类,将标签保存到标签缓冲区,%并将预测的概率保存到概率缓冲区。[YPredicted,聚合氯化铝]=分类(trainedNet,规范,“执行环境”,“cpu”);YBuffer=[YBuffer(2:end),yppredicted];probBuffer=[probBuffer(:,2:end),probs(:)];%绘制电流波形和谱图。次要情节(2,1,1)情节(y)轴ylim([-1,1])子批次(2,1,2)pcolor(spec')caxis([-4 2.6445])着色%现在通过执行一个非常简单的%的阈值操作。声明一个检测并将其显示在%数字标题,如果所有以下持有:1)最常见的标签%不是背景。2)至少countThreshold的最新帧%标签同意。3) 预测标签的最大概率为% probThreshold最少。否则,不要声明检测。[YMode,计数]=模式(YBuffer);maxProb = max(probBuffer(labels == YMode,:)); / /输出次要情节(2,1,1)如果伊莫德==“背景”|| count < count threshold || maxprobb < probThreshold title(”“)其他的标题(string (YMode),“字形大小”, 20)终止刷新屏幕终止

음성명령데이터세트불러오기

이예제에서는谷歌语音命令数据集[1]을사용합니다。데이터셋을다운로드하고다운로드한파일의압축을풉니다。PathToDatabase를데이터의위치로설정합니다。

url =“https://ssd.mathworks.com/万博1manbetxsupportfiles/audio/google_speech.zip”;downloadFolder = tempdir;dataFolder = fullfile (downloadFolder,“google_speech”);如果~存在(dataFolder“dir”)disp(“下载数据集(1.4 GB)……”解压缩(url, downloadFolder)终止

훈련데이터저장소만들기

훈련 데이터 세트를 가리키는音频数据存储(音频工具箱)를만듭니다。

广告= audioDatastore (fullfile (dataFolder,“火车”),...“IncludeSubfolders”,真的,...“FileExtensions”,“wav”,...“LabelSource”,“foldernames”)
ads = audioDatastore与属性:文件:{'…\AppData\Local\Temp\google_speech\train\bed\00176480_nohash_0.wav';’……\ AppData \当地\ Temp \床google_speech \培训\ \ 004 ae714_nohash_0.wav;’……\ AppData \当地\ Temp \床google_speech \培训\ \ 004 ae714_nohash_1.wav……{'C:\Users\jibrahim\AppData\Local\Temp\google_speech\train'}标签:[bed;床上;床上……alteratefilesystemroots: {} OutputDataType: 'double' SupportedOutputFormats: ["wav万博1manbetx" "flac" "ogg" "mp4" "m4a"] DefaultOutputFormat: "wav"

인식할단어선택하기

모델이 명령으로 인식해야 할 단어를 사용자가 지정해 줍니다. 명령이 아닌 단어는 모두未知的으로지정합니다。명령이아닌단어를未知的으로 지정하면 명령을 제외한 모든 단어의 분포에 근접한 단어 그룹이 만들어집니다. 신경망은 이 그룹을 사용하여 명령과 명령이 아닌 단어의 차이를 학습합니다.

알려진단어와알려지지않은단어사이의클래스불균형을줄이고처리속도를높이려면알려지지않은단어들의일부만훈련세트에포함하십시오。

子集(音频工具箱)을사용하여명령과알려지지않은단어의서브셋만포함하는데이터저장소를만듭니다。각범주에속하는표본의개수를셉니다。

命令=分类([“是的”,“不”,《飞屋环游记》,“向下”,“左”,“正确”,“上”,“关闭”,“停止”,“走”]);isCommand = ismember (ads.Labels、命令);isUnknown = ~ isCommand;includeFraction = 0.2;mask = rand(numel(ads.Labels),1) < includeFraction;isUnknown = isUnknown & mask;ads.Labels (isUnknown) =分类(“未知”);adsTrain =子集(广告,isCommand | isUnknown);countEachLabel (adsTrain)
ans = 11×2 table Label Count _______ _____ down 1842 go 1861 left 1839 no 1853 off 1839 on 1864 right 1852 stop 1885 unknown 6483 up 1843 yes 1860

검증데이터저장소만들기

검증 데이터 세트를 가리키는音频数据存储(音频工具箱)를만듭니다。훈련데이터저장소를만들때와동일한단계를따릅니다。

广告= audioDatastore (fullfile (dataFolder,“验证”),...“IncludeSubfolders”,真的,...“FileExtensions”,“wav”,...“LabelSource”,“foldernames”) isCommand = ismember(ads.Labels,commands);isUnknown = ~ isCommand;includeFraction = 0.2;mask = rand(numel(ads.Labels),1) < includeFraction;isUnknown = isUnknown & mask;ads.Labels (isUnknown) =分类(“未知”);adsValidation =子集(广告,isCommand | isUnknown);countEachLabel (adsValidation)
ads = audioDatastore的属性:Files:{'…\AppData\Local\Temp\google_speech\validation\bed\026290a7_nohash_0.wav';’……\ AppData \当地\ Temp \ google_speech \床验证\ \ 060 cd039_nohash_0.wav;’……\ AppData \当地\ Temp \ google_speech \床验证\ \ 060 cd039_nohash_1.wav……{'C:\Users\jibrahim\AppData\Local\Temp\google_speech\validation'}标签:[bed;床上;床上……和6795年更直言]AlternateFileSystemRoots: {} OutputDataType:“双”SupportedOutputFormats:[万博1manbetx“wav”“flac”“ogg”“mp4”“m4a格式”]DefaultOutputFormat:“wav”ans = 11×2表标签数  _______ _____ 264 260 247 270 256 257 256停止246未知850 260对261

전체데이터셋으로신경망을훈련시키고가능한가장높은정확도를얻으려면reduceDataset错误的로 설정하십시오. 이 예제를 빠르게 실행하려면reduceDataset真正的로설정하십시오。

reduceDataset = false;如果reduceDataset numiniqueLabels=numel(唯一(adsTrain.Labels));%将数据集缩减到原来的20倍adsTrain=splitEachLabel(adsTrain,round(numel(adsTrain.Files)/numUniqueLabels/20));adsvalization=splitEachLabel(adsvalization,round(numel(adsvalization.Files)/numUniqueLabels/20));终止

청각스펙트로그램계산하기

컨벌루션신경망의효율적인훈련을위해데이터를준비하려면음성파형을청각기반스펙트로그램으로변환하십시오。

특징추출의파라미터를정의합니다。分段持续时间은각음성클립의지속시간(단위:초)입니다。frameDuration은 스펙트럼 계산을 위한 각 프레임의 지속 시간입니다.hopDuration은 각 스펙트럼 사이의 시간 스텝입니다.numBands는청각스펙트로그램의필터개수입니다。

특징추출을수행할audioFeatureExtractor(音频工具箱)객체를 만듭니다.

fs = 16 e3;%数据集的已知抽样率。segmentDuration = 1;frameDuration = 0.025;hopDuration = 0.010;segmentSamples =圆(segmentDuration * fs);frameSamples =圆(frameDuration * fs);hopSamples =圆(hopDuration * fs);overlapSamples = framessamples - hopSamples;FFTLength = 512;numBands = 50;afe = audioFeatureExtractor (...“SampleRate”fs,...“FFTLength”FFTLength,...“窗口”,hann(框架样本,“周期性”),...“OverlapLength”overlapSamples,...“巴克光谱”,真正的);setExtractorParams (afe“巴克光谱”,“NumBands”numBands,“WindowNormalization”、假);

데이터셋에서파일을읽어들입니다。컨벌루션신경망을훈련시키려면입력값의크기가일정해야합니다。이데이터세트의일부파일은길이가1초보다짧습니다。길이가segmentSamples가되도록오디오신호의앞뒤에0채우기를적용합니다。

x =阅读(adsTrain);numSamples =大小(x, 1);numToPadFront = floor((segmentSamples - numSamples)/2);numToPadBack = cell ((segmentSamples - numSamples)/2);xPadded = 0 (numToPadFront 1“喜欢”, x); x; 0 (numToPadBack 1“喜欢”, x));

오디오특징을추출하려면提取를호출하십시오。출력값은각행을따라시간값이있는바크스펙트럼입니다。

特点=提取(afe xPadded);[numHops, numFeatures] =大小(特性)
numHops = 98 numFeatures = 50

이예제에서는로그를적용하여청각스펙트로그램을사후처리합니다。작은수의로그를구하면반올림오차가발생할수있습니다。

처리속도를높이려면帕弗를사용하여여러워커간에특징추출을분산할수있습니다。

먼저,데이터셋의파티션개수를결정합니다。并行计算工具箱™가설치되어있지않으면단일파티션을사용하십시오。

如果~z~我是空的(“平行”)) && ~reduceDataset pool = gcp;numPar = numpartitions (adsTrain、池);其他的numPar=1;终止

각파티션에대해,데이터저장소에서데이터를읽어들이고신호를0으로채운후특징을추출합니다。

帕弗ii = 1:numPar subds = partition(adsTrain,numPar,ii);XTrain = 0 (numHops numBands 1,元素个数(subds.Files));对于idx = 1:numel(subds. files) x = read(subds);xPadded =[0(地板(segmentSamples-size (x, 1)) / 2), 1); x; 0(装天花板((segmentSamples-size (x, 1)) / 2), 1)];XTrain (:,:,:, idx) =提取(afe xPadded);终止XTrainC {2} = XTrain;终止

출력값을4번째차원을따라청각스펙트로그램이있는4차원배열로변환합니다。

XTrain =猫(4,XTrainC {:});[numHops, numBands numChannels numSpec] =大小(XTrain)
numHops = 98 numBands = 50 numChannels = 1 numSpec = 25021

윈도우의거듭제곱으로특징을스케일링한후로그를구합니다。보다매끄러운분포를갖는데이터를얻으려면작은오프셋을사용하여스펙트로그램의로그를구하십시오。

epsil = 1 e-6;XTrain = log10(XTrain + epsil);

검증세트에대해위에서설명한특징추출단계를수행합니다。

如果~z~我是空的(“平行”) pool = gcp;numPar = numpartitions (adsValidation、池);其他的numPar=1;终止帕弗ii=1:numPar subds=partition(adsvalization,numPar,ii);XValidation=zero(numHops,numBands,1,numel(subds.Files));对于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);终止XValidationC {2} = XValidation;终止XValidation =猫(4,XValidationC {:});XValidation = log10(XValidation + epsil);

훈련레이블과검증레이블을분리합니다。비어있는범주를제거합니다。

YTrain=removecats(adsTrain.Labels);YValidation=removecats(adsValidation.Labels);

데이터시각화하기

몇몇훈련샘플의파형과청각스펙트로그램을플로팅합니다。대응하는오디오클립을재생합니다。

specMin=min(XTrain,[],“全部”);specMax=max(XTrain,[],“全部”);idx=randperm(numel(adsTrain.Files),3);图(“单位”,“正常化”,“位置”,[0.2 0.2 0.6 0.6]);对于i = 1:3 [x,fs] = audioread(adsTrain.Files{idx(i)});次要情节(2、3、i)情节(x)轴标题(字符串(adsTrain.Labels(idx(i)))子批次(2,3,i+3)spect=(XTrain(:,:,1,idx(i)));pcolor(spect)caxis([specMin specMax])着色声音(x,fs)暂停(2)终止

배경잡음데이터추가하기

신경망은발화된다양한단어를인식할수있어야할뿐아니라입력값에무음이포함되어있는지배경잡음이포함되어있는지감지할수도있어야합니다。

_background_ 폴더에 있는 오디오 파일을 사용하여 1.초 길이의 배경 잡음 샘플 클립을 만듭니다. 각 배경 잡음 파일로부터 동일한 개수의 배경 클립을 만듭니다. 배경 잡음을 직접 녹음한 다음_background_폴더에추가해도됩니다。이함수는스펙트로그램을계산하기전에먼저volumeRange로지정된범위에있는로그균등분포에서샘플링한인자로각오디오클립을다시스케일링합니다。

adsBkg = audioDatastore (fullfile (dataFolder“背景”) numBkgClips = 4000;如果reduceDataset numBkgClips = numBkgClips/20;终止volumeRange=log10([1e-4,1]);numBkgFiles=nummel(adsBkg.Files);numClipsPerFile=histcounts(1:numBkgClips,linspace(1,numBkgClips,numBkgFiles+1));Xbkg=0(大小(XTrain,1),大小(XTrain,2),1,numBkgClips,“单一”)bkgAll=readall(adsBkg);ind=1;对于计数= 1:numBkgFiles bkg = bkgAll{count};idxStart =兰迪(元素个数(bkg) - f, numClipsPerFile(计数),1);idxEnd = idxStart + fs-1;^((volumeRange(2)-volumeRange(1)))*rand(numClipsPerFile(count),1) + volumeRange(1));对于j = 1:numClipsPerFile(count) x = bkg(idxStart(j):idxEnd(j)))*gain(j); / /统计x = max (min (x, 1), 1);Xbkg(:,:,:,印第安纳州)=提取(afe x);如果国防部(印第安纳州,1000)= = 0 disp (“加工”+字符串(ind)+“背景剪辑退出”+字符串(numBkgClips))终止Ind = Ind + 1;终止终止Xbkg = log10(Xbkg + epsil);
adsBkg = audioDatastore与属性:文件:{'…\AppData\Local\Temp\google_speech\background\doing_the_dish .wav';“…\ AppData \当地背景\ Temp \ google_speech \ \ dude_miaowing.wav;“…\ AppData \当地背景\ Temp \ google_speech \ \ exercise_bike.wav……{'C:\Users\jibrahim\AppData\Local\Temp\google_speech\background'} AlternateFileSystemRoots: {} OutputDataType: 'double'标签:{}SupportedOutputFormats: ["wav" 万博1manbetx"flac" "ogg" "mp4" "m4a"] DefaultOutputFormat:“wav”从4000个背景剪辑中处理了1000个,从4000个背景剪辑中处理了2000个,从4000个背景剪辑中处理了3000个,从4000个背景剪辑中处理了4000个

배경잡음의스펙트로그램을훈련세트,검증세트,테스트세트로분할합니다。_background_noise_폴더에는약5분30초분량의배경잡음만포함되어있으므로서로다른데이터세트의배경샘플은밀접한상관관계를갖습니다。배경잡음의변형을늘리기위해직접배경파일을만들어폴더에추가할수있습니다。잡음에대한신경망의견고성을높이기위해음성파일에배경잡음을섞어볼수도있습니다。

numTrainBkg =地板(0.85 * numBkgClips);numValidationBkg =地板(0.15 * numBkgClips);XTrain(:,:,: + 1:终端+ numTrainBkg) = Xbkg (:,:,:, 1: numTrainBkg);YTrain(+ 1:结束+ numTrainBkg) =“背景”;XValidation(:,:,: + 1:终端+ numValidationBkg) = Xbkg (:,:,:, numTrainBkg + 1:结束);YValidation(+ 1:结束+ numValidationBkg) =“背景”

훈련 세트와 검증 세트에서 다양한 클래스 레이블의 분포를 플로팅합니다.

身材(“单位”,“正常化”,“位置”,[0.2 0.2 0.5 0.5]) subplot(2,1,1) histogram(YTrain) title(“培训标签分配”)子图(2,1,2)直方图(YValidation)标题(“验证标签分配”)

신경망 아키텍처 정의하기

간단한신경망아키텍처를계층배열로만듭니다。컨벌루션계층과배치정규화계층을사용하고,최댓값풀링계층을사용하여특징맵을”공간적으로”(즉,시간과주파수에서)다운샘플링합니다。시간의흐름에따라입력특징맵을전역적으로풀링하는마지막최댓값풀링계층을추가합니다。이렇게하면입력스펙트로그램에서(근사적인)시간이동불변성이적용되어음성의정확한시간적위치에상관없이신경망이동일한분류를수행할수있게됩니다。전역적풀링은마지막완전연결계층에서파라미터의개수를대폭줄여주기도합니다。신경망이훈련데이터의구체적인특징을기억할가능성을줄이려면입력값의마지막완전연결계층에소량의드롭아웃을추가하십시오。

신경망은몇개의필터만있는컨벌루션계층5개만포함하므로크기가작습니다。numF는 컨벌루션 계층의 필터 개수를 제어합니다. 신경망의 정확도를 높이려면 컨벌루션 계층, 배치 정규화 계층, 雷卢계층으로 구성된 동일한 블록들을 추가하여 신경망의 심도를 높여보십시오.numF를높여컨벌루션필터의개수를늘려볼수도있습니다。

가중 교차 엔트로피 분류 손실을 사용합니다.weightedClassificationLayer (classWeights)classWeights에 의해 가중치가 적용된 관측값으로 교차 엔트로피 손실을 계산하는 사용자 지정 분류 계층을 만듭니다.类别(YTrain)에 나타나는 클래스 순서대로 클래스 가중치를 지정합니다. 각 클래스에 손실의 총 가중치를 동일하게 주려면 각 클래스의 훈련 표본의 개수에 반비례하는 클래스 가중치를 사용하십시오. 亚当최적화 함수를 사용하여 신경망을 훈련시키는 경우에는 훈련 알고리즘이 클래스 가중치의 전체 정규화에 대해 독립적입니다.

classWeights = 1. / countcats (YTrain);classWeights = classWeights ' /意味着(classWeights);numClasses =元素个数(类别(YTrain));timePoolSize =装天花板(numHops / 8);dropoutProb = 0.2;numF = 12;[imageInputLayer([numHops numBands]))卷积2dlayer (3,numF,“填充”,“相同”)batchNormalizationLayer reluLayer MaxPoolig2dLayer(3,“大步走”2,“填充”,“相同”)卷积2层(3,2*numF,“填充”,“相同”)batchNormalizationLayer reluLayer MaxPoolig2dLayer(3,“大步走”2,“填充”,“相同”) convolution2dLayer(3、4 * numF,“填充”,“相同”)batchNormalizationLayer reluLayer MaxPoolig2dLayer(3,“大步走”2,“填充”,“相同”) convolution2dLayer(3、4 * numF,“填充”,“相同”)batchNormalizationLayer reluLayer卷积2Dlayer(3,4*numF,“填充”,“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer([timePoolSize,1]) dropoutLayer(dropoutProb) fulllyconnectedlayer (numClasses) softmaxLayer weightedClassificationLayer(classWeights)];

신경망훈련시키기

훈련옵션을지정합니다。미니배치크기인가128年亚当최적화함수를사용합니다。时代25회에대해훈련시키고,时代20회가지나면학습률10배을만큼줄입니다。

miniBatchSize = 128;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“亚当”,...“初始学习率”,3e-4,...“MaxEpochs”25岁的...“MiniBatchSize”miniBatchSize,...“洗牌”,“every-epoch”,...“情节”,“训练进步”,...“详细”假的,...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”validationFrequency,...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”,0.1,...“LearnRateDropPeriod”,20);

신경망을훈련시킵니다。GPU가없으면,신경망훈련에시간이걸릴수있습니다。

trainedNet = trainNetwork (XTrain、YTrain层,选择);

훈련된신경망평가하기

(데이터증대가적용되지않은)훈련세트와검증세트에대해신경망의최종정확도를계산합니다。신경망은이데이터세트에서매우정확한결과를나타냅니다。그러나훈련데이터,검증데이터,테스트데이터는모두실제환경을그대로반영한다고보기어려운비슷한분포를갖고있습니다。이러한한계는특히적은개수의발화된단어를포함하는未知的범주에서두드러지게나타납니다。

如果减载(“commandNet.mat”,“trainedNet”);终止YValPred=分类(trainedNet,XValidation);validationError=平均值(YValPred~=YValidation);YTrainPred=分类(trainedNet,XTrain);trainError=平均值(YTrainPred~=YTrain);disp(“训练误差:+ trainError * 100 +"%")disp(“验证错误:”+ validationError * 100 +"%")
培训误差:1.907%验证误差:5.5376%

정오분류표를 플로팅합니다. 열 및 행 요약을 사용하여 각 클래스의 정밀도를 표시하고 다시 호출합니다. 정오분류표의 클래스를 정렬합니다. 알려지지 않은 단어와 명령인向上,向下没有,没有사이에서가장큰오분류가발생합니다。

身材(“单位”,“正常化”,“位置”,[0.20.20.50.5]);厘米=混淆图(YValidation,YValPred);厘米标题=“验证数据的混淆矩阵”;厘米。ColumnSummary =“列规格化”;cm.概述=“row-normalized”; SortClass(cm,[命令,“未知”,“背景”])

모바일응용프로그램과같이하드웨어리소스제약이있는응용프로그램에서작업할때는가용메모리와연산리소스에대한제한을고려해야합니다。신경망의총크기를kB단위로계산하고,CPU를사용할때의예측속도를테스트합니다。예측시간은단일입력영상을분류하는시간입니다。신경망에여러개의영상을입력하는경우,복수의영상이동시에분류될수있고,그결과영상당예측시간이단축됩니다。그러나스트리밍오디오를분류할때는단일영상예측시간이가장중요합니다。

信息=谁(“trainedNet”);disp (“网络大小:”+信息。字节/ 1024 +“kB”)对于i = 1:100 x = randn([numHops,numBands]);tic [YPredicted,probs] = classification(训练网,x,“执行环境”,“cpu”);时间(i)=总有机碳;终止disp (CPU上单图像预测时间:+的意思是(时间(11:结束))* 1000 +“女士”)
网络大小:286.7402 kB CPU上的单映像预测时间:2.5119毫秒

참고문헌

[1]监狱长P。“语音指令:单字语音识别的公共数据集”,2017。可以从https://storage.googleapis.com/download.tensorflow.org/data/speech_commands_v0.01.tar.gz.版权2017年谷歌。Speech Commands Dataset是在Creative Commons Attribution 4.0许可下使用的,可以在这里获得:https://creativecommons.org/licenses/by/4.0/legalcode

참고문헌

[1]监狱长P。“语音指令:单字语音识别的公共数据集”,2017。可以从http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz.版权2017年谷歌。Speech Commands Dataset是在Creative Commons Attribution 4.0许可下使用的,可以在这里获得:https://creativecommons.org/licenses/by/4.0/legalcode

참고항목

||

관련항목