Main Content

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

lstm

説明

長短期記憶 (LSTM) 演算では、時系列データおよびシーケンス データのタイム ステップ間の長期的な依存関係をネットワークに学習させることができます。

メモ

この関数は、深層学習 LSTM 演算を dlarray データに適用します。layerGraph オブジェクト内または Layer 配列内に LSTM 演算を適用する場合は、次の層を使用します。

Y = lstm(X,H0,C0,weights,recurrentWeights,bias) は、初期隠れ状態 H0、初期セル状態 C0、およびパラメーター weightsrecurrentWeightsbias を使用して、入力 X に長短期記憶 (LSTM) 演算を適用します。入力 X は、書式化された dlarray でなければなりません。出力 Y は、X と同じ次元形式をもつ書式化された dlarray になります ('S' 次元を除く)。

関数 lstm は、双曲線正接関数 (tanh) を状態活性化関数として使用し、セル状態と隠れ状態を更新します。関数 lstm は、σ(x)=(1+ex)1 で与えられるシグモイド関数をゲート活性化関数として使用します。

[Y,hiddenState,cellState] = lstm(X,H0,C0,weights,recurrentWeights,bias) は、LSTM 演算を行った後に隠れ状態とセル状態も返します。

X が書式化されていない dlarray である場合、[___] = lstm(___,'DataFormat',FMT) は、次元形式 FMT も指定します。出力 Y は、X と同じ順序で次元が並べられた、書式化されていない dlarray になります ('S' 次元を除く)。

すべて折りたたむ

3 つの隠れユニットを使用して、LSTM 演算を実行します。

チャネル数が 10、シーケンス長が 64 である 32 個の観測値として入力シーケンス データを作成します。

numFeatures = 10;
numObservations = 32;
sequenceLength = 64;

X = randn(numFeatures,numObservations,sequenceLength);
dlX = dlarray(X,'CBT');

3 つの隠れユニットをもつ初期隠れ状態と初期セル状態を作成します。すべての観測値について、同じ初期隠れ状態と初期セル状態を使用します。

numHiddenUnits = 3;
H0 = zeros(numHiddenUnits,1);
C0 = zeros(numHiddenUnits,1);

LSTM 演算に関する学習可能なパラメーターを作成します。

weights = dlarray(randn(4*numHiddenUnits,numFeatures),'CU');
recurrentWeights = dlarray(randn(4*numHiddenUnits,numHiddenUnits),'CU');
bias = dlarray(randn(4*numHiddenUnits,1),'C');

LSTM 演算を実行します。

[dlY,hiddenState,cellState] = lstm(dlX,H0,C0,weights,recurrentWeights,bias);

dlY のサイズと次元を表示します。

size(dlY)
ans = 1×3

     3    32    64

dlY.dims
ans = 
'CBT'

hiddenState および cellState のサイズを表示します。

size(hiddenState)
ans = 1×2

     3    32

size(cellState)
ans = 1×2

     3    32

出力 hiddenState が出力 dlY の最後のタイム ステップと同じであることを確認します。

if extractdata(dlY(:,:,end)) == hiddenState
   disp("The hidden state and the last time step are equal.");
else 
   disp("The hidden state and the last time step are not equal.")
end
The hidden state and the last time step are equal.

隠れ状態とセル状態を使用すると、LSTM 演算の状態を追跡したり、シーケンス データをさらに入力したりすることができます。

入力引数

すべて折りたたむ

入力データ。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。X が書式化された dlarray でない場合、'DataFormat',FMT を使用して次元ラベルの形式を指定しなければなりません。X が数値配列の場合、少なくとも H0C0weightsrecurrentWeightsbias のいずれかが dlarray でなければなりません。

X には、'T' のラベルの付いたシーケンス次元が含まれていなければなりません。'S' のラベルが付いた空間次元が X に含まれている場合、それらは 'C' チャネル次元にフラット化されます。X にチャネル次元が含まれていない場合、チャネル次元が 1 つ追加されます。'U' のラベルが付いた未指定の次元が X に含まれている場合、その次元は大きさが 1 でなければなりません。

データ型: single | double

初期隠れ状態ベクトル。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

H0 が書式化された dlarray の場合、'C' のラベルが付いたチャネル次元が含まれていなければなりません。このとき、X'B' 次元とサイズが等しく、'B' のラベルが付いたバッチ次元を含めることもできます。H0'B' 次元が含まれていない場合、関数は、X に含まれる各観測値に対して同じ隠れ状態ベクトルを使用します。

'C' 次元のサイズによって隠れユニットの数が決定されます。H0'C' 次元のサイズは、C0'C' 次元のサイズと等しくなければなりません。

H0 が書式化された dlarray ではない場合、最初の次元のサイズによって隠れユニットの数が決定されます。このとき、最初の次元のサイズは、C0 の最初の次元または 'C' 次元のサイズと同じでなければなりません。

データ型: single | double

初期セル状態ベクトル。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

C0 が書式化された dlarray の場合、'C' のラベルが付いたチャネル次元が含まれていなければなりません。このとき、X'B' 次元とサイズが等しく、'B' のラベルが付いたバッチ次元を含めることもできます。C0'B' 次元が含まれていない場合、関数は、X に含まれる各観測値に対して同じセル状態ベクトルを使用します。

'C' 次元のサイズによって隠れユニットの数が決定されます。C0'C' 次元のサイズは、H0'C' 次元のサイズと等しくなければなりません。

C0 が書式化された dlarray ではない場合、最初の次元のサイズによって隠れユニットの数が決定されます。このとき、最初の次元のサイズは、H0 の最初の次元または 'C' 次元のサイズと同じでなければなりません。

データ型: single | double

重み。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

サイズが 4*NumHiddenUnitsInputSize 列の行列として weights を指定します。ここで、NumHiddenUnitsC0 および H0'C' 次元のサイズ、InputSizeX'C' 次元のサイズに X の各 'S' 次元のサイズを乗算した値です (存在する場合)。

weights が書式化された dlarray の場合、サイズが 4*NumHiddenUnits である 'C' 次元およびサイズが InputSize である 'U' 次元が含まれていなければなりません。

データ型: single | double

再帰重み。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

サイズが 4*NumHiddenUnitsNumHiddenUnits 列の行列として recurrentWeights を指定します。ここで、NumHiddenUnitsC0 および H0'C' 次元のサイズです。

recurrentWeights が書式化された dlarray の場合、サイズが 4*NumHiddenUnits である 'C' 次元およびサイズが NumHiddenUnits である 'U' 次元が含まれていなければなりません。

データ型: single | double

バイアス。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

長さ 4*NumHiddenUnits のベクトルとして bias を指定します。ここで、NumHiddenUnitsC0 および H0'C' 次元のサイズです。

bias が書式化された dlarray の場合、大きさが 1 でない次元は 'C' のラベルが付いていなければなりません。

データ型: single | double

書式設定されていない入力データの次元の順序。'DataFormat' と、データの各次元のラベルを表す文字配列または string である FMT で構成されるコンマ区切りのペアとして指定します。FMT の各文字は次のいずれかでなければなりません。

  • 'S' — 空間

  • 'C' — チャネル

  • 'B' — バッチ (サンプルや観測値など)

  • 'T' — 時間 (シーケンスなど)

  • 'U' — 指定なし

'S' または 'U' のラベルが付いた次元については、複数回指定できます。'C''B''T' のラベルについては、1 回のみ使用できます。

入力データが書式化された dlarray でないときは、'DataFormat',FMT を指定しなければなりません。

例: 'DataFormat','SSCB'

データ型: char | string

出力引数

すべて折りたたむ

LSTM 出力。dlarray として返されます。出力 Y の基となるデータ型は、入力 X と同じです。

入力データ X が書式化された dlarray である場合、Y の次元形式は X と同じになります ('S' 次元を除く)。入力データが書式化された dlarray でない場合、Y は、入力データと同じ次元の順序をもつ書式化されていない dlarray になります。

Y'C' 次元のサイズは、H0 または C0'C' 次元のサイズで指定された隠れユニットの数と同じです。

各観測値の隠れ状態ベクトル。H0 と同じデータ型をもつ dlarray または数値配列として返されます。

入力 H0 が書式化された dlarray の場合、出力 hiddenState は、書式 'CB' をもつ書式化された dlarray になります。

各観測値のセル状態ベクトル。dlarray または数値配列として返されます。cellState は、C0 と同じデータ型で返されます。

入力 C0 が書式化された dlarray の場合、出力 cellState は、書式 'CB' をもつ書式化された dlarray として返されます。

制限

  • functionToLayerGraph は関数 lstm をサポートしません。lstm 演算を含む関数とともに functionToLayerGraph を使用した場合、結果として得られる LayerGraph にはプレースホルダー層が含まれます。

詳細

すべて折りたたむ

長短期記憶

LSTM 演算では、時系列データおよびシーケンス データのタイム ステップ間の長期的な依存関係をネットワークに学習させることができます。詳細については、lstmLayer のリファレンス ページに記載された長短期記憶層の定義を参照してください。

拡張機能

バージョン履歴

R2019b で導入