Main Content

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

predict

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

説明

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

YPred = predict(net,imds) は、学習済みの SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトの net を使用して、imds のイメージ データの応答を予測します。dlnetwork の入力については、predict を参照してください。

YPred = predict(net,ds) は、データストア ds 内のデータの応答を予測します。複数の入力があるネットワークの場合、組み合わせまたは変換が行われたデータストア オブジェクトにこの構文を使用します。

YPred = predict(net,X) は、数値配列 X のデータの応答を予測します。

YPred = predict(net,tbl) は、table tbl 内のデータの応答を予測します。

[YPred1,...,YPredM] = predict(___) は、前述の構文を使用して多出力ネットワークの M 出力の応答を予測します。出力 YPredj はネットワーク出力 net.OutputNames(j) に対応します。分類出力層の categorical 出力を返すには、'ReturnCategorical' オプションを true に設定します。

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

___ = predict(___,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 |       10.16% |       2.3195 |          0.0100 |
|       2 |          50 |       00:00:04 |       50.78% |       1.7102 |          0.0100 |
|       3 |         100 |       00:00:07 |       63.28% |       1.1632 |          0.0100 |
|       4 |         150 |       00:00:10 |       60.16% |       1.0859 |          0.0100 |
|       6 |         200 |       00:00:14 |       68.75% |       0.8996 |          0.0100 |
|       7 |         250 |       00:00:17 |       76.56% |       0.7920 |          0.0100 |
|       8 |         300 |       00:00:20 |       73.44% |       0.8411 |          0.0100 |
|       9 |         350 |       00:00:24 |       81.25% |       0.5508 |          0.0100 |
|      11 |         400 |       00:00:27 |       90.62% |       0.4744 |          0.0100 |
|      12 |         450 |       00:00:31 |       92.19% |       0.3614 |          0.0100 |
|      13 |         500 |       00:00:34 |       94.53% |       0.3160 |          0.0100 |
|      15 |         550 |       00:00:39 |       96.09% |       0.2544 |          0.0100 |
|      16 |         600 |       00:00:42 |       92.19% |       0.2765 |          0.0100 |
|      17 |         650 |       00:00:46 |       95.31% |       0.2460 |          0.0100 |
|      18 |         700 |       00:00:49 |       99.22% |       0.1418 |          0.0100 |
|      20 |         750 |       00:00:53 |       98.44% |       0.1000 |          0.0100 |
|      21 |         800 |       00:00:56 |       98.44% |       0.1449 |          0.0100 |
|      22 |         850 |       00:00:59 |       98.44% |       0.0989 |          0.0100 |
|      24 |         900 |       00:01:03 |       96.88% |       0.1315 |          0.0100 |
|      25 |         950 |       00:01:07 |      100.00% |       0.0859 |          0.0100 |
|      26 |        1000 |       00:01:11 |      100.00% |       0.0701 |          0.0100 |
|      27 |        1050 |       00:01:16 |      100.00% |       0.0759 |          0.0100 |
|      29 |        1100 |       00:01:20 |       99.22% |       0.0663 |          0.0100 |
|      30 |        1150 |       00:01:25 |       98.44% |       0.0776 |          0.0100 |
|      30 |        1170 |       00:01:27 |       99.22% |       0.0732 |          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
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 

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

    0.9978    0.0001    0.0008    0.0002    0.0003    0.0000    0.0004    0.0000    0.0002    0.0003
    0.8881    0.0000    0.0474    0.0001    0.0000    0.0002    0.0029    0.0001    0.0014    0.0598
    0.9998    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001
    0.9814    0.0000    0.0000    0.0000    0.0000    0.0000    0.0046    0.0000    0.0011    0.0129
    0.9748    0.0000    0.0132    0.0003    0.0000    0.0000    0.0002    0.0004    0.0111    0.0001
    0.9873    0.0000    0.0001    0.0000    0.0000    0.0000    0.0007    0.0000    0.0072    0.0047
    0.9981    0.0000    0.0000    0.0000    0.0000    0.0000    0.0018    0.0000    0.0000    0.0000
    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.9265    0.0000    0.0046    0.0000    0.0006    0.0009    0.0001    0.0000    0.0018    0.0655
    0.9327    0.0000    0.0139    0.0012    0.0001    0.0001    0.0378    0.0000    0.0111    0.0031

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

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

[XTest,YTest] = japaneseVowelsTestData;

テスト データについて予測を実行します。

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
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 

入力引数

すべて折りたたむ

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

イメージ データストア。ImageDatastore オブジェクトとして指定します。

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

ヒント

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

imageDatastorereadFcn オプションは通常、速度が大幅に低下するため、使用しないでください。

入力データのデータストア。

単一の入力があるネットワークの場合、ds は次のいずれかを返します。

  • 単一のイメージまたはシーケンス

  • イメージまたはシーケンスの cell 配列

  • 1 列目にイメージまたはシーケンスが含まれる table

複数のイメージ入力層があるネットワークの場合、ds は、入力データを含む numInputs 列の cell 配列を返す、組み合わせまたは変換が行われたデータストアでなければなりません。ここで、numInputs はネットワーク入力の数です。cell 配列の i 番目の要素は入力 net.InputNames(i) に対応します。

詳細については、深層学習用のデータストアを参照してください。

イメージ データ。数値配列として指定します。配列のサイズはイメージ入力のタイプによって以下のように異なります。

入力説明
2 次元イメージh x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。
3 次元イメージh x w x d x c x N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。

配列に NaN が含まれる場合、ネットワーク全体に伝播されます。

シーケンス データまたは時系列データ。数値配列の 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 に対応していなければなりません。

最初の列に入力データが含まれるイメージの table。table の各行は観測値に対応します。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++ コンパイラと GPU Coder™ Interface for Deep Learning Libraries サポート パッケージがインストールされていなければなりません。MATLAB でアドオン エクスプローラーを使用してサポート パッケージをインストールします。設定手順については、MEX の設定 (GPU Coder)を参照してください。GPU Coder は不要です。

'mex' オプションではサポートされていない層があります。サポートされている層の一覧については、サポートされている層 (GPU Coder)を参照してください。sequenceInputLayer を含む再帰型ニューラル ネットワーク (RNN) はサポートされていません。

'mex' オプションの使用時に、MATLAB Compiler™ を使用してネットワークを配布することはできません。

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

categorical ラベルを返すオプション。true または false として指定します。

ReturnCategoricaltrue の場合、関数は分類出力層の categorical ラベルを返します。そうでない場合、関数は分類出力層の予測スコアを返します。

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

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

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

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

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

例: 'SequenceLength','shortest'

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

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

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

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

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

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

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

例: 'SequencePaddingValue',-1

出力引数

すべて折りたたむ

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

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

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

行列の N 行 1 列の cell 配列。N は観測値の数です。シーケンスは K 行の行列で、K はクラスの数です。SequenceLength オプションを各ミニバッチに個別に適用した後、各シーケンスには、対応する入力シーケンスと同じ数のタイム ステップが含まれています。

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

タスク形式
2 次元イメージ回帰
  • N 行 R 列の行列。ここで、N はイメージの数、R は応答の数です。

  • h x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。

3 次元イメージ回帰
  • N 行 R 列の行列。ここで、N はイメージの数、R は応答の数です。

  • h x w x d x c x N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。

sequence-to-one 回帰N 行 R 列の行列。ここで、N はシーケンスの数、R は応答の数です。
sequence-to-sequence 回帰

数値シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは R 行の行列で、R は応答の数です。SequenceLength オプションを各ミニバッチに個別に適用した後、各シーケンスには、対応する入力シーケンスと同じ数のタイム ステップが含まれています。

観測値が 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 で導入