このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
sequenceInputLayer
シーケンス入力層
説明
シーケンス入力層は、シーケンス データをニューラル ネットワークに入力し、データ正規化を適用します。
作成
説明
は、1 つ以上の名前と値の引数を使用して、オプションのプロパティを設定します。layer
= sequenceInputLayer(inputSize
,Name=Value
)
入力引数
入力のサイズ。正の整数または正の整数のベクトルとして指定します。
ベクトル シーケンス入力の場合、
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
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: sequenceInputLayer(12,Name="seq1")
は、入力サイズが 12
で 'seq1'
という名前をもつシーケンス入力層を作成します。
入力データの最小シーケンス長。正の整数として指定します。ネットワークで学習または予測を行うときに、入力データのタイム ステップが 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 = f(X)
という形式でなければなりません。ここで、X
は入力データ、出力Y
は正規化データです。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。 (R2024a 以降)
R2024a より前: 複素数値のデータをネットワークに入力するには、SplitComplexInputs
オプションが 1
(true
) でなければなりません。
ヒント
既定では、ソフトウェアは、関数 trainnet
の使用時に正規化統計量を自動的に計算します。学習時に時間を節約するため、正規化に必要な統計量を指定し、trainingOptions
で ResetInputNormalization
オプションを 0
(false
) に設定します。
パディング値などのすべての入力要素に正規化が適用されます。
SequenceInputLayer
オブジェクトは、Normalization
プロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char
| string
| function_handle
正規化の次元。次のいずれかに指定します。
"auto"
–ResetInputNormalization
学習オプションが0
(false
) の場合、いずれかの正規化統計量 (Mean
、StandardDeviation
、Min
、またはMax
) を指定し、統計量に一致する次元に対して正規化を行います。そうでない場合、学習時に統計量を再計算し、チャネル単位の正規化を適用します。"channel"
– チャネル単位の正規化。"element"
– 要素単位の正規化。"all"
– スカラーの統計量を使用してすべての値を正規化します。
SequenceInputLayer
オブジェクトは、NormalizationDimension
プロパティを文字ベクトルとして格納します。
ゼロ中心正規化および z スコア正規化の平均。数値配列または空として指定します。
ベクトル シーケンス入力の場合、
Mean
はチャネルごとの平均から成るInputSize
行 1 列のベクトル、数値スカラー、または[]
でなければなりません。2 次元イメージ シーケンス入力の場合、
Mean
はInputSize
と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
Mean
はInputSize
と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 x 1 xInputSize(4)
の配列、数値スカラー、または[]
でなければなりません。
Mean
プロパティを指定するには、Normalization
プロパティが "zerocenter"
または "zscore"
でなければなりません。Mean
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して平均を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを0
に設定します。
Mean
に複素数値を使用できます。 (R2024a 以降)Mean
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 平均を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
z スコア正規化に使用される標準偏差。数値配列、数値スカラー、または空として指定します。
ベクトル シーケンス入力の場合、
StandardDeviation
はチャネルごとの標準偏差から成るInputSize
行 1 列のベクトル、数値スカラー、または[]
でなければなりません。2 次元イメージ シーケンス入力の場合、
StandardDeviation
はInputSize
と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
StandardDeviation
はInputSize
と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 x 1 xInputSize(4)
の配列、または数値スカラーでなければなりません。
StandardDeviation
プロパティを指定するには、Normalization
が "zscore"
でなければなりません。StandardDeviation
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して標準偏差を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
StandardDeviation
に複素数値を使用できます。 (R2024a 以降)StandardDeviation
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 標準偏差を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
再スケーリングの最小値。数値配列または空として指定します。
Min
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Min
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して最小値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、Normalization
が"rescale-symmetric"
の場合はプロパティを-1
に設定し、"rescale-zero-one"
の場合はプロパティを0
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
再スケーリングの最大値。数値配列または空として指定します。
ベクトル シーケンス入力の場合、
Max
はチャネルごとの平均から成るInputSize
行 1 列のベクトル、または数値スカラーでなければなりません。2 次元イメージ シーケンス入力の場合、
Max
はInputSize
と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
Max
はInputSize
と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 x 1 xInputSize(4)
の配列、数値スカラー、または[]
でなければなりません。
Max
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Max
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して最大値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
入力データを実数部と虚数部に分割するためのフラグ。次のいずれかの値として指定します。
0
(false
) – 入力データを分割しません。1
(true
) – 入力データを実数部と虚数部に分割します。
SplitComplexInputs
が 1
の場合、層の出力に含まれるチャネル数は、入力データに含まれるチャネル数の 2 倍になります。たとえば、入力データが numChannels
個のチャネルをもつ複素数値の場合、層は 2*numChannels
個のチャネルをもつデータを出力します。このとき、1
~ numChannels
番目のチャネルには入力データの実数部が格納され、numChannels+1
~ 2*numChannels
番目のチャネルには入力データの虚数部が格納されます。入力データが実数の場合、numChannels+1
~ 2*numChannels
番目のチャネルはすべて 0 になります。
入力データが複素数値で、SplitComplexInputs
が 0
(false
) の場合、層は複素数値のデータを次の層に渡します。 (R2024a 以降)
R2024a より前: 複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
(true
) でなければなりません。
複素数値のデータをもつネットワークに学習させる方法を説明する例については、複素数値データを使用したネットワークの学習を参照してください。
プロパティ
シーケンス入力
入力のサイズ。正の整数または正の整数のベクトルとして指定します。
ベクトル シーケンス入力の場合、
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 = f(X)
という形式でなければなりません。ここで、X
は入力データ、出力Y
は正規化データです。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。 (R2024a 以降)
R2024a より前: 複素数値のデータをネットワークに入力するには、SplitComplexInputs
オプションが 1
(true
) でなければなりません。
ヒント
既定では、ソフトウェアは、関数 trainnet
の使用時に正規化統計量を自動的に計算します。学習時に時間を節約するため、正規化に必要な統計量を指定し、trainingOptions
で ResetInputNormalization
オプションを 0
(false
) に設定します。
パディング値などのすべての入力要素に正規化が適用されます。
SequenceInputLayer
オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char
| string
| function_handle
正規化の次元。次のいずれかに指定します。
"auto"
–ResetInputNormalization
学習オプションが0
(false
) の場合、いずれかの正規化統計量 (Mean
、StandardDeviation
、Min
、またはMax
) を指定し、統計量に一致する次元に対して正規化を行います。そうでない場合、学習時に統計量を再計算し、チャネル単位の正規化を適用します。"channel"
– チャネル単位の正規化。"element"
– 要素単位の正規化。"all"
– スカラーの統計量を使用してすべての値を正規化します。
SequenceInputLayer
オブジェクトは、このプロパティを文字ベクトルとして格納します。
ゼロ中心正規化および z スコア正規化の平均。数値配列または空として指定します。
ベクトル シーケンス入力の場合、
Mean
はチャネルごとの平均から成るInputSize
行 1 列のベクトル、数値スカラー、または[]
でなければなりません。2 次元イメージ シーケンス入力の場合、
Mean
はInputSize
と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
Mean
はInputSize
と同じサイズの数値配列、チャネルごとの平均から成る 1 x 1 x 1 xInputSize(4)
の配列、数値スカラー、または[]
でなければなりません。
Mean
プロパティを指定するには、Normalization
プロパティが "zerocenter"
または "zscore"
でなければなりません。Mean
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して平均を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを0
に設定します。
Mean
に複素数値を使用できます。 (R2024a 以降)Mean
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 平均を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
z スコア正規化に使用される標準偏差。数値配列、数値スカラー、または空として指定します。
ベクトル シーケンス入力の場合、
StandardDeviation
はチャネルごとの標準偏差から成るInputSize
行 1 列のベクトル、数値スカラー、または[]
でなければなりません。2 次元イメージ シーケンス入力の場合、
StandardDeviation
はInputSize
と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
StandardDeviation
はInputSize
と同じサイズの数値配列、チャネルごとの標準偏差から成る 1 x 1 x 1 xInputSize(4)
の配列、または数値スカラーでなければなりません。
StandardDeviation
プロパティを指定するには、Normalization
が "zscore"
でなければなりません。StandardDeviation
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して標準偏差を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
StandardDeviation
に複素数値を使用できます。 (R2024a 以降)StandardDeviation
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 標準偏差を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
再スケーリングの最小値。数値配列または空として指定します。
Min
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Min
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して最小値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、Normalization
が"rescale-symmetric"
の場合はプロパティを-1
に設定し、"rescale-zero-one"
の場合はプロパティを0
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
再スケーリングの最大値。数値配列または空として指定します。
ベクトル シーケンス入力の場合、
Max
はチャネルごとの平均から成るInputSize
行 1 列のベクトル、または数値スカラーでなければなりません。2 次元イメージ シーケンス入力の場合、
Max
はInputSize
と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 xInputSize(3)
の配列、数値スカラー、または[]
でなければなりません。3 次元イメージ シーケンス入力の場合、
Max
はInputSize
と同じサイズの数値配列、チャネルごとの最大値から成る 1 x 1 x 1 xInputSize(4)
の配列、数値スカラー、または[]
でなければなりません。
Max
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Max
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、パディング値を除く学習データを使用して最大値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
この プロパティ は読み取り専用です。
入力データを実数部と虚数部に分割するためのフラグ。次のいずれかの値として指定します。
0
(false
) – 入力データを分割しません。1
(true
) – 入力データを実数部と虚数部に分割します。
SplitComplexInputs
が 1
の場合、層の出力に含まれるチャネル数は、入力データに含まれるチャネル数の 2 倍になります。たとえば、入力データが numChannels
個のチャネルをもつ複素数値の場合、層は 2*numChannels
個のチャネルをもつデータを出力します。このとき、1
~ numChannels
番目のチャネルには入力データの実数部が格納され、numChannels+1
~ 2*numChannels
番目のチャネルには入力データの虚数部が格納されます。入力データが実数の場合、numChannels+1
~ 2*numChannels
番目のチャネルはすべて 0 になります。
入力データが複素数値で、SplitComplexInputs
が 0
(false
) の場合、層は複素数値のデータを次の層に渡します。 (R2024a 以降)
R2024a より前: 複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
(true
) でなければなりません。
複素数値のデータをもつネットワークに学習させる方法を説明する例については、複素数値データを使用したネットワークの学習を参照してください。
層
この プロパティ は読み取り専用です。
層の入力の数。この層には入力がありません。
データ型: double
この プロパティ は読み取り専用です。
層の入力名。この層には入力がありません。
データ型: cell
この プロパティ は読み取り専用です。
層からの出力の数。1
として格納されます。この層には単一の出力のみがあります。
データ型: double
この プロパティ は読み取り専用です。
出力名。{'out'}
として格納されます。この層には単一の出力のみがあります。
データ型: cell
例
入力サイズが 12 のシーケンス入力層を作成します。
layer = sequenceInputLayer(12)
layer = SequenceInputLayer with properties: Name: '' InputSize: 12 MinLength: 1 SplitComplexInputs: 0 Hyperparameters Normalization: 'none' NormalizationDimension: 'auto'
シーケンス入力層を Layer
配列に含めます。
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers = 4×1 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
名前が 'seq1'
の 224 行 224 列の RGB イメージのシーケンスに対して、シーケンス入力層を作成します。
layer = sequenceInputLayer([224 224 3], 'Name', 'seq1')
layer = SequenceInputLayer with properties: Name: 'seq1' InputSize: [224 224 3] MinLength: 1 SplitComplexInputs: 0 Hyperparameters Normalization: 'none' NormalizationDimension: 'auto'
sequence-to-label 分類について深層学習 LSTM ネットワークに学習をさせます。
サンプル データを WaveformData.mat
から読み込みます。データは、numObservations
行 1 列のシーケンスの cell 配列です。ここで、numObservations
はシーケンスの数です。各シーケンスは numTimeSteps
行 numChannels
列の数値配列です。ここで、numTimeSteps
はシーケンスのタイム ステップ数、numChannels
はシーケンスのチャネル数です。
load WaveformData
シーケンスの一部をプロットで可視化します。
numChannels = size(data{1},2); idx = [3 4 5 12]; figure tiledlayout(2,2) for i = 1:4 nexttile stackedplot(data{idx(i)},DisplayLabels="Channel "+string(1:numChannels)) xlabel("Time Step") title("Class: " + string(labels(idx(i)))) end
クラス名を表示します。
classNames = categories(labels)
classNames = 4×1 cell
{'Sawtooth'}
{'Sine' }
{'Square' }
{'Triangle'}
テスト用のデータを確保します。データの 90% から成る学習セットとデータの残りの 10% から成るテスト セットにデータを分割します。データを分割するには、この例にサポート ファイルとして添付されている関数 trainingPartitions
を使用します。このファイルにアクセスするには、例をライブ スクリプトとして開きます。
numObservations = numel(data); [idxTrain,idxTest] = trainingPartitions(numObservations, [0.9 0.1]); XTrain = data(idxTrain); TTrain = labels(idxTrain); XTest = data(idxTest); TTest = labels(idxTest);
LSTM ネットワーク アーキテクチャを定義します。入力サイズを入力データのチャネルの数として指定します。120 個の隠れユニットを含み、シーケンスの最後の要素を出力するように LSTM 層を指定します。最後に、クラス数と一致する出力サイズをもつ全結合層を含め、その後にソフトマックス層を含めます。
numHiddenUnits = 120; numClasses = numel(categories(TTrain)); layers = [ ... sequenceInputLayer(numChannels) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers = 4×1 Layer array with layers: 1 '' Sequence Input Sequence input with 3 dimensions 2 '' LSTM LSTM with 120 hidden units 3 '' Fully Connected 4 fully connected layer 4 '' Softmax softmax
学習オプションを指定します。学習率 0.01、勾配しきい値 1 で Adam ソルバーを使用して学習させます。エポックの最大数を 200 に設定し、すべてのエポックでデータをシャッフルします。既定では、ソフトウェアは GPU が利用できる場合に GPU で学習を行います。GPU を使用するには、Parallel Computing Toolbox とサポートされている GPU デバイスが必要です。サポートされているデバイスの詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。
options = trainingOptions("adam", ... MaxEpochs=200, ... InitialLearnRate=0.01,... Shuffle="every-epoch", ... GradientThreshold=1, ... Verbose=false, ... Metrics="accuracy", ... Plots="training-progress");
関数trainnet
を使用して LSTM ネットワークに学習させます。分類には、クロスエントロピー損失を使用します。
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
テスト データを分類します。学習に使用されるサイズと同じミニバッチ サイズを指定します。
scores = minibatchpredict(net,XTest); YTest = scores2label(scores,classNames);
予測の分類精度を計算します。
acc = mean(YTest == TTest)
acc = 0.8700
分類結果を混同チャートで表示します。
figure confusionchart(TTest,YTest)
sequence-to-label 分類用の LSTM ネットワークを作成するには、シーケンス入力層、LSTM 層、全結合層、およびソフトマックス層を含む層配列を作成します。
シーケンス入力層のサイズを入力データの特徴の数に設定します。全結合層のサイズをクラスの数に設定します。シーケンス長を指定する必要はありません。
LSTM 層では、隠れユニットの数と出力モード "last"
を指定します。
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer];
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];
sequence-to-one 回帰用の LSTM ネットワークを作成するには、シーケンス入力層、LSTM 層、および全結合層を含む層配列を作成します。
シーケンス入力層のサイズを入力データの特徴の数に設定します。全結合層のサイズを応答の数に設定します。シーケンス長を指定する必要はありません。
LSTM 層では、隠れユニットの数と出力モード "last"
を指定します。
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numResponses)];
sequence-to-sequence 回帰用の LSTM ネットワークを作成するには、sequence-to-one 回帰の場合と同じアーキテクチャを使用しますが、LSTM 層の出力モードを "sequence"
に設定します。
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="sequence") fullyConnectedLayer(numResponses)];
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];
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];
アルゴリズム
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、ベクトル シーケンス データを、最初の次元がチャネル次元に対応し、2 番目の次元がバッチ次元に対応し、3 番目の次元が時間次元に対応する 3 次元の配列として表すことができます。この表現は、"CBT"
(channel、batch、time) の形式になります。
ネットワークの入力層は、ネットワークで必要とされるデータのレイアウトを指定します。データのレイアウトが異なる場合、InputDataFormats
学習オプションを使用してレイアウトを指定します。
次の表に、シーケンス入力層をもつニューラル ネットワークが必要とするデータ レイアウトを示します。
データ | レイアウト |
---|---|
ベクトル シーケンス | オブジェクト関数 |
1 次元イメージ シーケンス | h×c×t の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。t はシーケンス長です。 |
2 次元イメージ シーケンス | h×w×c×t の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。t はシーケンス長です。 |
3 次元イメージ シーケンス | h×w×d×c×t。ここで、h、w、d、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。t はシーケンス長です。 |
ニューラル ネットワークへの入力が複素数値の場合、SplitComplexIputs
が 0
(false
) のとき、層は複素数値のデータを後続の層に渡します。 (R2024a 以降)
R2024a より前: 複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
(true
) でなければなりません。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。層の Mean
プロパティおよび StandardDeviation
プロパティでは、正規化オプション "zerocenter"
および "zscore"
に複素数値のデータを使用することもできます。
複素数値のデータをもつネットワークに学習させる方法を説明する例については、複素数値データを使用したネットワークの学習を参照してください。
拡張機能
コード生成では、指定なし (U) の次元をもつ
dlarray
オブジェクトをこの層に渡すことはサポートされていません。ベクトル シーケンス入力の場合、特徴の数はコード生成時に定数でなければなりません。
入力データの空間次元の数が 0、1、2、または 3 である場合、深層学習用サードパーティ ライブラリに依存しない C コードまたは C++ コードを生成できます。
ARM® Compute および Intel® MKL-DNN では、入力データに 0 個または 2 個の空間次元が含まれていなければなりません。
コード生成では、関数ハンドルを使用して指定される
'Normalization'
はサポートされません。コード生成では、複素数の入力がサポートされておらず、
'SplitComplexInputs'
オプションもサポートされていません。
使用上の注意および制限:
コード生成では、指定なし (U) の次元をもつ
dlarray
オブジェクトをこの層に渡すことはサポートされていません。GPU Coder™ を使用して CUDA® または C++ コードを生成するには、最初に深層ニューラル ネットワークを構築して学習させなければなりません。ネットワークの学習と評価が完了したら、コード ジェネレーターを構成してコードを生成し、NVIDIA® または ARM GPU プロセッサを使用するプラットフォームに畳み込みニューラル ネットワークを展開できます。詳細については、GPU Coder を使用した深層学習 (GPU Coder)を参照してください。
入力データの空間次元の数が 0、1、2、または 3 である場合、深層学習ライブラリに依存しない CUDA コードを生成できます。
NVIDIA CUDA 深層ニューラル ネットワーク ライブラリ (cuDNN) または NVIDIA TensorRT™ 高性能推論ライブラリを利用するコードを生成できます。
cuDNN ライブラリはベクトルおよび 2 次元イメージ シーケンスをサポートします。TensorRT ライブラリはベクトル入力シーケンスのみをサポートします。
入力のすべての空間次元とチャネル次元は、コード生成時に定数でなければなりません。以下に例を示します。
ベクトル シーケンス入力の場合、特徴の数はコード生成時に定数でなければなりません。
イメージ シーケンス入力の場合、高さ、幅、およびチャネル数は、コード生成時に定数でなければなりません。
コード生成では、関数ハンドルを使用して指定される
'Normalization'
はサポートされません。コード生成では、複素数の入力がサポートされておらず、
'SplitComplexInputs'
オプションもサポートされていません。
バージョン履歴
R2017b で導入ニューラル ネットワークへの入力が複素数値の場合、SplitComplexIputs
が 0
(false
) のとき、層は複素数値のデータを後続の層に渡します。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。層の Mean
プロパティおよび StandardDeviation
プロパティでは、正規化オプション "zerocenter"
および "zscore"
に複素数値のデータを使用することもできます。
R2024a 以降、DAGNetwork
オブジェクトおよび SeriesNetwork
オブジェクトは非推奨となりました。代わりに dlnetwork
オブジェクトを使用してください。
DAGNetwork
オブジェクトおよび SeriesNetwork
オブジェクトのサポートを削除する予定はありません。ただし、dlnetwork
オブジェクトには次の利点があるため、代わりにこのオブジェクトを使うことを推奨します。
dlnetwork
オブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。dlnetwork
オブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。関数
trainnet
はdlnetwork
オブジェクトをサポートしているため、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。dlnetwork
オブジェクトを使用した学習と予測は、通常、LayerGraph
とtrainNetwork
を使用したワークフローよりも高速です。
学習済みの DAGNetwork
オブジェクトまたは SeriesNetwork
オブジェクトを dlnetwork
オブジェクトに変換するには、関数 dag2dlnetwork
を使用します。
dlnetwork
オブジェクト内のシーケンス入力層は、DAGNetwork
オブジェクト内または SeriesNetwork
オブジェクト内のシーケンス入力層とは異なるレイアウトのデータを必要とします。ベクトル シーケンス入力の場合、オブジェクト関数 DAGNetwork
および SeriesNetwork
は、c 行 t 列の行列を必要とします。ここで、c はシーケンスの特徴の数、t はシーケンス長です。ベクトル シーケンス入力の場合、オブジェクト関数 dlnetwork
は、t 行 c 列の行列を必要とします。ここで、t はシーケンス長、c はシーケンスの特徴の数です。
R2020a 以降、trainNetwork
は正規化の統計値の計算時にパディング値を無視します。これは、sequenceInputLayer
の Normalization
オプションを使用すると学習結果がデータの操作の影響を受けなくなることを意味します。たとえば、'zerocenter'
正規化を実行すると、学習結果はデータの平均の影響を受けなくなります。
パディングされたシーケンスで学習させた場合、計算された正規化係数は以前のバージョンと異なる場合があるため、異なる結果が生成される可能性があります。
R2019b 以降では、sequenceInputLayer
は既定でゼロ中心正規化にチャネル単位の正規化を使用します。以前のバージョンでは、この層は要素単位の正規化を使用します。この動作を再現するには、この層の NormalizationDimension
オプションを 'element'
に設定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)