Main Content

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

activations

深層学習ネットワーク層の活性化の計算

説明

1 つの CPU または 1 つの GPU で深層学習ネットワーク層の活性化を計算できます。GPU を使用するには Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。

学習済みの SeriesNetwork または DAGNetwork を使用して活性化を計算するには、関数 activations を使用します。dlnetwork オブジェクトの活性化を計算するには、関数 forward または predict を使用して、Outputs オプションを指定します。

act = activations(net,images,layer) は、指定されたイメージを使用して、layer という名前または番号をもつ層のネットワーク活性化を返します。

act = activations(net,sequences,layer) は、指定されたシーケンスを使用して、層のネットワーク活性化を返します。

act = activations(net,features,layer) は、指定された特徴データを使用して、層のネットワーク活性化を返します。

act = activations(net,X1,...,XN,layer) は、多入力ネットワーク net の数値または cell 配列 X1、…、XN のデータを使用して、層のネットワーク活性化を返します。入力 Xi は、ネットワーク入力 net.InputNames(i) に対応します。

act = activations(net,mixed,layer) は、混在するデータ型から成る複数の入力をもつ学習済みネットワーク net を使用して、層のネットワーク活性化を返します。

act = activations(___,Name=Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、ネットワーク活性化を返します。たとえば、OutputAs="rows" は、活性化出力形式を "rows" に指定します。この構文は、前の構文の入力引数のいずれかと一緒に使用します。名前と値の引数は、他のすべての入力引数の後で指定します。

すべて折りたたむ

この例では、事前学習済みの畳み込みニューラル ネットワークから学習済みのイメージの特徴を抽出し、これらの特徴を使用してイメージ分類器に学習させる方法を説明します。

特徴抽出は、事前学習済みの深いネットワークの表現能力を活用できる最も簡単で時間のかからない方法です。たとえば、抽出した特徴に対して 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 は高い精度を示しています。特徴抽出を使用しても十分な精度が得られない場合、代わりに転移学習を試してください。

入力引数

すべて折りたたむ

学習済みネットワーク。SeriesNetwork または DAGNetwork オブジェクトとして指定します。事前学習済みのネットワークをインポートする (たとえば、関数 googlenet を使用する)、または trainNetwork を使用して独自のネットワークに学習させることによって、学習済みネットワークを取得できます。

イメージ データ。次のいずれかとして指定します。

データ型説明使用例
データストアImageDatastoreディスクに保存されたイメージのデータストア

イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用して予測を行います。

イメージのサイズが異なる場合は AugmentedImageDatastore オブジェクトを使用します。

AugmentedImageDatastoreサイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア

イメージのサイズが異なる場合に、ディスクに保存されているイメージを使用して予測を行います。

TransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア

  • activations でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • 異なるデータ ソースから取得した予測子を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア

他のデータストアでサポートされていない形式のデータを使用して予測を行います。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

数値配列数値配列として指定されたイメージメモリに収まり、なおかつサイズ変更などの追加の処理を必要としないデータを使用して予測を行います。
tabletable として指定されたイメージtable に格納されたデータを使用して予測を行います。

複数の入力をもつネットワークでデータストアを使用する場合、データストアは TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトでなければなりません。

ヒント

ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences を使用します。

データストア

データストアは、イメージと応答のミニバッチを読み取ります。データストアは、メモリに収まらないデータがある場合や、入力データのサイズを変更したい場合に使用します。

以下のデータストアは、イメージ データ用の activations と直接互換性があります。

ImageDatastore オブジェクトを使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができる点に注意してください。イメージの読み取りにカスタム関数を使用する場合、ImageDatastore オブジェクトは事前取得を行いません。

ヒント

イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore を使用します。

関数 imageDatastorereadFcn オプションは通常、速度が大幅に低下するため、前処理またはサイズ変更に使用しないでください。

関数 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}
複数入力

少なくとも numInputs 個の列をもつ cell 配列。numInputs はネットワーク入力の数です。

最初の numInputs 個の列は、各入力の予測子を指定します。

入力の順序は、ネットワークの InputNames プロパティによって指定されます。

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 は、それぞれイメージの高さ、幅、およびチャネル数に対応します。

シーケンス データまたは時系列データ。次のいずれかとして指定します。

データ型説明使用例
データストアTransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア

  • activations でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • 異なるデータ ソースから取得した予測子を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア

他のデータストアでサポートされていない形式のデータを使用して予測を行います。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

数値配列または 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 はシーケンス長です。

特徴データ。次のいずれかとして指定します。

データ型説明使用例
データストアTransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア

  • activations でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • 異なるデータ ソースから取得した予測子を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア

他のデータストアでサポートされていない形式のデータを使用して予測を行います。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

tabletable として指定された特徴データ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}

多入力層

少なくとも numInputs 個の列をもつ cell 配列。numInputs はネットワーク入力の数です。

最初の numInputs 個の列は、各入力の予測子を指定します。

入力の順序は、ネットワークの InputNames プロパティによって指定されます。

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 は入力データの特徴の数です。

複数の入力をもつネットワークの数値配列または cell 配列。

イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、imagessequences、または features のそれぞれの引数の説明に記載されている形式と一致しなければなりません。

複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。

混在データ。次のいずれかとして指定します。

データ型説明使用例
TransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • activations でサポートされていないデータストアの出力を、必要な形式に変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • 異なるデータ ソースから取得した予測子を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア

他のデータストアでサポートされていない形式のデータを使用して予測を行います。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

関数 transform および combine を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、activations に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。

データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ネットワーク アーキテクチャによって異なります。

データストア出力出力の例

numInputs 列の cell 配列。numInputs はネットワーク入力の数です。

入力の順序は、ネットワークの InputNames プロパティによって指定されます。

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}

イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、imagessequences、または features のそれぞれの引数の説明に記載されている形式と一致しなければなりません。

複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。

ヒント

数値配列をデータストアに変換するには、arrayDatastore を使用します。

活性化の抽出元の層。数値インデックスまたは文字ベクトルとして指定します。

SeriesNetwork オブジェクトの活性化を計算するには、層の数値インデックスを使用するか、層の名前に対応する文字ベクトルとして層を指定します。

DAGNetwork オブジェクトの活性化を計算するには、層の名前に対応する文字ベクトルとして層を指定します。層に複数の出力がある場合、層と出力を、層の名前、その後に文字 "/"、層出力の名前と続けて指定します。つまり、layer'layerName/outputName' の形式を取ります。

例: 3

例: 'conv1'

例: 'mpool/out'

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: MiniBatchSize=256 はミニバッチのサイズを 256 に指定します。

出力活性化の形式。"channels""rows"、または "columns" として指定します。出力形式の説明については、act を参照してください。

イメージ入力の場合、OutputAs オプションが "channels" の場合、入力データのイメージは、ネットワークのイメージ入力層の入力サイズより大きくすることができます。その他の出力形式では、入力のイメージのサイズは、ネットワークのイメージ入力層の入力サイズと同じでなければなりません。

予測に使用するミニバッチのサイズ。正の整数として指定します。ミニバッチのサイズが大きくなるとより多くのメモリが必要になりますが、予測時間が短縮される可能性があります。

入力シーケンスのパディング、切り捨て、または分割を行うオプション。次のいずれかに指定します。

  • "longest" — 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってネットワークにノイズが生じることがあります。

  • "shortest" — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。

  • 正の整数 — 各ミニバッチで、ミニバッチで最長のシーケンスより大きい、指定長の最も近い倍数になるようにシーケンスのパディングを行った後、それらのシーケンスを指定長のより小さなシーケンスに分割します。分割が発生すると、追加のミニバッチが作成されます。シーケンス全体がメモリに収まらない場合は、このオプションを使用します。または、MiniBatchSize オプションをより小さい値に設定して、ミニバッチごとのシーケンス数を減らしてみます。

入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

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

入力シーケンスをパディングする値。スカラーとして指定します。

このオプションは、SequenceLength"longest" または正の整数の場合にのみ有効です。ネットワーク全体にエラーが伝播される可能性があるため、NaN でシーケンスをパディングしないでください。

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

パディングまたは切り捨ての方向。次のいずれかに指定します。

  • "right" — シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。

  • "left" — シーケンスの左側に対してパディングまたは切り捨てを行います。シーケンスが同じタイム ステップで終わるように、シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。

再帰層は 1 タイム ステップずつシーケンス データを処理するため、再帰層の OutputMode プロパティが 'last' の場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。シーケンス データの左側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection オプションを "left" に設定します。

sequence-to-sequence ネットワークの場合 (各再帰層について OutputMode プロパティが 'sequence' である場合)、最初のタイム ステップでパティングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。シーケンスの右側に対してパディングまたは切り捨てを行うには、SequencePaddingDirection オプションを "right" に設定します。

入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

パフォーマンスの最適化。次のいずれかとして指定します。

  • "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 の使用時に利用できます。

"mex" オプションを使用するには、C/C++ コンパイラがインストールされ、GPU Coder™ Interface for Deep Learning Libraries サポート パッケージがなければなりません。MATLAB でアドオン エクスプローラーを使用してサポート パッケージをインストールします。設定手順については、MEX の設定 (GPU Coder)を参照してください。GPU Coder は不要です。

"mex" オプションではサポートされていない層があります。サポートされている層の一覧については、サポートされている層 (GPU Coder)を参照してください。

"mex" オプションを使用する場合、MATLAB Compiler™ はネットワークの展開をサポートしません。

ハードウェア リソース。次のいずれかとして指定します。

  • "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 を利用できない場合、エラーが返されます。

"multi-gpu" オプションおよび "parallel" オプションは、状態パラメーターをもつカスタム層、または予測時にステートフルな組み込み層 (LSTMLayer オブジェクト、BiLSTMLayer オブジェクト、GRULayer オブジェクトなどの再帰層など) を含むネットワークをサポートしていません。

出力引数

すべて折りたたむ

ネットワーク層からの活性化。数値配列、または数値配列の cell 配列として返されます。act の形式は、入力データのタイプ、層出力のタイプ、および指定された OutputAs オプションによって異なります。

イメージまたは折りたたみシーケンス出力

層がイメージまたは折りたたみシーケンス データを出力する場合、act は数値配列です。

OutputAsact
"channels"

2 次元イメージ出力の場合、act は h x w x c x n の配列になります。ここで、h、w、および c はそれぞれ選択した層の出力の高さ、幅、およびチャネル数、n はイメージの数です。この場合、act(:,:,:,i) には i 番目のイメージの活性化が含まれます。

3 次元イメージ出力の場合、act は h x w x d x c x n の配列になります。ここで、h、w、d、および c はそれぞれ選択した層の出力の高さ、幅、深さ、およびチャネル数、n はイメージの数です。この場合、act(:,:,:,:,i) には i 番目のイメージの活性化が含まれます。

折りたたみ 2 次元イメージ シーケンス出力の場合、act は h x w x c x (n*s) の配列になります。ここで、h、w、および c はそれぞれ選択した層の出力の高さ、幅、およびチャネル数、n はシーケンスの数、s はシーケンス長です。この場合、act(:,:,:,(t-1)*n+k) には k 番目のシーケンスのタイム ステップ t の活性化が含まれます。

折りたたみ 3 次元イメージ シーケンス出力の場合、act は h x w x d x c x (n*s) の配列になります。ここで、h、w、d、および c はそれぞれ選択した層の出力の高さ、幅、深さ、およびチャネル数、n はシーケンスの数、s はシーケンス長です。この場合、act(:,:,:,:,(t-1)*n+k) には k 番目のシーケンスのタイム ステップ t の活性化が含まれます。

"rows"

2 次元および 3 次元イメージ出力の場合、act は n 行 m 列の行列です。ここで、n はイメージの数、m は層からの出力要素の数です。この場合、act(i,:) には i 番目のイメージの活性化が含まれます。

折りたたみ 2 次元および 3 次元イメージ シーケンス出力の場合、act は (n*s) 行 m 列の行列です。ここで、n はシーケンスの数、s はシーケンス長、m は層からの出力要素の数です。この場合、act((t-1)*n+k,:) には k 番目のシーケンスのタイム ステップ t の活性化が含まれます。

"columns"

2 次元および 3 次元イメージ出力の場合、act は m 行 n 列の行列です。ここで、m は層からの出力要素の数、n はイメージの数です。この場合、act(:,i) には i 番目のイメージの活性化が含まれます。

折りたたみ 2 次元および 3 次元イメージ シーケンス出力の場合、act は m 行 (n*s) 列の行列です。ここで、m は層からの出力要素の数、n はシーケンスの数、s はシーケンス長です。この場合、act(:,(t-1)*n+k) には k 番目のシーケンスのタイム ステップ t の活性化が含まれます。

シーケンス出力

layer にシーケンス出力 (たとえば、出力モードが "sequence" の LSTM 層) がある場合、act は cell 配列になります。この場合、"OutputAs" オプションは "channels" でなければなりません。

OutputAsact
"channels"

ベクトル シーケンス出力の場合、act は、c 行 s 列の行列の n 行 1 列の cell 配列になります。ここで、n はシーケンスの数、c はシーケンスの特徴の数、s はシーケンス長です。

2 次元イメージ シーケンス出力の場合、act は、h×w×c×s の行列の n 行 1 列の cell 配列になります。ここで、n はシーケンスの数、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数、s はシーケンス長です。

3 次元イメージ シーケンス出力の場合、act は、h×w×c×d×s の行列の n 行 1 列の cell 配列になります。ここで、n はシーケンスの数、h、w、d、および c はそれぞれイメージの高さ、幅、深さ、およびチャネル数、s はシーケンス長です。

この場合、act{i} には i 番目のシーケンスの活性化が含まれます。

特徴ベクトルと単一のタイム ステップの出力

layer が特徴ベクトルまたはシーケンスの単一のタイム ステップを出力する場合 (たとえば、出力モードが "last" の LSTM 層)、act は数値配列になります。

OutputAsact
"channels"

ベクトル データを含む特徴ベクトルまたは単一のタイム ステップの場合、act は c 行 n 列の行列になります。ここで、n は観測値の数、c は特徴の数です。

2 次元イメージ データを含む単一のタイム ステップの場合、act は h×w×c×n の配列になります。ここで、n はシーケンスの数であり、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数です。

3 次元イメージ データを含む単一のタイム ステップの場合、act は h×w×c×d×n の配列になります。ここで、n はシーケンスの数であり、h、w、d、および c はそれぞれイメージの高さ、幅、深さ、およびチャネル数です。

"rows"n 行 m 列の行列。ここで、n は観測値の数、m は選択した層からの出力要素の数です。この場合、act(i,:) には i 番目のシーケンスの活性化が含まれます。
"columns"m 行 n 列の行列。ここで、m は選択した層からの出力要素の数、n は観測値の数です。この場合、act(:,i) には i 番目のイメージの活性化が含まれます。

アルゴリズム

関数 trainNetwork を使用してネットワークに学習させる場合や、DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。学習、予測、および検証のための関数には、trainNetworkpredictclassify、および activations が含まれます。CPU と GPU の両方を使用してネットワークに学習させる場合、単精度演算が使用されます。

参照

[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.

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

拡張機能

バージョン履歴

R2016a で導入