Main Content

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

lstmLayer

長短期記憶 (LSTM) 層

説明

LSTM 層は、時系列データおよびシーケンス データのタイム ステップ間の長期的な依存関係を学習します。

この層により交互作用が付加され、学習中の長いシーケンスでの勾配フローの改善に役立ちます。

作成

説明

layer= lstmLayer(numHiddenUnits)は、LSTM 層を作成し、NumHiddenUnitsプロパティを設定します。

layer= lstmLayer(numHiddenUnits,Name,Value)は、1 つ以上の名前と値のペアの引数を使用して、追加のOutputMode活性化状態パラメーターと初期化学習率および正則化、およびNameの各プロパティを設定します。複数の名前と値のペアの引数を指定できます。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

LSTM

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

隠れユニットの数 (隠れサイズとも呼ばれる)。正の整数として指定します。

隠れユニットの数は、タイム ステップ間に層によって記憶された情報 (隠れ状態) の量に相当します。隠れ状態には、シーケンス長に関係なく、以前のすべてのタイム ステップからの情報を含めることができます。隠れユニットの数が大きすぎる場合、層が学習データに対して過適合する可能性があります。

隠れ状態によって、1 回の反復の間に層で処理されるタイム ステップ数が制限されることはありません。関数trainNetworkを使用するときにシーケンスをより小さなシーケンスに分割するには、SequenceLength学習オプションを使用します。

この層は、NumHiddenUnits個のチャネルをもつデータを出力します。

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

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

出力モード。次のいずれかの値として指定します。

  • 'sequence'— シーケンス全体を出力します。

  • 'last'— シーケンスの最後のタイム ステップを出力します。

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

層への状態入力のフラグ。0(false) または1(true) として指定します。

HasStateInputsプロパティが0(false) の場合、層は、入力データに対応する'in'という名前の 1 つの入力をもちます。この場合、層はHiddenStateプロパティとCellStateプロパティを使用して層処理を行います。

HasStateInputsプロパティが1(true) の場合、層は、それぞれ入力データ、隠れ状態、およびセル状態に対応する'in''hidden'、および'cell'という名前の 3 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1(true) の場合、HiddenStateプロパティとCellStateプロパティは空でなければなりません。

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

層からの状態出力のフラグ。0(false) または1(true) として指定します。

HasStateOutputsプロパティが0(false) の場合、層は、出力データに対応する'out'という名前の 1 つの出力をもちます。

HasStateOutputsプロパティが1(true) の場合、層は、それぞれ出力データ、隠れ状態、およびセル状態に対応する'out''hidden'、および'cell'という名前の 3 つの出力をもちます。この場合、層は、計算した状態値も出力します。

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

入力サイズ。正の整数または'auto'として指定します。InputSize'auto'の場合、学習時に入力サイズが自動的に割り当てられます。

データ型:double|char

活性化

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

セル状態と隠れ状態を更新する活性化関数。次のいずれかの値として指定します。

  • 'tanh'— 双曲線正接関数 (tanh) を使用します。

  • 'softsign'— ソフトサイン関数 softsign ( x ) = x 1 + | x | を使用します。

層は,セル状態と隠れ状態を更新する計算における関数 σ c としてこのオプションを使用します。LSTM 層が活性化関数をどのように使用するかの詳細については、長短期記憶層を参照してください。

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

ゲートに適用する活性化関数。次のいずれかの値として指定します。

  • 'sigmoid'— シグモイド関数 σ ( x ) = ( 1 + e x ) 1 を使用します。

  • 'hard-sigmoid'— ハード シグモイド関数を使用します。

    σ ( x ) = { 0 0.2 x + 0.5 1 if x < 2.5 if 2.5 x 2.5 if x > 2.5 .

層は、層のゲートの計算における関数 σ g としてこのオプションを使用します。

状態

層処理で使用されるセル状態。NumHiddenUnits行 1 列の数値ベクトルとして指定します。この値は、データが層に渡されるときのセル状態の初期値に対応します。

このプロパティを手動で設定した後に関数resetStateを呼び出すと、セル状態がこの値に設定されます。

HasStateInputs1(true) の場合、CellStateプロパティは空でなければなりません。

データ型:single|double

層処理で使用される隠れ状態。NumHiddenUnits行 1 列の数値ベクトルとして指定します。この値は、データが層に渡されるときの隠れ状態の初期値に対応します。

このプロパティを手動で設定した後に関数resetStateを呼び出すと、隠れ状態がこの値に設定されます。

HasStateInputs1(true) の場合、HiddenStateプロパティは空でなければなりません。

データ型:single|double

パラメーターと初期化

入力の重みを初期化する関数。次のいずれかに指定します。

  • 'glorot'– Glorot 初期化子[4](Xavier 初期化子とも呼ばれる) を使用して入力の重みを初期化します。Glorot 初期化子は、平均 0、分散2/(InputSize + numOut)の一様分布から個別にサンプリングを行います。ここで、numOut = 4*NumHiddenUnitsです。

  • 'he'– He 初期化子[5]を使用して入力の重みを初期化します。He 初期化子は、平均 0、分散2/InputSizeの正規分布からサンプリングを行います。

  • 'orthogonal'– 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[6]

  • 'narrow-normal'– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、入力の重みを初期化します。

  • 'zeros'– 0 で入力の重みを初期化します。

  • 'ones'– 1 で入力の重みを初期化します。

  • 関数ハンドル – カスタム関数で入力の重みを初期化します。関数ハンドルを指定する場合、関数はweights = func(sz)という形式でなければなりません。ここで、szは入力の重みのサイズです。

この層では、InputWeightsプロパティが空の場合にのみ入力の重みが初期化されます。

データ型:char|string|function_handle

再帰重みを初期化する関数。次のいずれかに指定します。

  • 'orthogonal'– 直交行列 Q を使用して再帰重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[6]

  • 'glorot'– Glorot 初期化子[4](Xavier 初期化子とも呼ばれる) を使用して再帰重みを初期化します。Glorot 初期化子は、平均 0、分散2/(numIn + numOut)の一様分布から個別にサンプリングを行います。ここで、numIn = NumHiddenUnitsおよびnumOut = 4*NumHiddenUnitsです。

  • 'he'– He 初期化子[5]を使用して再帰重みを初期化します。He 初期化子は、平均 0、分散2/NumHiddenUnitsの正規分布からサンプリングを行います。

  • 'narrow-normal'——平均0,標準偏差0.01の正規分布から個別にサンプリングを行って,再帰重みを初期化します。

  • 'zeros'– 0 で再帰重みを初期化します。

  • 'ones'– 1 で再帰重みを初期化します。

  • 関数ハンドル – カスタム関数で再帰重みを初期化します。関数ハンドルを指定する場合、関数はweights = func(sz)という形式でなければなりません。ここで、szは再帰重みのサイズです。

この層では、RecurrentWeightsプロパティが空の場合にのみ再帰重みが初期化されます。

データ型:char|string|function_handle

バイアスを初期化する関数。次のいずれかの値として指定します。

  • 'unit-forget-gate'— 忘却ゲート バイアスを 1 で初期化し、残りのバイアスを 0 で初期化します。

  • 'narrow-normal'— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。

  • 'ones'— 1 でバイアスを初期化します。

  • 関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数はbias = func(sz)という形式でなければなりません。ここで、szはバイアスのサイズです。

この層では、Biasプロパティが空の場合にのみバイアスが初期化されます。

データ型:char|string|function_handle

入力の重み。行列として指定します。

この入力重み行列は、LSTM 層にあるコンポーネント (ゲート) の 4 つの入力重み行列の連結です。4 つの行列は、以下の順で垂直に連結されています。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

入力の重みは学習可能なパラメーターです。関数trainNetworkによってネットワークに学習させる際、InputWeightsが空ではない場合、InputWeightsプロパティが初期値として使用されます。InputWeightsが空の場合、InputWeightsInitializerによって指定された初期化子が使用されます。

学習時、InputWeights4*NumHiddenUnitsInputSize列の行列です。

再帰重み。行列として指定します。

この再帰重み行列は、LSTM 層にあるコンポーネント (ゲート) の 4 つの再帰重み行列の連結です。4 つの行列は、以下の順で垂直に連結されています。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

再帰重みは学習可能なパラメーターです。関数trainNetworkによってネットワークに学習させる際、RecurrentWeightsが空ではない場合、RecurrentWeightsプロパティが初期値として使用されます。RecurrentWeightsが空の場合、RecurrentWeightsInitializerによって指定された初期化子が使用されます。

学習時、RecurrentWeights4*NumHiddenUnitsNumHiddenUnits列の行列です。

層のバイアス。数値ベクトルとして指定します。

このバイアス ベクトルは、層にあるコンポーネント (ゲート) の 4 つのバイアス ベクトルの連結です。この層は、4 つのベクトルを次の順序で垂直に連結します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

層のバイアスは学習可能なパラメーターです。ネットワークの学習時に、Biasが空ではない場合、trainNetworkBiasプロパティを初期値として使用します。Biasが空の場合、trainNetworkBiasInitializerによって指定された初期化子を使用します。

学習時、Bias4*NumHiddenUnits行 1 列の数値ベクトルです。

学習率および正則化

入力の重みの学習率係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、層の入力の重みの学習率係数が決定されます。たとえば、InputWeightsLearnRateFactor2の場合、層の入力の重みの学習率係数は現在のグローバル学習率の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、グローバル学習率が決定されます。

InputWeightsに含まれる 4 つの個々の行列について学習率係数の値を制御するには、1 行 4 列のベクトルを指定します。InputWeightsLearnRateFactorのエントリは、以下のコンポーネントの学習率係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

再帰重みの学習率係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、層の再帰重みの学習率が決定されます。たとえば、RecurrentWeightsLearnRateFactor2の場合、層の再帰重みの学習率は現在のグローバル学習率の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、グローバル学習率が決定されます。

RecurrentWeightsに含まれる 4 つの個々の行列について学習率係数の値を制御するには、1 行 4 列のベクトルを指定します。RecurrentWeightsLearnRateFactorのエントリは、以下のコンポーネントの学習率係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

バイアスの学習率係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor2の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、グローバル学習率が決定されます。

Biasに含まれる 4 つの個々のベクトルについて学習率係数の値を制御するには、1 行 4 列のベクトルを指定します。BiasLearnRateFactorのエントリは、以下のコンポーネントの学習率係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべてのベクトルに同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

入力の重みの L2正則化係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル L2正則化係数が乗算されて、層の入力の重みの L2正則化係数が決定されます。たとえば、InputWeightsL2Factor2の場合、層の入力の重みの L2正則化係数は現在のグローバル L2正則化係数の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、L2正則化係数が決定されます。

InputWeightsに含まれる 4 つの個々の行列の L2正則化係数の値を制御するには、1 行 4 列のベクトルを指定します。InputWeightsL2Factorのエントリは、以下のコンポーネントの L2正則化係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

再帰重みの L2正則化係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル L2正則化係数が乗算されて、層の再帰重みの L2正則化係数が決定されます。たとえば、RecurrentWeightsL2Factor2の場合、層の再帰重みの L2正則化係数は現在のグローバル L2正則化係数の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、L2正則化係数が決定されます。

RecurrentWeightsに含まれる 4 つの個々の行列の L2正則化係数の値を制御するには、1 行 4 列のベクトルを指定します。RecurrentWeightsL2Factorのエントリは、以下のコンポーネントの L2正則化係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

バイアスの L2正則化係数。非負のスカラーまたは 1 行 4 列の数値ベクトルとして指定します。

この係数にグローバル L2正則化係数が乗算されて、この層のバイアスの L2正則化が決定されます。たとえば、BiasL2Factor2の場合、この層のバイアスの L2正則化はグローバル L2正則化係数の 2 倍になります。関数trainingOptionsで指定した設定に基づいて、グローバル L2正則化係数が決定されます。

Biasに含まれる 4 つの個々のベクトルの L2正則化係数の値を制御するには、1 行 4 列のベクトルを指定します。BiasL2Factorのエントリは、以下のコンポーネントの L2正則化係数に対応します。

  1. 入力ゲート

  2. 忘却ゲート

  3. セル候補

  4. 出力ゲート

すべてのベクトルに同じ値を指定するには、非負のスカラーを指定します。

例:2

例:[1 2 1 1]

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

データ型:char|string

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

層への入力の数。

HasStateInputsプロパティが0(false) の場合、層は、入力データに対応する'in'という名前の 1 つの入力をもちます。この場合、層はHiddenStateプロパティとCellStateプロパティを使用して層処理を行います。

HasStateInputsプロパティが1(true) の場合、層は、それぞれ入力データ、隠れ状態、およびセル状態に対応する'in''hidden'、および'cell'という名前の 3 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1(true) の場合、HiddenStateプロパティとCellStateプロパティは空でなければなりません。

データ型:double

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

層の入力名。

HasStateInputsプロパティが0(false) の場合、層は、入力データに対応する'in'という名前の 1 つの入力をもちます。この場合、層はHiddenStateプロパティとCellStateプロパティを使用して層処理を行います。

HasStateInputsプロパティが1(true) の場合、層は、それぞれ入力データ、隠れ状態、およびセル状態に対応する'in''hidden'、および'cell'という名前の 3 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1(true) の場合、HiddenStateプロパティとCellStateプロパティは空でなければなりません。

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

層への出力の数。

HasStateOutputsプロパティが0(false) の場合、層は、出力データに対応する'out'という名前の 1 つの出力をもちます。

HasStateOutputsプロパティが1(true) の場合、層は、それぞれ出力データ、隠れ状態、およびセル状態に対応する'out''hidden'、および'cell'という名前の 3 つの出力をもちます。この場合、層は、計算した状態値も出力します。

データ型:double

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

層の出力名。

HasStateOutputsプロパティが0(false) の場合、層は、出力データに対応する'out'という名前の 1 つの出力をもちます。

HasStateOutputsプロパティが1(true) の場合、層は、それぞれ出力データ、隠れ状態、およびセル状態に対応する'out''hidden'、および'cell'という名前の 3 つの出力をもちます。この場合、層は、計算した状態値も出力します。

すべて折りたたむ

名前が'lstm1'で、隠れユニットが 100 個の LSTM 層を作成します。

layer = lstmLayer(100,'Name','lstm1')
layer = LSTMLayer with properties: Name: 'lstm1' InputNames: {'in'} OutputNames: {'out'} NumInputs: 1 NumOutputs: 1 HasStateInputs: 0 HasStateOutputs: 0 Hyperparameters InputSize: 'auto' NumHiddenUnits: 100 OutputMode: 'sequence' StateActivationFunction: 'tanh' GateActivationFunction: 'sigmoid' Learnable Parameters InputWeights: [] RecurrentWeights: [] Bias: [] State Parameters HiddenState: [] CellState: [] Show all properties

Layer配列に LSTM 層を含めます。

inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [...sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits) 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

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,...“阴谋”,'training-progress');

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

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

{

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

[XTest,YTest] = japaneseVowelsTestData;

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

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

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

acc = (YPred = =欧美)。/元素个数(欧美)
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];

アルゴリズム

すべて展開する

参照

[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

[3] Hochreiter, S, and J. Schmidhuber, 1997. Long short-term memory. Neural computation, 9(8), pp.1735–1780.

[4] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010.

[5] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In Proceedings of the 2015 IEEE International Conference on Computer Vision, 1026–1034. Washington, DC: IEEE Computer Vision Society, 2015.

[6] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks." arXiv preprint arXiv:1312.6120 (2013).

拡張機能

バージョン履歴

R2017b で導入

すべて展開する