このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ディープ ネットワーク デザイナーを使用したシンプルなシーケンス分類ネットワークの作成
この例では、ディープ ネットワーク デザイナーを使用してシンプルな長短期記憶 (LSTM) 分類ネットワークを作成する方法を説明します。
シーケンス データを分類するよう深層ニューラル ネットワークに学習させるために、LSTM ネットワークを使用できます。LSTM ネットワークは、再帰型ニューラル ネットワーク (RNN) の一種で、シーケンス データのタイム ステップ間の長期的な依存関係を学習します。
この例では、以下を実行する方法を示します。
シーケンス データの読み込み。
ネットワーク アーキテクチャの構築。
学習オプションの指定。
ネットワークに学習をさせます。
新しいデータのラベルの予測と分類精度の計算。
データの読み込み
[1] および [2] に記載のある Japanese Vowels データ セットを読み込みます。予測子は、特徴次元 12 の可変長のシーケンスが含まれる cell 配列です。ラベルは、ラベル 1、2、...、9 の categorical ベクトルです。
[XTrain,YTrain] = japaneseVowelsTrainData; [XValidation,YValidation] = japaneseVowelsTestData;
最初のいくつかの学習シーケンスのサイズを表示します。シーケンスは行列で、行数が 12 (特徴ごとに 1 行) で、列数が可変 (タイム ステップごとに 1 列) です。
XTrain(1:5)
ans=5×1 cell array
{12×20 double}
{12×26 double}
{12×22 double}
{12×20 double}
{12×21 double}
ネットワーク アーキテクチャの定義
ディープ ネットワーク デザイナーを開きます。
deepNetworkDesigner
[Sequence-to-Label] で一時停止し、[開く] をクリックします。これにより、シーケンス分類の問題に適したプリビルド ネットワークが開きます。
ディープ ネットワーク デザイナーがプリビルド ネットワークを表示します。
このシーケンス ネットワークを、Japanese Vowels データ セットに簡単に適合させることができます。
[sequenceInputLayer] を選択し、[InputSize] が特徴次元と一致するように 12 に設定されていることを確認します。
[lstmLayer] を選択し、[NumHiddenUnits] を 100 に設定します。
[fullyConnectedLayer] を選択し、[OutputSize] がクラス数の 9 に設定されていることを確認します。
ネットワーク アーキテクチャの確認
ネットワークを確認して層の詳細を調べるには、[解析] をクリックします。
ネットワーク アーキテクチャのエクスポート
ネットワーク アーキテクチャをワークスペースにエクスポートするには、[デザイナー] タブの [エクスポート] をクリックします。ディープ ネットワーク デザイナーによりネットワークが変数 layers_1
に保存されます。
[エクスポート]、[コード生成] を選択して、ネットワーク アーキテクチャを構築するためのコードを生成することもできます。
ネットワークの学習
学習オプションを指定し、ネットワークに学習させます。
ミニバッチが小さく、シーケンスが短いため、学習には CPU が適しています。'ExecutionEnvironment'
を 'cpu'
に設定します。GPU が利用できる場合、GPU で学習を行うには、'ExecutionEnvironment'
を 'auto'
(既定値) に設定します。
miniBatchSize = 27; options = trainingOptions('adam', ... 'ExecutionEnvironment','cpu', ... 'MaxEpochs',100, ... 'MiniBatchSize',miniBatchSize, ... 'ValidationData',{XValidation,YValidation}, ... 'GradientThreshold',2, ... 'Shuffle','every-epoch', ... 'Verbose',false, ... 'Plots','training-progress');
ネットワークに学習をさせます。
net = trainNetwork(XTrain,YTrain,layers_1,options);
このネットワークを、ディープ ネットワーク デザイナーとデータストア・オブジェクトを使って学習させることもできます。ディープ ネットワーク デザイナーで Sequence-to-Sequence 回帰ネットワークに学習させる方法を示す例については、ディープ ネットワーク デザイナーを使用して時系列予測をネットワークに学習させるを参照してください。
ネットワークのテスト
テスト データを分類し、分類精度を計算します。学習の場合と同じミニバッチ サイズを指定します。
YPred = classify(net,XValidation,'MiniBatchSize',miniBatchSize);
acc = mean(YPred == YValidation)
acc = 0.9405
次のステップとして、双方向 LSTM (BiLSTM) 層を使用するか、より深いネットワークを作成して、精度の改善を試みることができます。詳細については、長短期記憶ニューラル ネットワークを参照してください。
畳み込みネットワークを使用してシーケンス データを分類する方法を示す例については、深層学習を使用した音声コマンド認識モデルの学習を参照してください。
参考文献
[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo.“Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.
[2] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo.Japanese Vowels Data Set. Distributed by UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
参考
trainingOptions
| trainNetwork
| lstmLayer