ドキュメンテーション

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

classify

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

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

構文

[YPred,scores] = classify(net,X)
[YPred,scores] = classify(net,sequences)
[YPred,scores] = classify(___,Name,Value)

説明

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

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

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

すべて折りたたむ

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

[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 image normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |        7.81% |       2.3026 |          0.0100 |
|       2 |          50 |       00:00:04 |       33.59% |       2.2735 |          0.0100 |
|       3 |         100 |       00:00:08 |       48.44% |       1.6613 |          0.0100 |
|       4 |         150 |       00:00:16 |       64.06% |       1.1803 |          0.0100 |
|       6 |         200 |       00:00:23 |       64.06% |       1.0499 |          0.0100 |
|       7 |         250 |       00:00:31 |       76.56% |       0.8392 |          0.0100 |
|       8 |         300 |       00:00:39 |       77.34% |       0.6981 |          0.0100 |
|       9 |         350 |       00:00:47 |       77.34% |       0.7084 |          0.0100 |
|      11 |         400 |       00:00:53 |       87.50% |       0.4902 |          0.0100 |
|      12 |         450 |       00:00:57 |       91.41% |       0.3839 |          0.0100 |
|      13 |         500 |       00:01:01 |       92.19% |       0.2986 |          0.0100 |
|      15 |         550 |       00:01:05 |       93.75% |       0.2583 |          0.0100 |
|      16 |         600 |       00:01:10 |       97.66% |       0.2009 |          0.0100 |
|      17 |         650 |       00:01:17 |       92.97% |       0.2642 |          0.0100 |
|      18 |         700 |       00:01:24 |       97.66% |       0.1448 |          0.0100 |
|      20 |         750 |       00:01:31 |       96.88% |       0.1314 |          0.0100 |
|      21 |         800 |       00:01:38 |       97.66% |       0.1233 |          0.0100 |
|      22 |         850 |       00:01:42 |       98.44% |       0.1009 |          0.0100 |
|      24 |         900 |       00:01:46 |      100.00% |       0.1051 |          0.0100 |
|      25 |         950 |       00:01:49 |       97.66% |       0.1483 |          0.0100 |
|      26 |        1000 |       00:01:53 |       99.22% |       0.0743 |          0.0100 |
|      27 |        1050 |       00:01:57 |      100.00% |       0.0603 |          0.0100 |
|      29 |        1100 |       00:02:08 |       99.22% |       0.0769 |          0.0100 |
|      30 |        1150 |       00:02:15 |      100.00% |       0.0524 |          0.0100 |
|      30 |        1170 |       00:02:18 |      100.00% |       0.0566 |          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.9770

事前学習済みのネットワークを読み込みます。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 を使用して独自のネットワークに学習させることによって、学習済みネットワークを取得できます。

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

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

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

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

  • ImageDatastore

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

シーケンス データまたは時系列データ。1 つの時系列を表す行列、または複数の時系列を表す行列の cell 配列として指定します。

  • sequences が 1 つの時系列を表す行列である場合、sequences は D 行 S 列の行列であり、D はタイム ステップあたりのデータ点の数、S はタイム ステップ数です。

  • sequences が時系列の cell 配列である場合、sequences は N 行 1 列の cell 配列で、N は観測値の数です。sequences の各エントリは、行がデータ点に対応し、列がタイム ステップに対応する行列で表される時系列です。

名前と値のペアの引数

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

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

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

例: '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'

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

  • 'longest' — 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。

  • 'shortest' — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。

  • 正の整数 — 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行ってから、指定した長さのより小さいシーケンスに分割します。分割が発生すると、関数によって追加のミニバッチが作成されます。

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

例: '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 で導入