主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

深層学習を使用した音声コマンド認識

この例では,オーディオに存在する音声コマンドを検出する深層学習モデルに学習させる方法を説明します。この例では,音声コマンドデータセット[1]を使用して,与えられた一連のコマンドを認識する畳み込みニューラルネットワークに学習させます。

ネットワークにゼロから学習させるには,最初にデータセットをダウンロードしなければなりません。データセットのダウンロードやネットワークの学習を行わない場合は,この例にある学習済みのネットワークを読み込んで,以下の2節“事前学習済みネットワークによるコマンド認識”と“マイクからのストリーミングオーディオを使用したコマンド検出“を実行することができます。

事前学習済みネットワークによるコマンド認識

学習プロセスの詳細について説明する前に,事前学習済みの音声認識ネットワークを使用して音声コマンドを識別します。

事前学習済みのネットワークを読み込みます。

负载(“commandNet.mat”

ネットワークは次の音声コマンドを認識するように学習済みです。

  • “はい”

  • “いいえ”

  • "上"

  • "下"

  • "左"

  • "右"

  • “オン”

  • “オフ”

  • "停止"

  • "移動"

人が“停止”と発声している短い音声信号を読み込みます。

[x, fs] = audioread (“stop_command.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 = pinknoise (16 e3);

聴覚スペクトログラムを計算します。

auditorySpect = helperExtractAuditoryFeatures (x, fs);

バックグラウンドノイズを分類します。

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

マイクからのストリーミングオーディオを使用したコマンドの検出

事前学習済みのコマンド検出ネットワークをマイクからのストリーミングオーディオでテストします。是的没有停止など,いずれかのコマンドを発声してみてください。さらに,马文希拉床上房子などの未知の単語や,0から9までの数のいずれかを発声してみてください。

分類レートを赫兹単位で指定し,マイクからオーディオを読み取ることができるオーディオデバイスリーダーを作成します。

classificationRate = 20;adr = audioDeviceReader (“SampleRate”fs,“SamplesPerFrame”、地板(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.2 0.1 0.6 0.8]);期限= 20;抽搐句柄(h) && toc < timeLimit%从音频设备中提取音频样本并将样本添加到%的缓冲。x = adr ();写(audioBuffer x);fs, y =阅读(audioBuffer fs-adr.SamplesPerFrame);规范= helperExtractAuditoryFeatures (y, fs);%对当前光谱图进行分类,将标签保存到标签缓冲区,%并将预测的概率保存到概率缓冲区。[YPredicted,聚合氯化铝]=分类(trainedNet,规范,“ExecutionEnvironment”“cpu”);YBuffer = [YBuffer(2:结束),YPredicted);probBuffer = [probBuffer(:, 2:结束)、聚合氯化铝(:));%绘制电流波形和谱图。次要情节(2,1,1)情节(y)轴Ylim ([-1,1]) subplot(2,1,2) pcolor(spec') caxis([-4 2.6445])底纹现在通过执行一个非常简单的命令来进行实际的命令检测%的阈值操作。声明一个检测并将其显示在%数字标题,如果所有以下持有:1)最常见的标签%不是背景。2)至少countThreshold的最新帧%标签一致。3)预测标签的最大概率为at% probThreshold最少。否则,不要声明检测。[YMode,计数]=模式(YBuffer);maxProb = max(probBuffer(labels == YMode,:)); / /输出次要情节(2,1,1)如果YMode = =“背景”|| count < count threshold || maxprobb < probThreshold title(”“其他的标题(string (YMode),“字形大小”, 20)结束drawnow结束

音声コマンドデータセットの読み込み

この例では,谷歌语音命令データセット[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(音频工具箱)を作成します。

广告= 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(音频工具箱)を作成します。学習データストアの作成に用いたのと同じ手順に従います。

广告= 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 numUniqueLabels = nummel (unique(adsTrain.Labels));%将数据集缩减到原来的20倍adsTrain = splitEachLabel(adsTrain,round(numel(adsTrain. files) / numUniqueLabels / 20));adsValidation = splitEachLabel(adsValidation,round(numel(adsValidation. files) / numUniqueLabels / 20));结束

聴覚スペクトログラムの計算

畳み込みニューラルネットワークの学習を効果的に行うためにデータを準備するには,音声波形を聴覚ベースのスペクトログラムに変換します。

特徴抽出のパラメーターを定義します。segmentDurationは各音声クリップの長さ(秒)です。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,...“窗口”损害(frameSamples“周期”),...“OverlapLength”overlapSamples,...“barkSpectrum”,真正的);setExtractorParams (afe“barkSpectrum”“NumBands”numBands,“WindowNormalization”、假);

データセットからファイルを読み取ります。畳み込みニューラルネットワークに学習させるには,入力が一定サイズでなければなりません。データセットの一部のファイルは長さが1秒未満です。ゼロパディングをオーディオ信号の前後に適用して長さをsegmentSamplesにします。

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

この例では,聴覚スペクトログラムに対数を適用して後処理します。小さい数字の対数を取ると,丸め誤差の原因になります。

処理を高速化するために,parforを使用して複数のワーカーに特徴抽出を分散できます。

最初に,データセットの区画数を決定します。并行计算工具箱™がない場合は,単一の区画を使用します。

如果~ isempty(版本(“平行”)) && ~reduceDataset pool = gcp;numPar = numpartitions (adsTrain、池);其他的numPar = 1;结束

各区画について,データストアから読み取り,信号をゼロパディングしてから,特徴を抽出します。

parforii = 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);

検証セットに対して,上記で説明した特徴抽出の手順を実行します。

如果~ isempty(版本(“平行”) pool = gcp;numPar = numpartitions (adsValidation、池);其他的numPar = 1;结束parforii = 1:numPar subds = partition(adsValidation,numPar,ii);XValidation = 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)];XValidation (:,:,:, idx) =提取(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(元素个数(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)轴标题(string (adsTrain.Labels (idx (i))))次要情节(2 3 i + 3) spect = (XTrain (:,: 1, idx(我)');cxis ([specMin specMax])阴影声音(x, fs)暂停(2)结束

バックグラウンドノイズデータの追加

このネットワークは,発声されたさまざまな単語を認識できるだけでなく,入力に無音部分またはバックグラウンドノイズが含まれているかどうかを検出できなければなりません。

_background_フォルダーのオーディオファイルを使用して,バックグラウンドノイズの1秒間のクリップのサンプルを作成します。各バックグラウンドノイズファイルから同じ数のバックグラウンドクリップを作成します。また,バックグラウンドノイズの録音を独自に作成して,_background_フォルダーに追加することもできます。スペクトログラムを計算する前に,この関数は,対数一様分布からサンプリングされた係数を使用して,volumeRangeで与えられた範囲に各オーディオクリップを再スケーリングします。

adsBkg = audioDatastore (fullfile (dataFolder“背景”) numBkgClips = 4000;如果reduceDataset numBkgClips = numBkgClips/20;结束volumeRange = log10([1的军医,1]);numBkgFiles =元素个数(adsBkg.Files);numClipsPerFile = histcounts (1: numBkgClips, linspace (1 numBkgClips numBkgFiles + 1);Xbkg = 0(大小(XTrain, 1),大小(XTrain, 2), 1, numBkgClips,“单一”);bkgAll = readall (adsBkg);印第安纳州= 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 (“加工”(印第安纳州)+ +字符串“背景剪辑退出”+字符串(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分半のバックグラウンドノイズのみが含まれているため,異なるデータセットのバックグラウンドサンプルには高い相関があります。バックグラウンドノイズのバリエーションを増やすために,独自のバックグラウンドファイルを作成して,このフォルダーに追加できます。ノイズに対するネットワークのロバスト性を向上させるために,バックグラウンドノイズを音声ファイルにミキシングしてみることもできます。

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によって畳み込み層のフィルターの数を制御します。ネットワークの精度を高めるために,畳み込み層,バッチ正規化層,およびReLU層の同等なブロックを追加して,ネットワーク深さを大きくすることを試してください。numFを増やして,畳み込みフィルターの数を増やしてみることもできます。

重み付き交差エントロピー分類損失を使用します。weightedClassificationLayer (classWeights)は,classWeightsによって重み付けされた観測値を使用して交差エントロピー損失を計算するカスタム分類層を作成します。类别(YTrain)に現れるクラスと同じ順序でクラスの重みを指定します。各クラスの損失の合計重みを等しくするために,各クラスの学習例の数に反比例するクラスの重みを使用します。ネットワークの学習に Adam オプティマイザーを使用する場合、学習アルゴリズムはクラスの重み全体の正規化に依存しません。

classWeights = 1. / countcats (YTrain);classWeights = classWeights ' /意味着(classWeights);numClasses =元素个数(类别(YTrain));timePoolSize =装天花板(numHops / 8);dropoutProb = 0.2;numF = 12;[imageInputLayer([numHops numBands]))卷积2dlayer (3,numF,“填充”“相同”maxPooling2dLayer(3,“步”2,“填充”“相同”) convolution2dLayer (3 2 * numF“填充”“相同”maxPooling2dLayer(3,“步”2,“填充”“相同”) convolution2dLayer(3、4 * numF,“填充”“相同”maxPooling2dLayer(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分の1に下げます。

miniBatchSize = 128;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“亚当”...“InitialLearnRate”3的军医,...“MaxEpochs”25岁的...“MiniBatchSize”miniBatchSize,...“洗牌”“every-epoch”...“阴谋”“训练进步”...“详细”假的,...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”validationFrequency,...“LearnRateSchedule”“分段”...“LearnRateDropFactor”, 0.1,...“LearnRateDropPeriod”, 20);

ネットワークに学習をさせます。GPUがない場合,ネットワークの学習に時間がかかる場合があります。

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

学習済みネットワークの評価

学習セット(データ拡張なし)と検証セットに対するネットワークの最終精度を計算します。このデータセットではネットワークは非常に正確になります。ただし,学習データ,検証データ,およびテストデータの分布はどれも似ていて,必ずしも実際の環境を反映していません。この制限は特に未知的カテゴリに当てはまります。このカテゴリには,少数の単語の発話しか含まれていません。

如果reduceDataset负载(“commandNet.mat”“trainedNet”);结束YValPred =分类(trainedNet XValidation);validationError = mean(YValPred ~= YValidation);YTrainPred =分类(trainedNet XTrain);= mean(YTrainPred ~= YTrain);disp (“训练误差:+ trainError * 100 +“%”) disp ("验证错误:"+ validationError * 100 +“%”
培训误差:1.907%验证误差:5.5376%

混同行列をプロットします。列と行の要約を使用して,各クラスの適合率と再現率を表示します。混同行列のクラスを並べ替えます。大きな認識の違いが現れるのは,未知の単語間,コマンド向上下来没有,および没有の間にあります。

图(“单位”“归一化”“位置”,[0.2 0.2 0.5 0.5]);厘米= confusionchart (YValidation YValPred);厘米。Title =“验证数据的混淆矩阵”;厘米。ColumnSummary =“column-normalized”;厘米。RowSummary =“row-normalized”;sortClasses(厘米,[命令,“未知”“背景”])

モバイル用途など,ハードウェアリソースに制約がある用途で使用する場合は,利用可能なメモリおよび計算リソースの制限を考慮します。CPUを使用する場合は,ネットワークの合計サイズをKB単位で計算し,その予測速度をテストします。予測時間は1つの入力イメージの分類にかかる時間です。複数のイメージをネットワークに入力する場合,これらを同時に分類して,イメージあたりの予測時間を短くすることができます。ストリーミングオーディオを分類する場合,1つのイメージの予測時間が最も重要です。

信息=谁(“trainedNet”);disp (“网络大小:”+信息。字节/ 1024 +“知识库”i = 1:100 x = randn([numHops,numBands]);tic [YPredicted,probs] = classification(训练网,x,“ExecutionEnvironment”“cpu”);时间(i) = toc;结束disp (CPU上单图像预测时间:+的意思是(时间(11:结束))* 1000 +“女士”
网络大小:286.7402 kB CPU上的单张图像预测时间:2.5119 ms

参考文献

[1]监狱长P。“语音指令:单字语音识别的公共数据集”,2017。可以从https://storage.googleapis.com/download.tensorflow.org/data/speech_commands_v0.01.tar.gz.版权2017年谷歌。语音命令集は,次で公開されている创作共用署名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

参考

||

関連するトピック