Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ディープ ネットワーク デザイナーを使用したシンプルなシーケンス分類ネットワークの作成

この例では、ディープ ネットワーク デザイナーを使用してシンプルな長短期記憶 (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

[空のネットワーク] を選択します。

キャンバスに sequenceInputLayer をドラッグして InputSize12 に設定し、特徴次元を合わせます。

その後、キャンバスに lstmLayer をドラッグします。NumHiddenUnits100OutputModelast に設定します。

続いて、キャンバスに fullyConnectedLayer をドラッグし、OutputSize をクラス数である 9 に設定します。

最後に、キャンバスに softmaxLayerclassificationLayer をドラッグします。層を結合して系列ネットワークを作成します。

ネットワーク アーキテクチャの確認

ネットワークを確認して層の詳細を調べるには、[解析] をクリックします。深層学習ネットワーク アナライザーによって誤差 0 が報告されている場合、編集したネットワークの学習の準備が整っています。

ネットワーク アーキテクチャのエクスポート

ネットワーク アーキテクチャをエクスポートするには [デザイナー] タブの [エクスポート] をクリックします。ディープ ネットワーク デザイナーによりネットワークが変数 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);

ネットワークのテスト

テスト データを分類し、分類精度を計算します。学習の場合と同じミニバッチ サイズを指定します。

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

参考

関連するトピック