主要内容

ウェ,ブレット解析と深層学習を使用した時系列の分類

この例では,連続ウェーブレット変換(CWT)と深層畳み込みニューラルネットワーク(CNN)を使用した人間の心電図(ECG)信号を分類する方法を説明します。

深層CNNをゼロから学習させるには,大量の計算と大量の学習デ,タが必要です。さまざまなアプリケーションでは,十分な量の学習データが利用可能ではなく,新しい現実的な学習の例の合成は不可能です。これらの場合,概念的に類似したタスクについて大規模なデータセットで学習させている既存のニューラルネットワークを利用することが望まれます。既存のニュ,ラルネットワ,クの利用は転移学習と呼ばれます。この例では,イメージ認識用に事前学習済みの,2つの深層CNN, GoogLeNetおよびSqueezeNetを適応させて,時間——周波数表現を基にした心电图波形を分類します。

1000年GoogLeNetとSqueezeNetはカテゴリにイメージを分類するために最初に設計された深層CNNです。時系列データのCWTからのイメージを基にした心电图信号を分類するためにCNNのネットワークアーキテクチャを再利用します。この例で使用されているデ,タは,生理网から公的に入手可能です。

デ,タの説明

この例では,人の3のグルプから取得されたecgデタを使用します。3つのグループとは,心不整脈の患者(ARR)鬱血性心不全の患者(瑞士法郎),および正常洞調律の患者(NSR)です。全体では,次の3つの生理网データベースから162個の心电图記録を使用します。MIT-BIH心律失常数据库[3][7]、MIT-BIH正常窦性心律数据库[3]、充血性心力衰竭数据库[1][3]。具体的には,不整脈の患者の記録は96個鬱血性心不全の患者の記録は30個正常洞調律の患者の記録は36個あります。目標は,arr, chf,およびNSR間で分類器を学習させて区別することです。

デ,タのダウンロ,ド

1番目のステップは,GitHubリポジトリからデ,タをダウンロ,ドすることです。デ.タをWebサ.トからダウンロ.ドするには,[代码]をクリックして[下载ZIP]を選択します。書き込み権限のあるフォルダに,ファルphysionet_ECG_data-main.zipを保存します。この例の手順では,ファ恭顺器ルを一時ディレクトリ(matlabのtempdir)にダウンロ,ドしているものと仮定します。tempdirとは異なるフォルダーにデータをダウンロードすることを選択した場合は,データの解凍および読み込みに関する後続の手順を変更してください。

デタをGitHubからダウンロドした後,一時ディレクトリでそのファルを解凍します。

解压缩(fullfile (tempdir,“physionet_ECG_data-main.zip”), tempdir)

解凍すると,一時ディレクトリにフォルダphysionet-ECG_data-mainが作成されます。このフォルダには,テキストファルREADME.mdECGData.zipが含まれます。ECGData.zipファ@ @ルには次のものが含まれています。

  • ECGData.mat

  • Modified_physionet_data.txt

  • License.txt

ECGData.matは,この例で使用されるデ,タを保持します。テキストファ@ @ルのModified_physionet_data.txt生理网はのコピーポリシーで必要になり,データのソース属性,および心电图の各記録に適用される前処理手順の説明を提供します。

physionet-ECG_data-mainECGData.zipを解凍します。デタファルをmatlabワクスペスに読み込みます。

解压缩(fullfile (tempdir,“physionet_ECG_data-main”“ECGData.zip”),...fullfile (tempdir“physionet_ECG_data-main”)加载(fullfile (tempdir“physionet_ECG_data-main”“ECGData.mat”))

ECGDataは,2 (数据および标签)をも構造体配列です。数据フィールドは162行65536列の行列で,各行は128 Hzでサンプリングした心电图記録です。标签は162行1列の診断ラベルのcell配列で,それぞれが数据の各行に対応します。3 .の診断カテゴリは,“加勒比海盗”瑞士法郎的,および“签约”です。

各カテゴリの前処理したデ,タを保存するには,最初にtempdir内にecgデ,タディレクトリdataDirを作成します。その後,各ecgカテゴリに由来した“数据”に3のサブディレクトリを作成します。補助関数helperCreateECGDirectoriesがこれを実行します。helperCreateECGDirectoriesは,ECGData, ecgデ,タディレクトリの名前,親ディレクトリの名前を入力引数として受け入れます。tempdirを書き込み権限のある別のディレクトリと置き換えることができます。この補助関数のソスコドは,この例の最後にある“サポト関数”の節で見けることができます。

parentDir = tempdir;dataDir =“数据”;helperCreateECGDirectories (ECGData parentDir dataDir)

各ecgカテゴリの表現をプロットします。補助関数helperPlotRepsがこれを実行します。helperPlotRepsECGDataを入力として受け入れます。この補助関数のソスコドは,この例の最後にある“サポト関数”の節で見けることができます。

helperPlotReps (ECGData)

時間-周波数表現の作成

フォルダ,作成後,ecg信号の時間-周波数表現を作成します。これらの表現はスカログラムと呼ばれます。スカログラムは,信号のCWT係数の絶対値です。

スカログラムを作成するには,cwtフィルタ,バンクを事前に計算します。CWTフィルターバンクの事前計算は,同じパラメーターを使用して多数の信号のCWTを取得するときの推奨方法です。

スカログラムを生成する前に,そのうの1を調べます。1000サンプルをも信号にcwtfilterbankを使用してCWTフィルタ,バンクを作成します。フィルターバンクを使用して,信号の最初の1000サンプルのCWTを取って,係数からスカログラムを取得します。

Fs = 128;Fb = cwtfilterbank(“SignalLength”, 1000,...“SamplingFrequency”Fs,...“VoicesPerOctave”12);sig = ECGData.Data(1,1:1000);[cfs,frq] = wt(fb,sig);t = (0:999)/Fs;figure;pcolor(t,frq,abs(cfs)) set(gca,“yscale”“日志”);阴影插值函数;轴;标题(量图的),包含(“时间(s)”); ylabel (的频率(赫兹)

補助関数helperCreateRGBfromTFを使用して,スカログラムをRGBメジとして作成し,それらをdataDirの適切なサブディレクトリに書き込みます。この補助関数のソ,スコ,ドは,この例の最後にある“サポ,ト関数”の節にあります。GoogLeNetアーキテクチャと互換性をもたせるために、各 RGB イメージは 224 x 224 x 3 のサイズの配列になります。

helperCreateRGBfromTF (ECGData parentDir dataDir)

学習デ,タと検証デ,タへの分割

スカログラム▪▪メ▪ジを▪▪メ▪ジデ▪タストアとして読み込みます。関数imageDatastoreは,フォルダー名に基づいてイメージに自動的にラベルを付け,データをImageDatastoreオブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータなどの大きなイメージデータを格納し,CNNの学習中にイメージをバッチ単位で効率的に読み取ることができます。

allImages = imageDatastore(fullfile(parentDir,dataDir),...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

イメージを2つのグループ(学習用と検証用)にランダムに分割します。。再現性を得るために,乱数シ,ドを既定値に設定します。

rng默认的[imgsTrain,imgsValidation] = splitEachLabel(allImages,0.8,“随机”);disp (['训练图像数量:'num2str(元素个数(imgsTrain.Files))));
训练图像数量:130张
disp ([验证图像的数量:num2str(元素个数(imgsValidation.Files))));
验证图像数量:32

GoogLeNet

読み込み

事前学習済みのGoogLeNetニュ,ラルネットワ,クを読み込みます。深度学习工具箱™模型为GoogLeNet网络サポートパッケージがインストールされていない場合,ソフトウェアによってアドオンエクスプローラーに必要なサポートパッケージへのリンクが表示されます。サポトパッケジをンストルするには,リンクをクリックして,[huawei @ huawei @ huawei @ huawei @ huawei @ huawei]をクリックします。

Net = googlenet;

ネットワ,クから層グラフを抽出して表示します。

lgraph = layerGraph(net);numberOfLayers = number (lgraph.Layers);图(“单位”“归一化”“位置”,[0.1 0.1 0.8 0.8]);情节(lgraph)标题(“GoogLeNet层图:”num2str (numberOfLayers),“层”]);

ネットワク層プロパティの1番目の要素を検査します。GoogLeNetにはサイズ 224 x 224 x 3 の RGB イメージが必要であることを確認します。

net.Layers (1)
ans = ImageInputLayer with properties: Name: 'data' InputSize:[224 224 3]超参数DataAugmentation: 'none'归一化:'zerocenter' Mean: [224×224×3 single]

GoogLeNetネットワ,クパラメ,タ,の変更

ネットワ,クア,キテクチャの各層はフィルタ,と見なすことができます。初期の層は,ブロブ,エッジ,および色など,より一般的な。後続の層は,カテゴリを区別するためにより具体的な特徴に焦点を当てます。GoogLeNetは事前学習済みで、イメージを 1000 個のオブジェクト カテゴリに分類できます。GoogLeNet を、ECG 分類問題用に再学習させなければなりません。

過適合を防止するには,ドロップアウト層を使用します。ドロップアウト層は,与えられた確率でランダムに,入力要素をゼロに設定します。詳細にいては,dropoutLayer(深度学习工具箱)を参照してください。既定の確率は0.5です。ネットワ,ク内の最後のドロップアウト層“pool5-drop_7x7_s1”を,確率0.6のドロップアウト層に置き換えます。

newDropoutLayer = dropoutLayer(0.6,“名字”“new_Dropout”);lgraph =替换层(lgraph,“pool5-drop_7x7_s1”, newDropoutLayer);

ネットワークの畳み込み層は,入力イメージを分類するために,最後の学習可能な層と最終分類層が使用するイメージの特徴を抽出します。GoogLeNetのこれらの2の層“loss3-classifier”および“输出”は,ネットワークによって抽出された特徴を組み合わせてクラス確率,損失値,および予測ラベルにまとめる方法に関する情報を含んでいます。RGBイメージを分類するためにGoogLeNetを再学習させるには,これら2つの層をデータに適応させた新しい層に置き換えます。

全結合層“loss3-classifier”を,クラスの数と同じ数のフィルタ,を持,新しい全結合層に置き換えます。新しい層での学習速度を転移された層より速くするには,全結合層の学習率係数を大きくします。

numClasses = numel(categories(imgsTrain.Labels));newConnectedLayer = fullyConnectedLayer“名字”“new_fc”...“WeightLearnRateFactor”5,“BiasLearnRateFactor”5);lgraph =替换层(lgraph,“loss3-classifier”, newConnectedLayer);

分類層はネットワ,クの出力クラスを指定します。分類層をクラスラベルがない新しい分類層に置き換えます。trainNetworkは,学習時に層の出力クラスを自動的に設定します。

newClassLayer = classificationLayer(“名字”“new_classoutput”);lgraph =替换层(lgraph,“输出”, newClassLayer);

学習オプションの設定およびGoogLeNetの学習

ニュ,ラルネットワ,クの学習は,損失関数の最小化を含む反復プロセスです。損失関数を最小化するには,勾配降下アルゴリズムが使用されます。各反復では,損失関数の勾配が評価されて,降下アルゴリズムの重みが更新されます。

学習はさまざまなオプションを設定することによって調整できます。InitialLearnRateは損失関数の負の勾配方向の初期ステップサ@ @ズを指定します。MiniBatchSizeは各反復で使用するために学習セットのサブセットの大きさを指定します。1エポックは,学習セット全体に対する学習アルゴリズムを一巡することです。MaxEpochsは学習に使用するエポックの最大回数を指定します。エポックの正しい数の選択は自明のタスクではありません。エポックの数が減少するとモデルが適合不足になります。エポックの数が増加すると過適合になります。

関数trainingOptions(深度学习工具箱)を使用して学習オプションを指定します。MiniBatchSizeを10,MaxEpochsを10,InitialLearnRateを0.0001に設定します。情节训练进步に設定して,学習の進行状況を可視化します。モメンタム項付き確率的勾配降下法オプティマザを使用します。既定では,gpuが利用可能な場合,学習はgpuで行われます。GPUを使用するには并行计算工具箱™が必要です。サポトされているgpuにいては,リリス別のgpuサポト(并行计算工具箱)を参照してください。再現性を得るために,ExecutionEnvironmentcpuに設定して,trainNetworkがCPUを使用するようにします。乱数シ,ドを既定値に設定します。Gpuを使用できる場合,実行時間は速くなります。

选项= trainingOptions(“个”...“MiniBatchSize”15岁的...“MaxEpochs”, 20岁,...“InitialLearnRate”1的军医,...“ValidationData”imgsValidation,...“ValidationFrequency”10...“详细”, 1...“ExecutionEnvironment”“cpu”...“阴谋”“训练进步”);rng默认的

ネットワ,クに学習をさせます。学習プロセスは,通常,デスクトップCPU上で1 ~ 5分かかります。実行中にコマンドウィンドウに学習情報を表示します。結果には,エポック数,反復回数,経過時間,ミニバッチの精度,検証の精度,検証データの損失関数値が含まれます。

trainedGN = trainNetwork(imgsTrain,lgraph,options);

初始化输入数据规范化。|======================================================================================================================| | 时代| |迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习  | | | | ( hh: mm: ss) | | | | |损失损失精度精度  | |======================================================================================================================| | 1 | 1 | 00:00:03 | | 6.67% 18.75% | 4.9207 | 2.4141 | 1.0000 e-04 | | 2 | 10 | 00:00:23 |66.67% | 62.50% | 0.9589 | 1.3191 | 1.0000 e-04 | | 3 | 20 | 00:00:43 | | 46.67% 75.00% | 1.2973 | 0.5928 | 1.0000 e-04 | | 4 | 30 | 00:01:04 | | 60.00% 78.13% | 0.7219 | 0.4576 | 1.0000 e-04 | | 5 | 40 | 00:01:25 | | 73.33% 84.38% | 0.4750 | 0.3367 | 1.0000 e-04 | | 7 | 50 | 00:01:46 | | 93.33% 84.38% | 0.2714 | 0.2892 | 1.0000 e-04 | | 8 | | 60 00:02:07 | | 80.00% 87.50% | 0.3617 | 0.2433 | 1.0000 e-04 | | 70 | | 00:02:29 | | 86.67% 87.50% | 0.3246 | 0.2526 | 1.0000 e-04 | | 80 | | 00:02:50 |100.00% | 96.88% | 0.0701 | 0.1876 | 1.0000 e-04 | | 90 | | 00:03:11 | | 86.67% 100.00% | 0.2836 | 0.1681 | 1.0000 e-04 | | 100 | | 00:03:32 | | 86.67% 96.88% | 0.4160 | 0.1607 | 1.0000 e-04 | | 110 | | 00:03:53 | | 86.67% 96.88% | 0.3237 | 0.1565 | 1.0000 e-04 | | 120 | | 00:04:14 | | 93.33% 96.88% | 0.1646 | 0.1476 | 1.0000 e-04 | | 130 | | 00:04:35 | | 100.00% 96.88% | 0.0551 | 0.1330 | 1.0000 e-04 | | 140 | | 00:04:57 | | 93.33% 96.88% | 0.0927 | 0.1347 | 1.0000 e-04 | | | 19日150年| | | 00:05:18 | 93.33% 93.75% 0.1666 | 0.1325 | 1.0000 e-04 | | 160 | | 00:05:39 | | 93.33% 96.88% | 0.0873 | 0.1164 | 1.0000 e-04  | |======================================================================================================================|

学習済みネットワ,クの最後の層を検査します。3のクラスを含む分類出力層を確認します。

trainedGN.Layers(结束)
ans = ClassificationOutputLayer与属性:名称:'new_classoutput'类:[ARR CHF NSR] OutputSize: 3超参数LossFunction: 'crossentropyex'

GoogLeNet精度の評価

検証デ,タを使用してネットワ,クを評価します。

[YPred,probs] = category (trainedGN,imgsValidation);accuracy = mean(YPred==imgsValidation.Labels);disp ([“GoogLeNet准确率:”num2str(100 *准确性),“%”])
GoogLeNet准确率:96.875%

精度は,学習可視化の図で報告された検証精度と同じになります。スカログラムは学習コレクションと検証コレクションに分割されました。両方のコレクションはGoogLeNetの学習に使用されました。学習の結果を評価する理想的な方法は,ネットワ,クで確認されていないデ,タを分類することです。学習,検証,およびテストに分割するためのデータが十分にないため,計算された検証精度をネットワーク精度として取り扱います。

GoogLeNet活性化の調査

CNNの各層は入力@ @メ@ @ジに対する応答または活性化を生成します。ただし,cnn内でメ,ジの特性抽出に適している層は数層しかありません。ネットワ,クの始まりにある層が,エッジやブロブのような,メ,ジの基本的特徴を捉えます。これを確認するには,最初の畳み込み層からネットワ,クフィルタ,の重みを可視化します。最初の層に64個の重みの個々のセットがあります。

wghts = trainedGN.Layers(2).Weights;WGHTS =重新缩放(WGHTS);WGHTS = imresize(WGHTS,5);图蒙太奇(重量)标题(“第一卷积层权值”

活性化を調べ,活性化の領域を元のイメージと比較して,GoogLeNetが学習する特徴を確認できます。詳細にいては,畳み込みニュ,ラルネットワ,クの活性化の可視化(深度学习工具箱)畳み込みニュ,ラルネットワ,クの特徴の可視化(深度学习工具箱)を参照してください。

加勒比海盗クラスから▪▪メ▪▪ジに対して活性化する畳み込み層の領域を確認します。元の▪▪メ▪▪ジの対応する領域と比較します。畳み込みニュ,ラルネットワ,クの各層は,“チャネル”と呼ばれる多数の2次元配列で構成されています。イメージをネットワークに渡して,最初の畳み込み層である“conv1-7x7_s2”の出力活性化を確認します。

convLayer =“conv1-7x7_s2”;imgClass =“加勒比海盗”;imgName =“ARR_10.jpg”;imarr = imread(fullfile(parentDir,dataDir,imgClass,imgName));trainingFeaturesARR =激活(trainedGN,imarr,convLayer);sz = size(trainingFeaturesARR);trainingFeaturesARR =重塑(trainingFeaturesARR,[sz(1) sz(2) 1 sz(3)]);图蒙太奇(重新调节(trainingFeaturesARR),“大小”,[8 8]) title([imgClass,“激活”])

この▪▪メ▪▪ジに最も強いチャネルを確認します。最も強いチャネルを元の▪▪メ▪▪ジと比較します。

imgSize = size(imarr);imgSize = imgSize(1:2);[~,maxValueIndex] = max(max(max(trainingFeaturesARR)));arrMax = trainingFeaturesARR(:,:,:,maxValueIndex);arrMax = rescale(arrMax);arrMax = imresize(arrMax,imgSize);图;imshowpair (imarr arrMax,“蒙太奇”)标题(“最强”imgClass,“频道:”num2str (maxValueIndex)])

SqueezeNet

SqueezeNetは,アーキテクチャがサイズ227 x 227 x 3のイメージをサポートする深層CNNです。イメージの次元がGoogLeNetで異なっているにもかかわらず,SqueezeNetの次元で新しいRGBイメージを生成する必要はありません。元のRGB▪▪メ▪▪ジを使用できます。

読み込み

事前学習済みのSqueezeNetニュ,ラルネットワ,クを読み込みます。深度学习工具箱™模型为SqueezeNet网络サポートパッケージがインストールされていない場合,ソフトウェアによってアドオンエクスプローラーに必要なサポートパッケージへのリンクが表示されます。サポトパッケジをンストルするには,リンクをクリックして,[huawei @ huawei @ huawei @ huawei @ huawei @ huawei]をクリックします。

SQZ =挤压板;

ネットワ,クから層グラフを抽出します。SqueezeNetはGoogLeNetより層が少ないことを確認します。また、SqueezeNet がサイズ 227 x 227 x 3 のイメージ用に構成されていることも確認します。

lgraphSqz = layerGraph(sqz);disp ([“层数:”num2str(元素个数(lgraphSqz.Layers))))
层数:68层
disp (lgraphSqz.Layers (1) .InputSize)
227 227 3

SqueezeNetネットワ,クパラメ,タ,の変更

SqueezeNetの再学習を行って新しいイメージを分類するには,GoogLeNetで行った変更と類似の変更を加えます。

最後の6のネットワク層を検査します。

lgraphSqz.Layers(录得5个:结束)
ans = 6x1带有层的层数组:1 'drop9' Dropout 50% Dropout 2 'conv10' Convolution 1000 1x1x512 convolutions with stride[1 1]和padding [0 000 0] 3 'relu_conv10' ReLU ReLU 4 'pool10' Average Pooling 14x14 Average Pooling with stride[1 1]和padding [0 000 0] 5 'prob' Softmax Softmax 6 'ClassificationLayer_predictions' Classification Output crossentropyex with 'tench'和999其他类

ネットワ,ク内の最後のドロップアウト層である“drop9”層を,確率0.6のドロップアウト層に置き換えます。

tmpLayer = lgraphSqz.Layers(end-5);newDropoutLayer = dropoutLayer(0.6,“名字”“new_dropout”);lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newDropoutLayer);

GoogLeNetとは異なり,SqueezeNetの最後の学習可能な層は1 x 1畳み込み層“conv10”であり,全結合層ではありません。“conv10”層を,クラスの数と同じ数のフィルタ,を持,新しい畳み込み層に置き換えます。GoogLeNetのときと同様に,新しい層の学習率係数を大きくします。

numClasses = numel(categories(imgsTrain.Labels));tmpLayer = lgraphSqz.Layers(end-4);newLearnableLayer = convolution2dLayer(1,numClasses,...“名字”“new_conv”...“WeightLearnRateFactor”10...“BiasLearnRateFactor”10);lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newLearnableLayer);

分類層をクラスラベルがない新しい分類層に置き換えます。

tmpLayer = lgraphSqz.Layers(end);newClassLayer = classificationLayer(“名字”“new_classoutput”);lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newClassLayer);

ネットワクの最後の6の層を検査します。ドロップアウト層,畳み込み層,および出力層が変更されていることを確認します。

lgraphSqz.Layers (63:68)
ans = 6x1带有层的层数组:1 'new_dropout' Dropout 60% Dropout 2 'new_conv' Convolution 3 1x1 convolutions with stride [1 1] and padding [0 0 0 0 0] 3 'relu_conv10' ReLU ReLU 4 'pool10' Average Pooling 14x14 Average Pooling with stride [1 1] and padding [0 0 0 0 0] 5 'prob' Softmax Softmax 6 'new_classoutput' Classification Output crossentropyex

SqueezeNet用RGBデ,タの準備

RGBのメジにはGoogLeNetアキテクチャに適した次元があります。SqueezeNetアーキテクチャ用の既存 RGB イメージを自動的にサイズ変更する拡張イメージのデータストアを作成します。詳細については、augmentedImageDatastore(深度学习工具箱)を参照してください。

augimgsTrain = augmentedImageDatastore([227 227],imgsTrain);augimgsValidation = augmentedImageDatastore([227 227],imgsValidation);

学習オプションの設定およびSqueezeNetの学習

SqueezeNetで使用する新しい一連の学習オプションを作成します。乱数シ,ドを既定値に設定し,ネットワ,クを学習させます。学習プロセスは,通常,デスクトップCPU上で1 ~ 5分かかります。

Ilr = 3e-4;miniBatchSize = 10;maxEpochs = 15;valFreq = floor(numel(augimgsTrain.Files)/miniBatchSize);opts = trainingOptions(“个”...“MiniBatchSize”miniBatchSize,...“MaxEpochs”maxEpochs,...“InitialLearnRate”劳工关系,...“ValidationData”augimgsValidation,...“ValidationFrequency”valFreq,...“详细”, 1...“ExecutionEnvironment”“cpu”...“阴谋”“训练进步”);rng默认的trainedSN = trainNetwork(augimgsTrain,lgraphSqz,opts);

初始化输入数据规范化。|======================================================================================================================| | 时代| |迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习  | | | | ( hh: mm: ss) | | | | |损失损失精度精度  | |======================================================================================================================| | 1 | 1 | 00:00:01 | | 20.00% 43.75% | 5.2508 | 1.2540 | 0.0003 | | 1 | 13 | 00:00:11 |60.00% | 50.00% | 0.9912 | 1.0519 | 0.0003 | | 2 | 26 | 00:00:20 | | 60.00% 59.38% | 0.8554 | 0.8497 | 0.0003 | | 3 | 39 | 00:00:30 | | 60.00% 59.38% | 0.8120 | 0.8328 | 0.0003 | | 4 | 50 | 00:00:38 50.00% | | | 0.7885 | 0.0003 | | | 4 | 52 | 00:00:40 | | 60.00% 65.63% | 0.7091 | 0.7314 | 0.0003 | | 65 | | 00:00:49 | | 90.00% 87.50% | 0.4639 | 0.5893 | 0.0003 | | 6 | 78 | 00:00:59 | | 70.00% 87.50% | 0.6021 | 0.4355 | 0.0003 | | 91 | | 00:01:08 | | 90.00% 90.63% | 0.2307 | 0.2945 | 0.0003 || 100 | | 00:01:15 90.00% | | | 0.1827 | 0.0003 | | | 104 | | 00:01:18 | | 90.00% 93.75% | 0.2139 | 0.2153 | 0.0003 | | 117 | | 00:01:28 | | 100.00% 90.63% | 0.0521 | 0.1964 | 0.0003 | | 130 | | 00:01:38 | | 90.00% 90.63% | 0.1134 | 0.2214 | 0.0003 | | 143 | | 00:01:47 | | 100.00% 90.63% | 0.0855 | 0.2095 | 0.0003 | | 150 | | 00:01:52 90.00% | | | 0.2394 | 0.0003 | | | 156 | | 00:01:57 | | 100.00% 90.63% | 0.0606 | 0.1849 | 0.0003 | | 169 | | 00:02:06 | | | 100.00% 90.63%0.0090 | 0.2071 | 0.0003 | | 182 | | 00:02:16 | | 100.00% 93.75% | 0.0127 | 0.3597 | 0.0003 | | 195 | | 00:02:25 100.00% | | | 0.0016 | 0.3414 | 0.0003 93.75%  | |======================================================================================================================|

ネットワ,クの最後の層を検査します。3のクラスを含む分類出力層を確認します。

trainedSN.Layers(结束)
ans = ClassificationOutputLayer与属性:名称:'new_classoutput'类:[ARR CHF NSR] OutputSize: 3超参数LossFunction: 'crossentropyex'

SqueezeNet精度の評価

検証デ,タを使用してネットワ,クを評価します。

[YPred,probs] = classid (trainedSN,augimgsValidation);accuracy = mean(YPred==imgsValidation.Labels);disp ([“SqueezeNet精度:”num2str(100 *准确性),“%”])
挤压精度:93.75%

まとめ

この例では,転移学習と連続ウェーブレット解析を使用して,事前学習済みのCNN, GoogLeNetおよびSqueezeNetを利用することによって心电图信号の3つのクラスを分類する方法を説明します。心电图信号のウェ,ブレットベ,スの時間-周波数表現を使用してスカログラムを作成します。スカログラムのRGB▪▪メ▪▪ジが生成されます。CNNを微調整するために使用されます。また,異なるネットワ,ク層の活性化に,いても調査しました。

この例は,事前学習済みのCNNモデルを使用して信号を分類するために使用できる1つのワークフローを示しています。その他のワ,クフロ,も使用できます。ウェ,ブレット解析と深層学習を使用したNVIDIA Jetsonへの信号分類器の展開および树莓派におけるウェ,ブレットおよび深層学習を使用した信号分類器の展開では信号を分類するためのコドをハドウェアにデプロする方法を示しています。GoogLeNetおよびSqueezeNetはImageNetデータベースのサブセットで事前学習済みのモデルです [10]。これは、ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) で使用されます [8]。ImageNet コレクションには、魚、鳥、機器、および菌類など、実世界のオブジェクトのイメージが含まれます。スカログラムは実世界のオブジェクトのクラスの範囲外にあります。GoogLeNet および SqueezeNet アーキテクチャに適合させるために、スカログラムはデータ削減も行いました。事前学習済みの CNN を微調整してスカログラムの異なるクラスを区別する代わりに、元のスカログラムの次元でゼロから CNN を学習する作業はオプションです。

参考文献

  1. 拜姆,D. S.科鲁奇,E. S.蒙拉德,H. S.史密斯,R. F.赖特,A.拉努,D. F.戈蒂耶,B. J.兰西尔,W.格罗斯曼和E.布劳恩瓦尔德。"口服米力农治疗严重充血性心力衰竭患者的存活率"美国心脏病学会杂志.Vol。7,第3期,1986,第661-670页。

  2. M。“利用神经模糊网络进行心电搏动分类。”模式识别信.第25卷,第15期,2004年,第1715 - 1722页。

  3. 戈德伯格A. L, L. A. N.阿马拉尔,L.格拉斯,J. M.豪斯多夫,P. Ch.伊万诺夫,R. G.马克,J. E.米耶图斯,G. B.穆迪,c . k。彭先生和斯坦利先生。“PhysioBank, PhysioToolkit,和PhysioNet:复杂生理信号新研究资源的组成部分。”循环。卷101,第23号:e215-e220。[流通电子页;http://circ.ahajournals.org/content/101/23/e215.full];二年(六月十三日)。cir.101.23.e215 doi: 10.1161/01.。

  4. 列奥纳道齐,r.f., G.施洛特豪尔和M. E.托雷斯。“基于小波导频的心肌缺血时心率变异性的多重分形分析。”在医学与生物工程学会IEEE年度国际会议, 110 - 113。布宜诺斯艾利斯,阿根廷:IEEE, 2010。

  5. 李,T.和M.周。“用小波包熵和随机森林进行心电分类。”.Vol。18, 2016年第8期,第285页。

  6. 马哈拉杰,e。A。和A。m。阿隆索。多变量时间序列的判别分析:基于心电信号的诊断应用计算统计与数据分析“,.Vol。70, 2014,第67-87页。

  7. 穆迪,g。B。和r。g。马克。“MIT-BIH心律失常数据库的影响。”IEEE医学与生物工程杂志.Vol。20.第三期,2001年5月至6月,第45-50页。(PMID: 11446209)

  8. 邓俊杰,苏红华等。ImageNet大规模视觉识别挑战赛国际计算机视觉杂志.Vol。115, 2015年第3期,第211-252页。

  9. 赵,Q.和L.张。“使用小波变换和支持向量机的心电特征提取和分类。”万博1manbetx在IEEE神经网络与大脑国际会议, 1089 - 1092。北京:IEEE, 2005。

  10. ImageNethttp://www.image-net.org

サポ,ト関数

helperCreateECGDataDirectoriesは,親ディレクトリ内にデータディレクトリを作成してから,データディレクトリ内に3つのサブディレクトリを作成します。サブディレクトリにはECGDataで見ecg信号の各クラスに由来した名前が付けられます。

函数helperCreateECGDirectories (ECGData parentFolder dataFolder)此函数仅用于支持ECGAndDeepLearningExample。万博1manbetx它可能会在未来的版本中被更改或删除。。rootFolder = parentFolder;localFolder = dataFolder;mkdir(fullfile(rootFolder,localFolder)) folderLabels = unique(ECGData.Labels);i = 1:numel(folderLabels) mkdir(fullfile(rootFolder,localFolder,char(folderLabels(i))));结束结束

helperPlotRepsは,ECGDataで見かったecg信号の各クラスの代表的なものから最初の1000サンプルをプロットします。

函数helperPlotReps (ECGData)此函数仅用于支持ECGAndDeepLearningExample。万博1manbetx它可能会在未来的版本中被更改或删除。。folderLabels =唯一的(ECGData.Labels);k=1:3 ecgType = folderLabels{k};ind = find(ismember(ECGData.Labels,ecgType));次要情节(3 1 k)情节(ECGData.Data(印第安纳州(1)1:1000));网格标题(ecgType)结束结束

helperCreateRGBfromTFcwtfilterbankを使用して,心电图信号の連続ウェーブレット変換を取得し,ウェーブレット係数からスカログラムを生成します。補助関数はスカログラムのサズを変更し,jpegメジとしてディスクに書き込みます。

函数helperCreateRGBfromTF (ECGData parentFolder childFolder)此函数仅用于支持ECGAndDeepLearningExample。万博1manbetx它可能会在未来的版本中被更改或删除。。imageRoot = fullfile(parentFolder,childFolder);data = ECGData.Data;labels = ECGData.Labels;[~,signalLength] = size(data);Fb = cwtfilterbank(“SignalLength”signalLength,“VoicesPerOctave”12);R = size(data,1);Ii = 1:r CFS = abs(fb.wt(data(Ii,:)));Im = ind2rgb(im2uint8(rescale(cfs)),jet(128));imgLoc = fullfile(imageRoot,char(labels(ii)));imFileName = strcat(char(labels(ii)),“_”num2str (ii),“jpg”);imwrite (imresize (im, 224年[224]),fullfile (imgLoc imFileName));结束结束

参考

|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)||(深度学习工具箱)

関連するトピック