Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

sequenceInputLayer

説明

シーケンス入力層は、ネットワークにシーケンス データを入力します。

作成

説明

layer = sequenceInputLayer(inputSize) は、シーケンス入力層を作成し、InputSize プロパティを設定します。

layer = sequenceInputLayer(inputSize,Name,Value) は、名前と値のペアを使用して、オプションの MinLengthNormalizationMean、および Name の各プロパティを設定します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。

プロパティ

すべて展開する

シーケンス入力

入力のサイズ。正の整数または正の整数のベクトルとして指定します。

  • ベクトル シーケンス入力の場合、InputSize は特徴の数に対応するスカラーです。

  • 1 次元イメージ シーケンス入力の場合、InputSize は 2 要素から成るベクトル [h c] です。ここで、h はイメージの高さ、c はイメージのチャネル数です。

  • 2 次元イメージ シーケンス入力の場合、InputSize は 3 要素から成るベクトル [h w c] です。ここで、h はイメージの高さ、w はイメージの幅、c はイメージのチャネル数です。

  • 3 次元イメージ シーケンス入力の場合、InputSize は 4 要素から成るベクトル [h w d c] です。ここで、h はイメージの高さ、w はイメージの幅、d はイメージの深さ、c はイメージのチャネル数です。

入力データの最小シーケンス長を指定するには、MinLength プロパティを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

入力データの最小シーケンス長。正の整数として指定します。ネットワークで学習または予測を行うときに、入力データのタイム ステップが MinLength 未満の場合、ソフトウェアはエラーをスローします。

時間次元のデータをダウンサンプリングするネットワークを作成するときは、ネットワークが学習データと予測用のデータをサポートするように注意しなければなりません。一部の深層学習層では、入力のシーケンス長が最小である必要があります。たとえば、1 次元畳み込み層では、入力に少なくともフィルター サイズと同じ数のタイム ステップが必要です。

シーケンス データの時系列がネットワークを介して伝播することで、シーケンスの長さが変化する可能性があります。たとえば、1 次元畳み込みなどのダウンサンプリング操作では、入力よりも少ないタイム ステップでデータを出力できます。これは、データのシーケンス長が層に必要な最小長よりも短いため、ダウンサンプリング操作によってネットワーク内の後の層がエラーをスローする可能性があることを意味します。

ネットワークの学習や組み立てを行うとき、ソフトウェアは長さ 1 のシーケンスがネットワークを介して伝播できることを自動的にチェックします。一部のネットワークは、長さ 1 のシーケンスをサポートしていない可能性がありますが、シーケンス長がそれより大きいシーケンスを正常に伝播できます。ネットワークが学習データと予想される予測データの伝播をサポートしていることを確認するには、MinLength プロパティを、データの最小長と予測データの予想最小長の値以下に設定します。

ヒント

畳み込み層とプーリング層がデータのサイズを変更しないようにするには、層の Padding オプションを "same" または "causal" に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

データが入力層を通じて順伝播されるたびに適用するデータ正規化。次のいずれかに指定します。

  • 'zerocenter'Mean によって指定された平均を減算します。

  • 'zscore'Mean によって指定された平均を減算し、StandardDeviation で除算します。

  • 'rescale-symmetric'Min および Max によってそれぞれ指定された最小値と最大値を使用して、範囲 [-1, 1] に入力を再スケーリングします。

  • 'rescale-zero-one'Min および Max によってそれぞれ指定された最小値と最大値を使用して、範囲 [0, 1] に入力を再スケーリングします。

  • 'none' — 入力データを正規化しません。

  • 関数ハンドル — 指定した関数を使用してデータを正規化します。関数は、Y = func(X) という形式でなければなりません。ここで、X は入力データ、出力 Y は正規化データです。

ヒント

既定では、学習時に正規化統計量が自動的に計算されます。学習時に時間を節約するため、正規化に必要な統計量を指定し、trainingOptions'ResetInputNormalization' オプションを false に設定します。

入力データにパディングが含まれている場合、この層は、入力データの正規化時にパディング値を無視します。

データ型: char | string | function_handle

正規化の次元。次のいずれかに指定します。

  • 'auto' – 学習オプションが false の場合、いずれかの正規化統計量 (MeanStandardDeviationMin、または Max) を指定し、統計量に一致する次元に対して正規化を行います。そうでない場合、学習時に統計量を再計算し、チャネル単位の正規化を適用します。

  • 'channel' – チャネル単位の正規化。

  • 'element' – 要素単位の正規化。

  • 'all' – スカラーの統計量を使用してすべての値を正規化します。

データ型: char | string

ゼロ中心正規化および z スコア正規化の平均。数値配列または空として指定します。

  • ベクトル シーケンス入力の場合、Mean はチャネルごとの平均から成る InputSize 行 1 列のベクトル、数値スカラー、または [] でなければなりません。

  • 2 次元イメージ シーケンス入力の場合、MeanInputSize と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 x InputSize(3) の配列、数値スカラー、または [] でなければなりません。

  • 3 次元イメージ シーケンス入力の場合、MeanInputSize と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 x 1 x InputSize(4) の配列、数値スカラー、または [] でなければなりません。

Mean プロパティを指定する場合、Normalization'zerocenter' または 'zscore' でなければなりません。Mean[] の場合、学習時に平均が計算されます。

学習を行わずにネットワークを作成する場合 (assembleNetwork を使用してネットワークを組み立てる場合など)、このプロパティを設定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z スコア正規化に使用される標準偏差。数値配列、数値スカラー、または空として指定します。

  • ベクトル シーケンス入力の場合、StandardDeviation はチャネルごとの標準偏差から成る InputSize 行 1 列のベクトル、数値スカラー、または [] でなければなりません。

  • 2 次元イメージ シーケンス入力の場合、StandardDeviationInputSize と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 x InputSize(3) の配列、数値スカラー、または [] でなければなりません。

  • 3 次元イメージ シーケンス入力の場合、StandardDeviationInputSize と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 x 1 x InputSize(4) の配列、または数値スカラーでなければなりません。

StandardDeviation プロパティを指定する場合、Normalization'zscore' でなければなりません。StandardDeviation[] の場合、学習時に標準偏差が計算されます。

学習を行わずにネットワークを作成する場合 (assembleNetwork を使用してネットワークを組み立てる場合など)、このプロパティを設定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

再スケーリングの最小値。数値配列または空として指定します。

  • ベクトル シーケンス入力の場合、Min はチャネルごとの平均から成る InputSize 行 1 列のベクトル、または数値スカラーでなければなりません。

  • 2 次元イメージ シーケンス入力の場合、MinInputSize と同じサイズの数値配列、チャネルごとの最小値から成る 1 x 1 x InputSize(3) の配列、または数値スカラーでなければなりません。

  • 3 次元イメージ シーケンス入力の場合、MinInputSize と同じサイズの数値配列、チャネルごとの最小値から成る 1 x 1 x 1 x InputSize(4) の配列、または数値スカラーでなければなりません。

Min プロパティを指定する場合、Normalization'rescale-symmetric' または 'rescale-zero-one' でなければなりません。Min[] の場合、学習時に最小値が計算されます。

学習を行わずにネットワークを作成する場合 (assembleNetwork を使用してネットワークを組み立てる場合など)、このプロパティを設定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

再スケーリングの最大値。数値配列または空として指定します。

  • ベクトル シーケンス入力の場合、Max はチャネルごとの平均から成る InputSize 行 1 列のベクトル、または数値スカラーでなければなりません。

  • 2 次元イメージ シーケンス入力の場合、MaxInputSize と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 x InputSize(3) の配列、数値スカラー、または [] でなければなりません。

  • 3 次元イメージ シーケンス入力の場合、MaxInputSize と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 x 1 x InputSize(4) の配列、数値スカラー、または [] でなければなりません。

Max プロパティを指定する場合、Normalization'rescale-symmetric' または 'rescale-zero-one' でなければなりません。Max[] の場合、学習時に最大値が計算されます。

学習を行わずにネットワークを作成する場合 (assembleNetwork を使用してネットワークを組み立てる場合など)、このプロパティを設定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が '' の層に自動的に名前を割り当てます。

データ型: char | string

層の入力の数。この層には入力がありません。

データ型: double

層の入力名。この層には入力がありません。

データ型: cell

このプロパティは読み取り専用です。

層の出力の数。この層には単一の出力のみがあります。

データ型: double

このプロパティは読み取り専用です。

層の出力名。この層には単一の出力のみがあります。

データ型: cell

すべて折りたたむ

名前が 'seq1'、入力サイズが 12 のシーケンス入力層を作成します。

layer = sequenceInputLayer(12,'Name','seq1')
layer = 
  SequenceInputLayer with properties:

                      Name: 'seq1'
                 InputSize: 12
                 MinLength: 1

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

シーケンス入力層を Layer 配列に含めます。

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

名前が 'seq1' の 224 行 224 列の RGB イメージのシーケンスに対して、シーケンス入力層を作成します。

layer = sequenceInputLayer([224 224 3], 'Name', 'seq1')
layer = 
  SequenceInputLayer with properties:

                      Name: 'seq1'
                 InputSize: [224 224 3]
                 MinLength: 1

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

sequence-to-label 分類について深層学習 LSTM ネットワークに学習をさせます。

[1] および [2] に記載のある Japanese Vowels データ セットを読み込みます。XTrain は、LPC ケプストラム係数に対応する 12 の特徴をもつ可変長の 270 個のシーケンスが含まれる cell 配列です。Y は、ラベル 1、2、...、9 の categorical ベクトルです。XTrain のエントリは行列で、行数が 12 (特徴ごとに 1 行) で、列数が可変 (タイム ステップごとに 1 列) です。

[XTrain,YTrain] = japaneseVowelsTrainData;

最初の時系列をプロットで可視化します。各ラインは特徴に対応しています。

figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')

Figure contains an axes object. The axes object with title Training Observation 1 contains 12 objects of type line. These objects represent Feature 1, Feature 2, Feature 3, Feature 4, Feature 5, Feature 6, Feature 7, Feature 8, Feature 9, Feature 10, Feature 11, Feature 12.

LSTM ネットワーク アーキテクチャを定義します。入力サイズを 12 (入力データの特徴の数) に指定します。100 個の隠れユニットを含み、シーケンスの最後の要素を出力するように LSTM 層を指定します。最後に、サイズが 9 の全結合層を含めることによって 9 個のクラスを指定し、その後にソフトマックス層と分類層を配置します。

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

学習オプションを指定します。ソルバーを 'adam''GradientThreshold' を 1 に指定します。ミニバッチ サイズを 27、エポックの最大回数を 70 に設定します。

ミニバッチが小さく、シーケンスが短いため、学習には CPU が適しています。'ExecutionEnvironment''cpu' に設定します。GPU が利用できる場合、GPU で学習を行うには、'ExecutionEnvironment''auto' (既定値) に設定します。

maxEpochs = 70;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

学習オプションを指定して LSTM ネットワークに学習させます。

net = trainNetwork(XTrain,YTrain,layers,options);

Figure Training Progress (12-Apr-2022 00:58:46) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 11 objects of type patch, text, line. Axes object 2 contains 11 objects of type patch, text, line.

テスト セットを読み込み、シーケンスを話者別に分類します。

[XTest,YTest] = japaneseVowelsTestData;

テスト データを分類します。学習に使用されるサイズと同じミニバッチ サイズを指定します。

YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);

予測の分類精度を計算します。

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9541

sequence-to-label 分類用の LSTM ネットワークを作成するには、シーケンス入力層、LSTM 層、全結合層、ソフトマックス層、および分類出力層を含む層配列を作成します。

シーケンス入力層のサイズを入力データの特徴の数に設定します。全結合層のサイズをクラスの数に設定します。シーケンス長を指定する必要はありません。

LSTM 層では、隠れユニットの数と出力モード 'last' を指定します。

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

sequence-to-label 分類について LSTM ネットワークに学習をさせ、新しいデータを分類する方法の例については、深層学習を使用したシーケンスの分類を参照してください。

sequence-to-sequence 分類用の LSTM ネットワークを作成するには、sequence-to-label 分類の場合と同じアーキテクチャを使用しますが、LSTM 層の出力モードを 'sequence' に設定します。

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

sequence-to-one 回帰用の LSTM ネットワークを作成するには、シーケンス入力層、LSTM 層、全結合層、および回帰出力層を含む層配列を作成します。

シーケンス入力層のサイズを入力データの特徴の数に設定します。全結合層のサイズを応答の数に設定します。シーケンス長を指定する必要はありません。

LSTM 層では、隠れユニットの数と出力モード 'last' を指定します。

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numResponses)
    regressionLayer];

sequence-to-sequence 回帰用の LSTM ネットワークを作成するには、sequence-to-one 回帰の場合と同じアーキテクチャを使用しますが、LSTM 層の出力モードを 'sequence' に設定します。

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numResponses)
    regressionLayer];

sequence-to-sequence 回帰について LSTM ネットワークに学習をさせて、新しいデータを予測する方法の例については、深層学習を使用した sequence-to-sequence 回帰を参照してください。

出力モードが 'sequence' の追加の LSTM 層を LSTM 層の前に挿入すると、LSTM ネットワークを深くできます。過適合を防止するために、LSTM 層の後にドロップアウト層を挿入できます。

sequence-to-label 分類ネットワークでは、最後の LSTM 層の出力モードは 'last' でなければなりません。

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','last')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

sequence-to-sequence 分類ネットワークでは、最後の LSTM 層の出力モードは 'sequence' でなければなりません。

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','sequence')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

ビデオや医用画像データなどのイメージのシーケンスを含むデータ用の深層学習ネットワークを作成します。

  • イメージのシーケンスをネットワークに入力するには、シーケンス入力層を使用します。

  • 畳み込み演算を各タイム ステップに個別に適用するには、まずシーケンス折りたたみ層を使用してイメージのシーケンスをイメージの配列に変換します。

  • これらの演算の実行後にシーケンス構造を復元するには、シーケンス展開層を使用してこのイメージの配列をイメージ シーケンスに変換し直します。

  • イメージを特徴ベクトルに変換するには、フラット化層を使用します。

その後、ベクトル シーケンスを LSTM 層と BiLSTM 層に入力できます。

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

28 x 28 のグレースケール イメージのシーケンスを 10 個のクラスに分類する分類用の LSTM ネットワークを作成します。

次のネットワーク アーキテクチャを定義します。

  • 入力サイズ [28 28 1] のシーケンス入力層。

  • 20 個の 5 行 5 列のフィルターを持つ、畳み込み層、バッチ正規化層、および ReLU 層のブロック。

  • 最後のタイム ステップのみを出力する、200 個の隠れユニットを持つ LSTM 層。

  • サイズが 10 (クラス数) の全結合層と、その後に配置するソフトマックス層と分類層。

畳み込み演算をタイム ステップごとに個別に実行するには、畳み込み層の前にシーケンス折りたたみ層を含めます。LSTM 層はベクトル シーケンス入力を想定しています。シーケンス構造を復元し、畳み込み層の出力を特徴ベクトルのシーケンスに形状変更するには、畳み込み層と LSTM 層の間にシーケンス展開層とフラット化層を挿入します。

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;

layers = [ ...
    sequenceInputLayer(inputSize,'Name','input')
    
    sequenceFoldingLayer('Name','fold')
    
    convolution2dLayer(filterSize,numFilters,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    
    sequenceUnfoldingLayer('Name','unfold')
    flattenLayer('Name','flatten')
    
    lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
    
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classification')];

層を層グラフに変換し、シーケンス折りたたみ層の miniBatchSize 出力をシーケンス展開層の対応する入力に結合します。

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

関数 plot を使用して最終的なネットワーク アーキテクチャを表示します。

figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

参照

[1] M. Kudo, J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pages 1103–1111.

[2] UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

拡張機能

バージョン履歴

R2017b で導入

すべて展開する