ドキュメンテーション

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

classify

学習済み深層学習ニューラル ネットワークを使用したデータの分類

説明

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

[YPred,scores] = classify(net,X) は、学習済みネットワーク net を使用して X のイメージ データのクラス ラベルを予測します。

[YPred,scores] = classify(net,sequences) は、学習済み LSTM ネットワーク net を使用して sequences の時系列データまたはシーケンス データのクラス ラベルを予測します。

[YPred,scores] = classify(___,Name,Value) は、1 つ以上の名前と値のペアの引数によって指定された追加オプションを使用してクラス ラベルを予測します。

ヒント

長さが異なるシーケンスで予測を行うと、ミニバッチのサイズが、入力データに追加されるパディングの量に影響し、異なる予測値が得られることがあります。さまざまな値を使用して、ネットワークに最適なものを確認してください。ミニバッチのサイズとパディングのオプションを指定するには、'MiniBatchSize' および 'SequenceLength' オプションを使用します。

すべて折りたたむ

標本データを読み込みます。

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData は数字の学習セットを 4 次元配列データとして読み込みます。XTrain は 28 x 28 x 1 x 5000 の配列で、28 はイメージの高さ、28 は幅です。1 はチャネルの数で、5000 は手書きの数字の合成イメージの数です。YTrain は各観測値のラベルを含む categorical ベクトルです。

畳み込みニューラル ネットワーク アーキテクチャを構築します。

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

モーメンタム項付き確率的勾配降下法の既定の設定にオプションを設定します。

options = trainingOptions('sgdm');

ネットワークに学習をさせます。

rng('default')
net = trainNetwork(XTrain,YTrain,layers,options);
Training on single CPU.
Initializing input data normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |       11.72% |       2.2909 |          0.0100 |
|       2 |          50 |       00:00:04 |       52.34% |       1.8173 |          0.0100 |
|       3 |         100 |       00:00:08 |       66.41% |       1.1120 |          0.0100 |
|       4 |         150 |       00:00:17 |       67.19% |       0.9866 |          0.0100 |
|       6 |         200 |       00:00:26 |       73.44% |       0.7928 |          0.0100 |
|       7 |         250 |       00:00:34 |       81.25% |       0.6349 |          0.0100 |
|       8 |         300 |       00:00:43 |       83.59% |       0.6307 |          0.0100 |
|       9 |         350 |       00:00:49 |       83.59% |       0.4726 |          0.0100 |
|      11 |         400 |       00:00:54 |       92.97% |       0.3709 |          0.0100 |
|      12 |         450 |       00:00:58 |       95.31% |       0.2842 |          0.0100 |
|      13 |         500 |       00:01:01 |       92.19% |       0.2760 |          0.0100 |
|      15 |         550 |       00:01:04 |       98.44% |       0.2186 |          0.0100 |
|      16 |         600 |       00:01:07 |       96.88% |       0.2164 |          0.0100 |
|      17 |         650 |       00:01:10 |       96.88% |       0.1960 |          0.0100 |
|      18 |         700 |       00:01:13 |      100.00% |       0.1066 |          0.0100 |
|      20 |         750 |       00:01:20 |       99.22% |       0.0850 |          0.0100 |
|      21 |         800 |       00:01:26 |       99.22% |       0.1224 |          0.0100 |
|      22 |         850 |       00:01:33 |       99.22% |       0.0832 |          0.0100 |
|      24 |         900 |       00:01:42 |       97.66% |       0.1246 |          0.0100 |
|      25 |         950 |       00:01:50 |       98.44% |       0.0821 |          0.0100 |
|      26 |        1000 |       00:02:00 |       99.22% |       0.0601 |          0.0100 |
|      27 |        1050 |       00:02:09 |       99.22% |       0.0679 |          0.0100 |
|      29 |        1100 |       00:02:14 |       99.22% |       0.0519 |          0.0100 |
|      30 |        1150 |       00:02:18 |       99.22% |       0.0590 |          0.0100 |
|      30 |        1170 |       00:02:19 |      100.00% |       0.0578 |          0.0100 |
|========================================================================================|

テスト セットについて学習済みネットワークを実行します。

[XTest,YTest]= digitTest4DArrayData;
YPred = classify(net,XTest);

テスト データの最初の 10 個のイメージを表示して、classify の分類と比較します。

[YTest(1:10,:) YPred(1:10,:)]
ans = 10x2 categorical array
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 

classify の結果は、最初の 10 個のイメージの真の数字に一致しています。

すべてのテスト データで精度を計算します。

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9794

事前学習済みのネットワークを読み込みます。JapaneseVowelsNet は、[1] および [2] で説明されているように Japanese Vowels データセットで学習させた事前学習済みの LSTM ネットワークです。これは、ミニバッチのサイズ 27 を使用して、シーケンス長で並べ替えられたシーケンスで学習させています。

load JapaneseVowelsNet

ネットワーク アーキテクチャを表示します。

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

     1   'sequenceinput'   Sequence Input          Sequence input with 12 dimensions
     2   'lstm'            LSTM                    LSTM with 100 hidden units
     3   'fc'              Fully Connected         9 fully connected layer
     4   'softmax'         Softmax                 softmax
     5   'classoutput'     Classification Output   crossentropyex with '1' and 8 other classes

テスト データを読み込みます。

load JapaneseVowelsTest

テスト データを分類します。

YPred = classify(net,XTest);

最初の 10 個のシーケンスのラベルと、その予測ラベルを表示します。

[YTest(1:10) YPred(1:10)]
ans = 10x2 categorical array
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 

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

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.8595

入力引数

すべて折りたたむ

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

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

入力説明
3 次元配列1 つのイメージを表す数値配列。配列のサイズは h x w x c です。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。
4 次元配列大量のイメージを表す数値配列。配列のサイズは h x w x c x N です。ここで、N はイメージ スタック内のイメージの数です。
イメージ データストア

categorical ラベル付きの ImageDatastore

詳細については、trainNetwork の引数 imds を参照してください。

データストア

1 つのイメージ、イメージの cell 配列、または最初の列にイメージが含まれる table としてデータを返すデータストア。

詳細については、Datastores for Deep Learningを参照してください。

table

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

詳細については、trainNetwork の引数 tbl を参照してください。

シーケンス データまたは時系列データ。数値配列の N 行 1 列の cell 配列、1 つのシーケンスを表す数値配列、またはデータストアとして指定します。ここで、N は観測値の数です。

cell 配列入力または数値配列入力の場合、シーケンスが含まれる数値配列の次元は、データのタイプによって異なります。

入力説明
ベクトル シーケンスc 行 s 列の行列。ここで、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 は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。

データストア入力の場合、データストアはシーケンスの cell 配列、または最初の列にシーケンスが含まれる table としてデータを返さなければなりません。シーケンス データの次元は、上記の table に対応していなければなりません。

名前と値のペアの引数

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

オプションの引数 Name,Value のコンマ区切りのペアを指定します。Name は引数名で、Value は対応する値です。Name は一重引用符 (' ') で囲まなければなりません。

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

長さが異なるシーケンスで予測を行うと、ミニバッチのサイズが、入力データに追加されるパディングの量に影響し、異なる予測値が得られることがあります。さまざまな値を使用して、ネットワークに最適なものを確認してください。ミニバッチのサイズとパディングのオプションを指定するには、'MiniBatchSize' および 'SequenceLength' オプションを使用します。

例: 'MiniBatchSize',256

パフォーマンスの最適化。'Acceleration' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'auto' — 入力ネットワークとハードウェア リソースに適した最適化の回数を自動的に適用します。

  • 'mex' — MEX 関数をコンパイルして実行します。このオプションは GPU の使用時にのみ利用できます。GPU を使用するには、Parallel Computing Toolbox および Compute Capability 3.0 以上の CUDA 対応 NVIDIA GPU が必要です。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

  • 'none' — すべての高速化を無効にします。

既定のオプションは 'auto' です。'auto' が指定されている場合、MATLAB® は互換性のある最適化を複数適用します。'auto' オプションを使用する場合、MATLAB は MEX 関数を生成しません。

'Acceleration' オプション 'auto' および 'mex' を使用すると、パフォーマンス上のメリットが得られますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。新しい入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。

'mex' オプションは、関数の呼び出しに使用されたネットワークとパラメーターに基づいて MEX 関数を生成し、実行します。複数の MEX 関数を一度に 1 つのネットワークに関連付けることができます。ネットワークの変数をクリアすると、そのネットワークに関連付けられている MEX 関数もクリアされます。

'mex' オプションは、GPU の使用時にのみ利用できます。また、C/C++ コンパイラがインストールされていなければなりません。設定手順については、MEX の設定 (GPU Coder)を参照してください。

'mex' による高速化ではサポートされていない層があります。サポートされている層の一覧については、サポートされている層 (GPU Coder)を参照してください。

例: 'Acceleration','mex'

ハードウェア リソース。'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'

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

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

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

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

シーケンス長を正の整数として指定している場合、連続する反復においてより小さいシーケンスが処理されます。ネットワークは、分割されたシーケンスとシーケンスの間にネットワークの状態を更新します。

パディングと切り捨てはシーケンスの右側に対して行われます。入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

例: 'SequenceLength','shortest'

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

例: 'SequencePaddingValue',-1

出力引数

すべて折りたたむ

予測クラス ラベル。categorical ベクトル、または categorical ベクトルの cell 配列として返されます。YPred の形式は、問題のタイプによって異なります。

次の表は、分類問題の形式について説明しています。

タスク形式
イメージ分類ラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。
sequence-to-label 分類
sequence-to-sequence 分類

ラベルの categorical シーケンスの N 行 1 列の cell 配列。N は観測値の数です。各シーケンスには、対応する入力シーケンスと同じ数のタイム ステップが含まれています。

観測値が 1 つの sequence-to-sequence 分類問題では、sequences を行列にすることができます。この場合、YPred はラベルの categorical シーケンスです。

予測スコアまたは応答。行列、または行列の cell 配列として返されます。scores の形式は、問題のタイプによって異なります。

次の表は、scores の形式について説明しています。

タスク形式
イメージ分類N 行 K 列の行列。N は観測値の数、K はクラスの数です。
sequence-to-label 分類
sequence-to-sequence 分類

行列の N 行 1 列の cell 配列。N は観測値の数です。シーケンスは K 行の行列で、K は応答の数です。各シーケンスには、対応する入力シーケンスと同じ数のタイム ステップが含まれています。

観測値が 1 つの sequence-to-sequence 分類問題では、sequences を行列にすることができます。この場合、scores は、予測クラス スコアの行列です。

分類スコアを調べる例については、深層学習を使用した Web カメラ イメージの分類を参照してください。

アルゴリズム

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

代替方法

predict を使用して学習済みネットワークから予測スコアを計算できます。

activations を使用してネットワーク層から活性化を計算することもできます。

sequence-to-label および sequence-to-sequence 分類ネットワークでは、classifyAndUpdateState および predictAndUpdateState を使用してネットワークの状態の予測および更新を実行できます。

参照

[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

R2016a で導入