Main Content

ディープ ネットワーク デザイナー入門

この例では、ディープ ネットワーク デザイナーを使用して、深層学習によるシーケンス分類用のシンプルな再帰型ニューラル ネットワークを作成する方法を示します。

シーケンス データを分類するよう深層ニューラル ネットワークに学習させるために、LSTM ネットワークを使用できます。LSTM ネットワークでは、シーケンス データをネットワークに入力し、シーケンス データの個々のタイム ステップに基づいて予測を行うことができます。

シーケンス データの読み込み

サンプル データを WaveformData から読み込みます。このデータにアクセスするには、例をライブ スクリプトとして開きます。このデータには、正弦波、方形波、三角波、ノコギリ波の 4 つのクラスの波形が含まれています。この例では、与えられた時系列データについて波形のタイプを認識するように LSTM ニューラル ネットワークに学習させます。各シーケンスには 3 つのチャネルがあり、長さはさまざまです。

load WaveformData 

シーケンスの一部をプロットで可視化します。

numChannels = size(data{1},2);
classNames = categories(labels);

figure
tiledlayout(2,2)
for i = 1:4
    nexttile
    stackedplot(data{i},DisplayLabels="Channel "+string(1:numChannels))
    
    xlabel("Time Step")
    title("Class: " + string(labels(i)))
end

データの 80% を含む学習セット、それぞれがデータの 10% を含む検証セットとテスト セットにデータを分割します。データを分割するには、関数 trainingPartitions を使用します。この関数にアクセスするには、例をライブ スクリプトとして開きます。

numObservations = numel(data);
[idxTrain,idxValidation,idxTest] = trainingPartitions(numObservations,[0.8 0.1 0.1]);

XTrain = data(idxTrain);
TTrain = labels(idxTrain);

XValidation = data(idxValidation);
TValidation = labels(idxValidation);

XTest = data(idxTest);
TTest = labels(idxTest);

ネットワーク アーキテクチャの定義

ネットワークを構築するには、ディープ ネットワーク デザイナー アプリを使用します。

deepNetworkDesigner

シーケンス ネットワークを作成するには、[シーケンス ネットワーク] セクションの [Sequence-to-Label] で、[開く] をクリックします。これにより、sequence-to-label 分類問題に適したプリビルド ネットワークが開きます。

ディープ ネットワーク デザイナーがプリビルド ネットワークを表示します。

このシーケンス ネットワークを波形データ セットに簡単に適合させることができます。

シーケンス入力層 input を選択し、チャネル数に合わせて [InputSize] を 3 に設定します。

全結合層 fc を選択し、クラス数に合わせて [OutputSize] を 4 に設定します。

ネットワークの学習の準備が整っていることを確認するには、[解析] をクリックします。深層学習ネットワーク アナライザーによってエラーや警告が報告されていないため、ネットワークの学習の準備は整っています。ネットワークをエクスポートするには、[エクスポート] をクリックします。アプリはネットワークを変数 net_1 に保存します。

学習オプションの指定

学習オプションを指定します。オプションの中から選択するには、経験的解析が必要です。

options = trainingOptions("adam", ...
    MaxEpochs=500, ...
    InitialLearnRate=0.0005, ...
    GradientThreshold=1, ...
    ValidationData={XValidation,TValidation}, ...
    Shuffle = "every-epoch", ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

ニューラル ネットワークの学習

関数trainnetを使用してニューラル ネットワークに学習させます。分類が目的なので、クロスエントロピー損失を指定します。

net = trainnet(XTrain,TTrain,net_1,"crossentropy",options);

ニューラル ネットワークのテスト

ニューラル ネットワークをテストするには、テスト データを分類し、分類精度を計算します。

関数minibatchpredictを使用して予測を行い、関数scores2labelを使用してスコアをラベルに変換します。

scores = minibatchpredict(net,XTest);
YTest = scores2label(scores,classNames);

分類精度を計算します。精度は、正しく予測されたラベルの割合です。

acc = mean(YTest == TTest)
acc = 0.8300

混同チャートで予測を可視化します。

figure
confusionchart(TTest,YTest)

参考

関連するトピック