ドキュメンテーション

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

predict

学習済み深層学習ニューラル ネットワークを使用した応答の予測

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

構文

YPred = predict(net,X)
YPred = predict(net,sequences)
YPred = predict(___,Name,Value)

説明

YPred = predict(net,X) は、学習済みネットワーク net を使用して X のイメージ データの応答を予測します。

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

YPred = predict(___,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:06 |       33.59% |       2.2735 |          0.0100 |
|       3 |         100 |       00:00:11 |       48.44% |       1.6613 |          0.0100 |
|       4 |         150 |       00:00:17 |       64.06% |       1.1803 |          0.0100 |
|       6 |         200 |       00:00:24 |       64.06% |       1.0499 |          0.0100 |
|       7 |         250 |       00:00:30 |       76.56% |       0.8392 |          0.0100 |
|       8 |         300 |       00:00:34 |       77.34% |       0.6981 |          0.0100 |
|       9 |         350 |       00:00:38 |       77.34% |       0.7084 |          0.0100 |
|      11 |         400 |       00:00:42 |       87.50% |       0.4902 |          0.0100 |
|      12 |         450 |       00:00:46 |       91.41% |       0.3839 |          0.0100 |
|      13 |         500 |       00:00:51 |       92.19% |       0.2986 |          0.0100 |
|      15 |         550 |       00:00:56 |       93.75% |       0.2583 |          0.0100 |
|      16 |         600 |       00:01:02 |       97.66% |       0.2009 |          0.0100 |
|      17 |         650 |       00:01:08 |       92.97% |       0.2642 |          0.0100 |
|      18 |         700 |       00:01:15 |       97.66% |       0.1448 |          0.0100 |
|      20 |         750 |       00:01:22 |       96.88% |       0.1314 |          0.0100 |
|      21 |         800 |       00:01:28 |       97.66% |       0.1233 |          0.0100 |
|      22 |         850 |       00:01:33 |       98.44% |       0.1009 |          0.0100 |
|      24 |         900 |       00:01:37 |      100.00% |       0.1051 |          0.0100 |
|      25 |         950 |       00:01:42 |       97.66% |       0.1483 |          0.0100 |
|      26 |        1000 |       00:01:48 |       99.22% |       0.0743 |          0.0100 |
|      27 |        1050 |       00:01:55 |      100.00% |       0.0603 |          0.0100 |
|      29 |        1100 |       00:02:04 |       99.22% |       0.0769 |          0.0100 |
|      30 |        1150 |       00:02:10 |      100.00% |       0.0524 |          0.0100 |
|      30 |        1170 |       00:02:12 |      100.00% |       0.0566 |          0.0100 |
|========================================================================================|

テスト セットで学習済みネットワークを実行し、スコアを予測します。

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

既定では、predict は、利用可能な場合は Compute Capability 3.0 の CUDA® 対応 GPU を使用します。名前と値のペアの引数 'ExecutionEnvironment','cpu' を使用して、CPU で predict を実行することもできます。

テスト データの最初の 10 個のイメージを表示して、predict からの予測と比較します。

YTest(1:10,:)
ans = 10x1 categorical array
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 

YPred(1:10,:)
ans = 10x10 single matrix

    0.9989    0.0000    0.0004    0.0004    0.0000    0.0000    0.0001    0.0000    0.0000    0.0002
    0.8827    0.0000    0.0151    0.0001    0.0000    0.0002    0.0031    0.0001    0.0020    0.0966
    0.9999    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001
    0.9723    0.0000    0.0000    0.0000    0.0000    0.0000    0.0025    0.0000    0.0013    0.0240
    0.9434    0.0000    0.0091    0.0005    0.0000    0.0000    0.0001    0.0005    0.0462    0.0002
    0.9791    0.0000    0.0003    0.0000    0.0000    0.0000    0.0020    0.0000    0.0172    0.0013
    0.9938    0.0000    0.0001    0.0000    0.0000    0.0000    0.0039    0.0000    0.0020    0.0002
    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.9338    0.0000    0.0022    0.0004    0.0003    0.0024    0.0003    0.0000    0.0017    0.0590
    0.9090    0.0000    0.0054    0.0028    0.0001    0.0006    0.0392    0.0000    0.0387    0.0042

YTest には、XTest のイメージに対応する数字が含まれます。YPred の列には、イメージに特定の数字が含まれる確率の predict による推定が含まれます。つまり、最初の列には指定されたイメージが数字 0 である確率の推定値、2 番目の列にはイメージが数字 1 である確率の推定値、3 番目の列にはイメージが数字 2 である確率の推定値が含まれ、以降も同様になります。predict による推定では、正しい数字の場合は確率が 1 に近くなり、他の数字の場合は確率が 0 に近くなることがわかります。predict は、最初の 10 個の観測値が数字 0 であると正しく推定しています。

事前学習済みのネットワークを読み込みます。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 = predict(net,XTest);

最初の 10 個のシーケンスの予測スコアを表示します。

YPred(1:10,:)
ans = 10x9 single matrix

    0.9918    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0006    0.0059
    0.9868    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0010    0.0105
    0.9924    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0006    0.0054
    0.9896    0.0000    0.0000    0.0000    0.0006    0.0009    0.0001    0.0007    0.0080
    0.9965    0.0000    0.0000    0.0000    0.0007    0.0009    0.0000    0.0003    0.0016
    0.9888    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0087
    0.9886    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0089
    0.9982    0.0000    0.0000    0.0000    0.0006    0.0007    0.0000    0.0001    0.0004
    0.9883    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0093
    0.9959    0.0000    0.0000    0.0000    0.0007    0.0011    0.0000    0.0004    0.0019

これらの予測スコアを、これらのシーケンスのラベルと比較します。関数によって、高い予測スコアが正しいクラスに割り当てられます。

YTest(1:10)
ans = 10x1 categorical array
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 

入力引数

すべて折りたたむ

学習済みネットワーク。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

出力引数

すべて折りたたむ

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

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

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

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

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

タスク形式
イメージ回帰
  • N 行 R 列の行列。N は観測値の数、R は応答の数です。

  • h x w x c x N の数値配列。N は観測値の数、h x w x c は 1 つの応答のイメージ サイズです。

sequence-to-one 回帰N 行 R 列の行列。N は観測値の数、R は応答の数です。
sequence-to-sequence 回帰

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

観測値が 1 つの sequence-to-sequence 回帰問題では、sequences を行列にすることができます。この場合、YPred は応答の行列です。

アルゴリズム

イメージ データに NaN が含まれる場合、predict はこれらをネットワークを通じて伝播します。ネットワークに ReLU 層がある場合、これらの層は NaN を無視します。ただし、ネットワークに ReLU 層が含まれない場合、predict は NaN を予測として返します。

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

代替方法

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

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

sequence-to-label および sequence-to-sequence 分類ネットワーク (LSTM ネットワーク) では、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 で導入