activations
深層学習ネットワーク層の活性化の計算
構文
説明
1 つの CPU または 1 つの GPU で深層学習ネットワーク層の活性化を計算できます。GPU を使用するには Parallel Computing Toolbox™ ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。名前と値の引数 ExecutionEnvironment
を使用して、ハードウェア要件を指定します。
学習済みの SeriesNetwork
または DAGNetwork
を使用して活性化を計算するには、関数 activations
を使用します。dlnetwork
オブジェクトの活性化を計算するには、関数 forward
または predict
を使用して、Outputs
オプションを指定します。
は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、ネットワーク活性化を返します。たとえば、act
= activations(___,Name=Value
)OutputAs="rows"
は、活性化出力形式を "rows"
に指定します。この構文は、前の構文の入力引数のいずれかと一緒に使用します。名前と値の引数は、他のすべての入力引数の後で指定します。
例
SqueezeNet を使用した特徴抽出
この例では、事前学習済みの畳み込みニューラル ネットワークから学習済みのイメージの特徴を抽出し、これらの特徴を使用してイメージ分類器に学習させる方法を説明します。
特徴抽出は、事前学習済みの深いネットワークの表現能力を活用できる最も簡単で時間のかからない方法です。たとえば、抽出した特徴に対して fitcecoc
(Statistics and Machine Learning Toolbox™) を使用してサポート ベクター マシン (SVM) に学習させることができます。特徴抽出が必要とするものはデータを一巡する 1 つのパスのみであるため、ネットワークの学習を加速するための GPU がない場合、これは適切な開始点となります。
データの読み込み
サンプル イメージを解凍してイメージ データストアとして読み込みます。imageDatastore
は、フォルダー名に基づいてイメージに自動的にラベルを付け、データを ImageDatastore
オブジェクトとして格納します。イメージ データストアを使用すると、メモリに収まらないデータを含む大きなイメージ データを格納できます。データを 70% の学習データと 30% のテスト データに分割します。
unzip("MerchData.zip"); imds = imageDatastore("MerchData", ... IncludeSubfolders=true, ... LabelSource="foldernames"); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,"randomized");
このとき、この非常に小さなデータセットには、55 個の学習イメージと 20 個の検証イメージが格納されています。いくつかのサンプル イメージを表示します。
numImagesTrain = numel(imdsTrain.Labels);
idx = randperm(numImagesTrain,16);
I = imtile(imds,"Frames",idx);
figure
imshow(I)
事前学習済みのネットワークの読み込み
事前学習済みの SqueezeNet ネットワークを読み込みます。SqueezeNet は、100 万個を超えるイメージについて学習済みであり、イメージを 1,000 個のオブジェクト カテゴリ (キーボード、マウス、鉛筆、多くの動物など) に分類できます。結果として、このモデルは広範囲のイメージに対する豊富な特徴表現を学習しています。
net = squeezenet;
ネットワーク アーキテクチャを解析します。
analyzeNetwork(net)
最初の層であるイメージ入力層には、サイズが 227 x 227 x 3 の入力イメージが必要です。ここで、3 はカラー チャネルの数です。
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
イメージの特徴の抽出
ネットワークは、入力イメージの階層表現を構築します。深い層には、それ以前の層の低レベルの特徴を使用して構築された、より高レベルの特徴が含まれます。学習イメージとテスト イメージの特徴表現を取得するには、グローバル平均プーリング層 "pool10"
で activations
を使用します。イメージの低レベルの表現を取得するには、ネットワークの初期の層を使用します。
ネットワークにはサイズが 227 x 227 x 3 の入力イメージが必要ですが、イメージ データストアにあるイメージのサイズは異なります。学習およびテスト イメージのサイズをネットワークへの入力前に自動的に変更するには、拡張イメージ データストアを作成して、目的のイメージ サイズを指定し、これらのデータストアを activations
の入力引数として使用します。
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = "pool10"; featuresTrain = activations(net,augimdsTrain,layer,OutputAs="rows"); featuresTest = activations(net,augimdsTest,layer,OutputAs="rows");
学習データおよびテスト データからクラス ラベルを抽出します。
TTrain = imdsTrain.Labels; TTest = imdsTest.Labels;
イメージ分類器の当てはめ
学習イメージから抽出された特徴を予測子変数として使用し、fitcecoc
(Statistics and Machine Learning Toolbox) を使用してマルチクラス サポート ベクター マシン (SVM) を当てはめます。
mdl = fitcecoc(featuresTrain,TTrain);
テスト イメージの分類
学習済みの SVM モデルとテスト イメージから抽出された特徴を使用して、テスト イメージを分類します。
YPred = predict(mdl,featuresTest);
4 個のサンプル テスト イメージと、その予測ラベルを表示します。
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
テスト セットに対する分類精度を計算します。精度とは、ネットワークによって予測が正しく行われるラベルの割合です。
accuracy = mean(YPred == TTest)
accuracy = 0.9500
この SVM は高い精度を示しています。特徴抽出を使用しても十分な精度が得られない場合、代わりに転移学習を試してください。
入力引数
net
— 学習済みネットワーク
SeriesNetwork
オブジェクト | DAGNetwork
オブジェクト
学習済みネットワーク。SeriesNetwork
または DAGNetwork
オブジェクトとして指定します。事前学習済みのネットワークをインポートする (たとえば、関数 googlenet
を使用する)、または trainNetwork
を使用して独自のネットワークに学習させることによって、学習済みネットワークを取得できます。
images
— イメージ データ
データストア | 数値配列 | table
イメージ データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | ImageDatastore | ディスクに保存されたイメージのデータストア | イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用して予測を行います。 イメージのサイズが異なる場合は |
AugmentedImageDatastore | サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア | イメージのサイズが異なる場合に、ディスクに保存されているイメージを使用して予測を行います。 | |
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア |
| |
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア |
| |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア | 他のデータストアでサポートされていない形式のデータを使用して予測を行います。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列 | 数値配列として指定されたイメージ | メモリに収まり、なおかつサイズ変更などの追加の処理を必要としないデータを使用して予測を行います。 | |
table | table として指定されたイメージ | table に格納されたデータを使用して予測を行います。 |
複数の入力をもつネットワークでデータストアを使用する場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
ヒント
ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences
を使用します。
データストア
データストアは、イメージと応答のミニバッチを読み取ります。データストアは、メモリに収まらないデータがある場合や、入力データのサイズを変更したい場合に使用します。
以下のデータストアは、イメージ データ用の activations
と直接互換性があります。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
ヒント
イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore
を使用します。ImageDatastore
オブジェクトの ReadFcn
オプションを使用しないでください。
ImageDatastore
を使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。ReadFcn
オプションをカスタム関数に設定した場合、ImageDatastore
は事前取得を行わないため、通常、速度が大幅に低下します。
関数 transform
および combine
を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、classify
に必要な形式に変換できます。
データストア出力に必要な形式は、ネットワーク アーキテクチャによって異なります。
ネットワーク アーキテクチャ | データストア出力 | 出力の例 |
---|---|---|
単一入力 | table または cell 配列。最初の列は予測子を指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム データストアは table を出力しなければなりません。 | data = read(ds) data = 4×1 table Predictors __________________ {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} |
data = read(ds) data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} | ||
複数入力 | 少なくとも 最初の 入力の順序は、ネットワークの | data = read(ds) data = 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} |
予測子の形式は、データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h×w×c の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
3 次元イメージ | h×w×d×c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
詳細については、深層学習用のデータストアを参照してください。
数値配列
メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータの場合、イメージのデータ セットを数値配列として指定できます。
数値配列のサイズと形状は、イメージ データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h×w×c×N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。 |
3 次元イメージ | h×w×d×c×N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。 |
table
データストアまたは数値配列の代わりに、イメージを table で指定することもできます。
イメージを table で指定した場合、table の各行は観測値に対応します。
イメージ入力の場合、予測子は table の最初の列に格納し、次のいずれかとして指定しなければなりません。
イメージの絶対ファイル パスまたは相対ファイル パス。文字ベクトルとして指定します。
2 次元イメージを表す h×w×c の数値配列が格納された 1 行 1 列の cell 配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。
ヒント
複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
複素数のサポート: あり
sequences
— シーケンス データまたは時系列データ
データストア | 数値配列の cell 配列 | 数値配列
シーケンス データまたは時系列データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア |
| |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア | 他のデータストアでサポートされていない形式のデータを使用して予測を行います。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列または cell 配列 | 数値配列として指定した、単一のシーケンス。または数値配列の cell 配列として指定した、シーケンスのデータ セット | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、予測を行います。 |
データストア
データストアは、シーケンスと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に使用します。
以下のデータストアは、シーケンス データ用の activations
と直接互換性があります。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、activations
に必要な table または cell 配列形式に変換できます。たとえば、ArrayDatastore
オブジェクトおよび TabularTextDatastore
オブジェクトをそれぞれ使用して、インメモリ配列および CSV ファイルから読み取ったデータの変換と結合を行うことができます。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。
データストア出力 | 出力の例 |
---|---|
table | data = read(ds) data = 4×2 table Predictors __________________ {12×50 double} {12×50 double} {12×50 double} {12×50 double} |
cell 配列 | data = read(ds) data = 4×2 cell array {12×50 double} {12×50 double} {12×50 double} {12×50 double} |
予測子の形式は、データのタイプによって異なります。
データ | 予測子の形式 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
1 次元イメージ シーケンス | h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
2 次元イメージ シーケンス | h x w x c x s の配列。ここで、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
3 次元イメージ シーケンス | h x w x d x c x s の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
予測子が table で返される場合、数値スカラーまたは数値行ベクトルが要素に含まれているか、数値配列が格納された 1 行 1 列の cell 配列が要素に含まれていなければなりません。
詳細については、深層学習用のデータストアを参照してください。
数値配列または cell 配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータの場合、単一のシーケンスを数値配列として指定するか、シーケンスのデータ セットを数値配列の cell 配列として指定することができます。
cell 配列入力の場合、cell 配列は、数値配列から成る N 行 1 列の cell 配列でなければなりません。ここで、N は観測値の数です。シーケンスを表す数値配列のサイズと形状は、シーケンス データのタイプによって異なります。
入力 | 説明 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
1 次元イメージ シーケンス | h×c×s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 |
2 次元イメージ シーケンス | h×w×c×s の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 |
3 次元イメージ シーケンス | h×w×d×c×s。ここで、h、w、d、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 |
ヒント
複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
複素数のサポート: あり
features
— 特徴データ
データストア | 数値配列 | table
特徴データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア |
| |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア | 他のデータストアでサポートされていない形式のデータを使用して予測を行います。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
table | table として指定された特徴データ | table に格納されたデータを使用して予測を行います。 | |
数値配列 | 数値配列として指定された特徴データ | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、予測を行います。 |
データストア
データストアは、特徴データと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に使用します。
以下のデータストアは、特徴データ用の activations
と直接互換性があります。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、activations
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
複数の入力があるネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ネットワーク アーキテクチャによって異なります。
ネットワーク アーキテクチャ | データストア出力 | 出力の例 |
---|---|---|
単入力層 | 少なくとも 1 つの列をもつ table または cell 配列。最初の列は予測子を指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム ミニバッチ データストアは、table を出力しなければなりません。 | 1 つの入力があるネットワークの table: data = read(ds) data = 4×2 table Predictors __________________ {24×1 double} {24×1 double} {24×1 double} {24×1 double} |
1 つの入力があるネットワークの cell 配列: data = read(ds) data = 4×1 cell array {24×1 double} {24×1 double} {24×1 double} {24×1 double} | ||
多入力層 | 少なくとも 最初の 入力の順序は、ネットワークの | 2 つの入力があるネットワークの cell 配列: data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} |
予測子は、c 行 1 列の列ベクトルでなければなりません。ここで、c は特徴の数です。
詳細については、深層学習用のデータストアを参照してください。
table
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データと応答を table として指定できます。
table の各行は観測値に対応します。table の列での予測子の配置は、タスクのタイプによって異なります。
タスク | 予測子 |
---|---|
特徴分類 | 1 つ以上の列でスカラーとして指定された特徴。 |
数値配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。
数値配列は、N 行 numFeatures
列の数値配列でなければなりません。ここで、N は観測値の数、numFeatures
は入力データの特徴の数です。
ヒント
複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
複素数のサポート: あり
X1,...,XN
— 複数の入力をもつネットワークの数値配列または cell 配列
数値配列 | cell 配列
複数の入力をもつネットワークの数値配列または cell 配列。
イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、images
、sequences
、または features
のそれぞれの引数の説明に記載されている形式と一致しなければなりません。
複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。
複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
複素数のサポート: あり
mixed
— 混在データ
TransformedDatastore
| CombinedDatastore
| カスタム ミニバッチ データストア
混在データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 |
---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア |
|
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア | 他のデータストアでサポートされていない形式のデータを使用して予測を行います。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
関数 transform
および combine
を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、activations
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ネットワーク アーキテクチャによって異なります。
データストア出力 | 出力の例 |
---|---|
入力の順序は、ネットワークの | data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} |
イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、images
、sequences
、または features
のそれぞれの引数の説明に記載されている形式と一致しなければなりません。
複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。
ヒント
数値配列をデータストアに変換するには、arrayDatastore
を使用します。
layer
— 活性化の抽出元の層
数値インデックス | 文字ベクトル
活性化の抽出元の層。数値インデックスまたは文字ベクトルとして指定します。
SeriesNetwork
オブジェクトの活性化を計算するには、層の数値インデックスを使用するか、層の名前に対応する文字ベクトルとして層を指定します。
DAGNetwork
オブジェクトの活性化を計算するには、層の名前に対応する文字ベクトルとして層を指定します。層に複数の出力がある場合、層と出力を、層の名前、その後に文字 "/"、層出力の名前と続けて指定します。つまり、layer
は 'layerName/outputName'
の形式を取ります。
例: 3
例: 'conv1'
例: 'mpool/out'
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: MiniBatchSize=256
はミニバッチのサイズを 256 に指定します。
OutputAs
— 出力活性化の形式
"channels"
(既定値) | "rows"
| "columns"
出力活性化の形式。"channels"
、"rows"
、または "columns"
として指定します。出力形式の説明については、act
を参照してください。
イメージ入力の場合、OutputAs
オプションが "channels"
の場合、入力データのイメージは、ネットワークのイメージ入力層の入力サイズより大きくすることができます。その他の出力形式では、入力のイメージのサイズは、ネットワークのイメージ入力層の入力サイズと同じでなければなりません。
MiniBatchSize
— ミニバッチのサイズ
128
(既定値) | 正の整数
予測に使用するミニバッチのサイズ。正の整数として指定します。ミニバッチのサイズが大きくなるとより多くのメモリが必要になりますが、予測時間が短縮される可能性があります。
SequenceLength
— シーケンスのパディングまたは切り捨てを行うオプション
"longest"
(既定値) | "shortest"
| 正の整数
入力シーケンスのパディング、切り捨て、または分割を行うオプション。次のいずれかに指定します。
"longest"
— 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってニューラル ネットワークにノイズが生じることがあります。"shortest"
— 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。正の整数 — 各ミニバッチについて、そのミニバッチ内で最も長いシーケンスに合わせてシーケンスをパディングした後、指定した長さのより小さいシーケンスに分割します。分割が発生すると、追加のミニバッチが作成されます。指定したシーケンス長によってデータのシーケンスを均等に分割できない場合、最後のシーケンスを含むミニバッチの長さは指定した長さより短くなります。シーケンス全体がメモリに収まらない場合は、このオプションを使用します。または、
MiniBatchSize
オプションをより小さい値に設定して、ミニバッチごとのシーケンス数を減らしてみます。このオプションは関数
trainNetwork
のみをサポートします。
入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
SequencePaddingValue
— シーケンスをパディングする値
0
(既定値) | スカラー
入力シーケンスをパディングする値。スカラーとして指定します。
ニューラル ネットワーク全体にエラーが伝播される可能性があるため、NaN
でシーケンスをパディングしないでください。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SequencePaddingDirection
— パディングまたは切り捨ての方向
"right"
(既定値) | "left"
パディングまたは切り捨ての方向。次のいずれかに指定します。
"right"
— シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。"left"
— シーケンスの左側に対してパディングまたは切り捨てを行います。シーケンスが同じタイム ステップで終わるように、シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。
再帰層は 1 タイム ステップずつシーケンス データを処理するため、再帰層の OutputMode
プロパティが "last"
の場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。シーケンス データの左側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection
オプションを "left"
に設定します。
sequence-to-sequence ニューラル ネットワークの場合 (各再帰層について OutputMode
プロパティが "sequence"
である場合)、最初のタイム ステップでパディングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。シーケンスの右側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection
オプションを "right"
に設定します。
入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。
Acceleration
— パフォーマンスの最適化
"auto"
(既定値) | "mex"
| "none"
パフォーマンスの最適化。次のいずれかとして指定します。
"auto"
— 入力ネットワークとハードウェア リソースに適した最適化の回数を自動的に適用します。"mex"
— MEX 関数をコンパイルして実行します。このオプションは GPU の使用時にのみ利用できます。GPU を使用するには Parallel Computing Toolbox ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。"none"
— すべての高速化を無効にします。
Acceleration
が "auto"
の場合、MATLAB® は互換性のある最適化を複数適用し、MEX 関数を生成しません。
"auto"
オプションおよび "mex"
オプションは、パフォーマンス上のメリットがありますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。新しい入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。
"mex"
オプションは、関数の呼び出しに使用されたネットワークとパラメーターに基づいて MEX 関数を生成し、実行します。複数の MEX 関数を一度に 1 つのネットワークに関連付けることができます。ネットワークの変数をクリアすると、そのネットワークに関連付けられている MEX 関数もクリアされます。
"mex"
オプションは、サポートされている層 (GPU Coder)のページにリストされている層 (sequenceInputLayer
オブジェクトを除く) を含むネットワークをサポートしています。
"mex"
オプションは、単一の GPU の使用時に利用できます。
"mex"
オプションを使用するには、C/C++ コンパイラがインストールされ、GPU Coder™ Interface for Deep Learning サポート パッケージがなければなりません。MATLAB でアドオン エクスプローラーを使用してサポート パッケージをインストールします。設定手順については、MEX の設定 (GPU Coder)を参照してください。GPU Coder は不要です。
量子化されたネットワークでは、"mex"
オプションには、Compute Capability 6.1、6.3、またはそれ以上の CUDA® 対応 NVIDIA® GPU が必要です。
"mex"
オプションを使用する場合、MATLAB Compiler™ はネットワークの展開をサポートしません。
ExecutionEnvironment
— ハードウェア リソース
"auto"
(既定値) | "gpu"
| "cpu"
| "multi-gpu"
| "parallel"
ハードウェア リソース。次のいずれかとして指定します。
"auto"
— 利用可能な場合は GPU を使用し、そうでない場合は CPU を使用します。"gpu"
— GPU を使用します。GPU を使用するには Parallel Computing Toolbox ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。"cpu"
— CPU を使用します。"multi-gpu"
— 既定のクラスター プロファイルに基づいてローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用します。現在の並列プールがない場合、使用可能な GPU の数と等しいプール サイズの並列プールが起動されます。"parallel"
— 既定のクラスター プロファイルに基づいてローカルまたはリモートの並列プールを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、固有の GPU を持つワーカーのみが計算を実行します。プールに GPU がない場合、代わりに使用可能なすべての CPU ワーカーで計算が実行されます。
さまざまな実行環境をどのような場合に使用するかの詳細は、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
"gpu"
、"multi-gpu"
、および "parallel"
のオプションを使用するには、Parallel Computing Toolbox が必要です。深層学習に GPU を使用するには、サポートされている GPU デバイスもなければなりません。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。これらのいずれかのオプションの選択時に Parallel Computing Toolbox または適切な GPU を利用できない場合、エラーが返されます。
ExecutionEnvironment
を "multi-gpu"
または "parallel"
に設定し、再帰層を含むネットワークを使用して並列に予測を行うには、SequenceLength
オプションを "shortest"
または "longest"
に設定しなければなりません。
State
パラメーターをもつカスタム層を含むネットワークは、並列の予測をサポートしていません。
出力引数
act
— ネットワーク層からの活性化
数値配列 | cell 配列
ネットワーク層からの活性化。数値配列、または数値配列の cell 配列として返されます。act
の形式は、入力データのタイプ、層出力のタイプ、および指定された OutputAs
オプションによって異なります。
イメージまたは折りたたみシーケンス出力
層がイメージまたは折りたたみシーケンス データを出力する場合、act
は数値配列です。
OutputAs | act |
---|---|
"channels" | 2 次元イメージ出力の場合、 3 次元イメージ出力の場合、 折りたたみ 2 次元イメージ シーケンス出力の場合、 折りたたみ 3 次元イメージ シーケンス出力の場合、 |
"rows" | 2 次元および 3 次元イメージ出力の場合、 折りたたみ 2 次元および 3 次元イメージ シーケンス出力の場合、 |
"columns" | 2 次元および 3 次元イメージ出力の場合、 折りたたみ 2 次元および 3 次元イメージ シーケンス出力の場合、 |
シーケンス出力
layer
にシーケンス出力 (たとえば、出力モードが "sequence"
の LSTM 層) がある場合、act
は cell 配列になります。この場合、"OutputAs"
オプションは "channels"
でなければなりません。
OutputAs | act |
---|---|
"channels" | ベクトル シーケンス出力の場合、 2 次元イメージ シーケンス出力の場合、 3 次元イメージ シーケンス出力の場合、 この場合、 |
特徴ベクトルと単一のタイム ステップの出力
layer
が特徴ベクトルまたはシーケンスの単一のタイム ステップを出力する場合 (たとえば、出力モードが "last"
の LSTM 層)、act
は数値配列になります。
OutputAs | act |
---|---|
"channels" | ベクトル データを含む特徴ベクトルまたは単一のタイム ステップの場合、 2 次元イメージ データを含む単一のタイム ステップの場合、 3 次元イメージ データを含む単一のタイム ステップの場合、 |
"rows" | n 行 m 列の行列。ここで、n は観測値の数、m は選択した層からの出力要素の数です。この場合、act(i,:) には i 番目のシーケンスの活性化が含まれます。 |
"columns" | m 行 n 列の行列。ここで、m は選択した層からの出力要素の数、n は観測値の数です。この場合、act(:,i) には i 番目のイメージの活性化が含まれます。 |
アルゴリズム
浮動小数点演算
関数 trainnet
または trainNetwork
を使用してニューラル ネットワークに学習させる場合や、DAGNetwork
オブジェクトおよび SeriesNetwork
オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。予測および検証のための関数には、predict
、classify
、および activations
があります。CPU と GPU の両方を使用してニューラル ネットワークに学習させる場合、単精度演算が使用されます。
再現性
最高のパフォーマンスを提供するために、GPU を使用した MATLAB での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
C++ コード生成は、以下の構文をサポートします。
act = activations(net,images,layer)
(ここで、images
は数値配列)act = activations(net,sequences,layer)
(ここで、sequences
は cell 配列)act = activations(net,features,layer)
(ここで、features
は数値配列)act = activations(__,Name,Value)
(前述の構文のいずれかを使用)
数値入力の場合、入力のサイズは可変であってはなりません。入力のサイズはコード生成時に固定でなければなりません。
ベクトル シーケンス入力の場合、特徴の数はコード生成時に定数でなければなりません。シーケンスの長さは可変サイズにできます。
イメージ シーケンス入力の場合、高さ、幅、およびチャネル数は、コード生成時に定数でなければなりません。
layer
引数は、コード生成時に定数でなければなりません。コード生成では、名前と値のペアの引数
OutputAs
、MiniBatchSize
、SequenceLength
、SequencePaddingDirection
、およびSequencePaddingValue
のみがサポートされています。すべての名前と値のペアはコンパイル時の定数でなければなりません。出力の活性化の形式は
"channels"
でなければなりません。コード生成では、名前と値のペア
SequenceLength
のオプションとして"longest"
と"shortest"
のみがサポートされています。Intel® MKL-DNN ターゲット用のコード生成では、
SequenceLength="longest"
、SequencePaddingDirection="left"
、およびSequencePaddingValue=0
の名前と値の引数の組み合わせがサポートされません。
深層学習ニューラル ネットワーク用のコードの生成の詳細は、MATLAB Coder を使用した深層学習コード生成のワークフロー (MATLAB Coder)を参照してください。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
GPU コード生成は、以下の構文をサポートします。
act = activations(net,images,layer)
(ここで、images
は数値配列)act = activations(net,sequences,layer)
(ここで、sequences
は cell 配列または数値配列)act = activations(net,features,layer)
(ここで、features
は数値配列)act = activations(__,Name,Value)
(前述の構文のいずれかを使用)
数値入力の場合、入力のサイズは可変であってはなりません。入力のサイズはコード生成時に固定でなければなりません。
GPU コード生成では、関数
activations
へのgpuArray
入力はサポートされません。cuDNN ライブラリはベクトルおよび 2 次元イメージ シーケンスをサポートします。TensorRT ライブラリはベクトル入力シーケンスのみをサポートします。ARM®
Compute Library
for GPU は再帰型ネットワークをサポートしていません。ベクトル シーケンス入力の場合、特徴の数はコード生成時に定数でなければなりません。シーケンスの長さは可変サイズにできます。
イメージ シーケンス入力の場合、高さ、幅、およびチャネル数は、コード生成時に定数でなければなりません。
layer
引数は、コード生成時に定数でなければなりません。コード生成では、名前と値のペアの引数
OutputAs
、MiniBatchSize
、SequenceLength
、SequencePaddingDirection
、およびSequencePaddingValue
のみがサポートされています。すべての名前と値のペアはコンパイル時の定数でなければなりません。出力の活性化の形式は
"channels"
でなければなりません。コード生成では、名前と値のペア
SequenceLength
のオプションとして"longest"
と"shortest"
のみがサポートされています。関数
activations
の GPU コード生成では、半精度浮動小数点データ型として定義されている入力がサポートされます。詳細については、half
(GPU Coder) を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
入力データが以下の場合、
ExecutionEnvironment
オプションは"auto"
または"gpu"
でなければなりません。gpuArray
gpuArray
オブジェクトを含む cell 配列gpuArray
オブジェクトを含む tablegpuArray
オブジェクトを含む cell 配列を出力するデータストアgpuArray
オブジェクトを含む table を出力するデータストア
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2022b: SequenceLength
オプションを整数として指定した場合、予測関数は、分割を行う前に最も長いシーケンスに合わせてミニバッチをパディングする
R2022b 以降、関数 predict
、classify
、predictAndUpdateState
、classifyAndUpdateState
、および activations
を使用してシーケンス データで予測を行うときに、SequenceLength
オプションが整数である場合、各ミニバッチ内で最も長いシーケンスに合わせてシーケンスがパディングされた後、指定したシーケンス長でシーケンスが分割されてミニバッチが作成されます。SequenceLength
によってミニバッチのシーケンスを均等に分割できない場合、最後に分割されたミニバッチの長さは SequenceLength
より短くなります。この動作によって、パディング値しか含まれないタイム ステップが予測に影響するのを防ぐことができます。
以前のリリースでは、SequenceLength
の倍数に最も近く、かつミニバッチ長以上の長さとなるように、シーケンスのミニバッチをパディングしてから、データが分割されていました。この動作を再現するには、ミニバッチの長さが SequenceLength
の適切な倍数となるように、入力データを手動でパディングします。sequence-to-sequence のワークフローでは、さらに、パディング値に対応するタイム ステップを出力から手動で削除しなければならない場合があります。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)