ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

activations

畳み込みニューラル ネットワーク層の活性化の計算

1 つの CPU または 1 つの GPU で学習済み畳み込みニューラル ネットワーク (ConvNet、CNN) を使用して特徴を抽出できます。GPU を使用するには、Parallel Computing Toolbox™ および Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。 名前と値のペアの引数 ExecutionEnvironment を使用してハードウェア要件を指定します。

構文

features = activations(net,X,layer)
features = activations(net,X,layer,Name,Value)

説明

features = activations(net,X,layer) は、学習済みネットワーク net および X のデータを使用して、特定の層のネットワーク活性化を返します。

この関数はイメージ入力層のあるネットワークのみをサポートします。

features = activations(net,X,layer,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 個の検証イメージが格納されています。いくつかのサンプル イメージを表示します。

numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,16);
figure
for i = 1:16
    subplot(4,4,i)
    I = readimage(imdsTrain,idx(i));
    imshow(I)
end

事前学習済みのネットワークの読み込み

事前学習済みの AlexNet ネットワークを読み込みます。Neural Network Toolbox Model for AlexNet Network がインストールされていない場合、ダウンロード用リンクが表示されます。AlexNet は、100 万枚を超えるイメージについて学習済みであり、イメージを 1000 個のオブジェクト カテゴリに分類できます。たとえば、キーボード、マウス、鉛筆、多くの動物などです。結果として、このモデルは広範囲のイメージに対する豊富な特徴表現を学習しています。

net = alexnet;

ネットワーク アーキテクチャを表示します。ネットワークには 5 つの畳み込み層と 3 つの全結合層があります。

net.Layers
ans = 
  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Convolution                   256 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Convolution                   384 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Convolution                   256 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

最初の層であるイメージ入力層には、サイズが 227 x 227 x 3 の入力イメージが必要です。ここで、3 はカラー チャネルの数です。

inputSize = net.Layers(1).InputSize
inputSize = 

   227   227     3

イメージの特徴の抽出

ネットワークは、入力イメージの階層表現を構築します。深い層には、初期の層の低レベルの特徴を使用して構築された、より高レベルの特徴が含まれます。学習イメージとテスト イメージの特徴表現を取得するには、全結合層 'fc7'activations を使用します。イメージの低レベルの表現を取得するには、ネットワークの初期の層を使用します。

ネットワークにはサイズが 227 x 227 x 3 の入力イメージが必要ですが、イメージ データストアにあるイメージのサイズは異なります。学習およびテスト イメージのサイズをネットワークへの入力前に自動的に変更するには、拡張イメージ データストアを作成して、目的のイメージ サイズを指定し、これらのデータストアを activations の入力引数として使用します。

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);

layer = 'fc7';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');

学習データおよびテスト データからクラス ラベルを抽出します。

YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;

イメージ分類器のあてはめ

学習イメージから抽出された特徴を予測子変数として使用し、fitcecoc (Statistics and Machine Learning Toolbox) を使用してマルチクラス サポート ベクター マシン (SVM) をあてはめます。

classifier = fitcecoc(featuresTrain,YTrain);

テスト イメージの分類

学習済みの SVM モデルとテスト イメージから抽出された特徴を使用して、テスト イメージを分類します。

YPred = predict(classifier,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(char(label))
end

テスト セットに対する分類精度を計算します。精度とは、ネットワークによって予測が正しく行われるラベルの割合です。

accuracy = mean(YPred == YTest)
accuracy = 1

この SVM は高い精度を示しています。特徴抽出を使用しても十分な精度が得られない場合、代わりに転移学習を試してください。

入力引数

すべて折りたたむ

学習済みネットワーク。SeriesNetwork または DAGNetwork オブジェクトとして指定します。事前学習済みのネットワークをインポートするか、関数 trainNetwork を使用して独自のネットワークに学習させることによって、学習済みネットワークを取得できます。事前学習済みのネットワークの詳細は、事前学習済みの畳み込みニューラル ネットワークを参照してください。

activations はイメージ入力層のあるネットワークのみをサポートします。

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

  • 1 つのイメージを表す 3 次元配列。X のサイズは h x w x c です。h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。

  • 大量のイメージを表す 4 次元配列。X のサイズは h x w x c x N で、N はイメージの数です。

  • table。最初の列にはイメージのパス、またはイメージを表す 3 次元配列のいずれかが含まれます。

  • ImageDatastore

  • ミニバッチ データストア。組み込みミニバッチ データストアおよびカスタム ミニバッチ データストアの詳細は、イメージの深層学習向け前処理を参照してください。

'OutputAs' の値が 'channels' に等しい場合、入力データ X のイメージは、ネットワークのイメージ入力層の入力サイズより大きくすることができます。その他の出力形式では、X のイメージのサイズは、ネットワークのイメージ入力層の入力サイズと同じでなければなりません。

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

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

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

例: 3

例: 'conv1'

例: 'mpool/out'

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 ' ' で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前/値のペア引数を、任意の順番で指定できます。

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は一重引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: activations(net,X,layer,'OutputAs','rows')

出力活性化の形式。'OutputAs' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'channels'Y は h x w x c x n の配列です。h、w、および c は選択した層の出力の高さ、幅、およびチャネル数です。n は観測値の数です。h x w x c の各サブ配列は、1 つの観測値の出力です。

  • 'rows'Y は n 行 m 列の行列です。n は観測値の数、m は選択した層からの出力要素の数です。

  • 'columns'Y は m 行 n 列の行列です。m は選択した層からの出力要素の数、n は観測値の数です。行列の各列は、1 つの観測値の出力です。

'OutputAs' の値が 'channels' に等しい場合、入力データ X のイメージは、ネットワークのイメージ入力層の入力サイズより大きくすることができます。その他の出力形式では、X のイメージのサイズは、ネットワークのイメージ入力層の入力サイズと同じでなければなりません。

例: 'OutputAs','rows'

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

例: 'MiniBatchSize',256

ハードウェア リソース。'ExecutionEnvironment' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'auto' — 利用可能な場合は GPU を使用し、そうでない場合は CPU を使用します。

  • 'gpu' — GPU を使用します。GPU を使用するには、Parallel Computing Toolbox および Compute Capability 3.0 以上の CUDA 対応 NVIDIA GPU が必要です。 Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

  • 'cpu' — CPU を使用します。

例: 'ExecutionEnvironment','cpu'

出力引数

すべて折りたたむ

ネットワーク層からの活性化。名前と値のペアの引数 'OutputAs' の値に応じて、次のいずれかとして返されます。

trainedFeatures'OutputAs' の値
n 行 m 列の行列'rows'
m 行 n 列の行列'columns'
h x w x c x n の配列'channels'

アルゴリズム

Neural Network Toolbox™ に含まれる深層学習における学習、予測、検証用のすべての関数は、単精度浮動小数点演算を使用して計算を実行します。深層学習用の関数には trainNetworkpredictclassifyactivations などがあります。CPU と GPU の両方を使用してネットワークに学習させる場合、単精度演算が使用されます。

R2016a で導入