ディープ ネットワーク デザイナー入門
この例では、ディープ ネットワーク デザイナーを使用して、深層学習によるシーケンス分類用のシンプルな再帰型ニューラル ネットワークを作成する方法を示します。
シーケンス データを分類するよう深層ニューラル ネットワークに学習させるために、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)