メインコンテンツ

predict

推論用の深層学習ネットワーク出力の計算

説明

深層学習層によっては学習時と推論時 (予測時) の動作が異なる場合があります。たとえば、学習時には過適合を防ぐためにドロップアウト層によって入力要素がランダムに 0 に設定されますが、推論時にはドロップアウト層によって入力が変更されることはありません。

[Y1,...,YN] = predict(net,X1,...,XM) は、入力データ X1, …, XM、およびニューラル ネットワーク net が与えられたときに、推論用のネットワーク出力 Y1, …, YN を返します。

[Y1,...,YN,state] = predict(___) は更新されたネットワークの状態も返します。

___ = predict(___,Name=Value) は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。

すべて折りたたむ

事前学習済みの SqueezeNet ニューラル ネットワークをワークスペースに読み込みます。

[net,classNames] = imagePretrainedNetwork;

イメージを PNG ファイルから読み取って分類します。イメージを分類するには、最初にイメージをデータ型 single に変換します。

im = imread("peppers.png");
figure
imshow(im)

Figure contains an axes object. The hidden axes object contains an object of type image.

X = single(im);
scores = predict(net,X);
[label,score] = scores2label(scores,classNames);

予測されたラベルと対応するスコアを含むイメージを表示します。

figure
imshow(im)
title(string(label) + " (Score: " + score + ")")

Figure contains an axes object. The hidden axes object with title bell pepper (Score: 0.89394) contains an object of type image.

入力引数

すべて折りたたむ

ニューラル ネットワーク。次のいずれかの値として指定します。

  • dlnetwork オブジェクト — カスタム学習ループ用のニューラル ネットワーク。

  • TaylorPrunableNetwork オブジェクト — カスタム枝刈りループ用のニューラル ネットワーク。

深層ニューラル ネットワークの枝刈りを行うには、Deep Learning Toolbox™ Model Compression Library サポート パッケージが必要です。このサポート パッケージは無料のアドオンで、アドオン エクスプローラーを使用してダウンロードできます。または、Deep Learning Toolbox Model Compression Library を参照してください。

入力データ。それぞれ次のいずれかの値として指定します。

  • 形式を整えた dlarray オブジェクト

  • 形式を整えていない dlarray オブジェクト (R2023b 以降)

  • 数値配列 (R2023b 以降)

ヒント

ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、tc 列の配列として表されたベクトルシーケンスを必要とします。ここで、tc は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。

ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、InputDataFormats オプションを使用するか、形式を整えた dlarray オブジェクトとして入力データを指定し、データのレイアウトが異なることを示します。通常、入力データを前処理するよりも、InputDataFormats 学習オプションを調整する方が簡単です。

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

形式を整えていないデータを受け取るニューラル ネットワークを作成するには、inputLayer オブジェクトを使用し、形式を指定しないでください。形式を整えていないデータをネットワークに直接入力するには、InputDataFormats 引数を指定しないでください。 (R2025a 以降)

R2025a より前: 入力層を持たないニューラル ネットワークの場合、引数 InputDataFormats を使用して形式を指定するか、形式を整えた dlarray オブジェクトを入力として使用しなければなりません。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: Y = predict(net,X,InputDataFormats="CBT") は、形式が "CBT" (チャネル、バッチ、時間) であるシーケンス データを使用して予測を行います。

ニューラル ネットワーク出力。層の名前または層の出力パスから成る string 配列または文字ベクトルの cell 配列として指定します。次のいずれかの形式を使用して出力を指定します。

  • "layerName"。ここで、layerName は 1 つの出力をもつ層の名前です。

  • "layerName/outputName"。ここで、layerName は層の名前、outputName は層の出力の名前です。

  • "layerName1/.../layerNameK/layerName"。ここで、layerName1, …, layerNameK はサブネットワークを含む一連の層であり、layerName は 1 つの出力をもつ層の名前です。

  • "layerName1/.../layerNameK/layerName/outputName"。ここで、layerName1, …, layerNameK はサブネットワークを含む一連の層、layerName は層の名前、outputName は層の出力の名前です。

  • 1 つの出力をもつ層の場合、層の名前または層の出力のパスを指定します。たとえば、層の名前が "relu1" で、"out" という名前の出力をもつ ReLU 層の場合、層の名前 "relu1" または層の出力パス "relu1/out" を指定します。

  • 複数の出力をもつ層の場合、層の出力のパスを指定します。たとえば、名前が "lstm1" で、"out""hidden"、および "cell" という名前の出力をもつ LSTM 層の場合、"out" という名前の出力を指定するには、層の出力パス "lstm1/out" を指定します。

  • 入れ子ネットワーク内の層の場合、入れ子層を通過する層の出力のパスを指定します。

出力を抽出する層を指定しない場合、既定では、ソフトウェアは net.Outputs で指定された出力を使用します。

R2023b 以降

入力データの次元の説明。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。

InputDataFormats"auto" の場合、ソフトウェアは、ネットワークの入力で必要とされる形式を使用します。そうでない場合、ソフトウェアは、該当するネットワーク入力に対して指定された形式を使用します。

データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。

各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。ラベル "C""B"、および "T" はそれぞれ 1 回まで使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。

複数の入力をもつニューラル ネットワーク net の場合、入力データ形式の配列を指定します。ここで、InputDataFormats(i) は入力 net.InputNames(i) に対応します。

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

形式を整えていないデータを受け取るニューラル ネットワークを作成するには、inputLayer オブジェクトを使用し、形式を指定しないでください。形式を整えていないデータをネットワークに直接入力するには、InputDataFormats 引数を指定しないでください。 (R2025a 以降)

R2025a より前: 入力層を持たないニューラル ネットワークの場合、引数 InputDataFormats を使用して形式を指定するか、形式を整えた dlarray オブジェクトを入力として使用しなければなりません。

データ型: char | string | cell

R2023b 以降

出力データの次元の説明。次のいずれかの値として指定します。

  • "auto" — 出力データと入力データの次元の数が同じ場合、関数 predictInputDataFormats で指定された形式を使用します。出力データと入力データの次元数が異なる場合、predict 関数は、出力データの次元をネットワーク入力層または InputDataFormats 値と一致するように自動的に並べ替えます。

  • string、文字ベクトル、または文字ベクトルの cell 配列 — predict 関数は指定されたデータ形式を使用します。

データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。

各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。ラベル "C""B"、および "T" はそれぞれ 1 回まで使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。

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

データ型: char | string | cell

パフォーマンスの最適化。次のいずれかの値として指定します。

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

  • "mex" — MEX 関数をコンパイルして実行します。このオプションは GPU の使用時にのみ利用できます。入力データ、またはネットワークの学習可能なパラメーターは、gpuArray オブジェクトとして格納しなければなりません。GPU を使用するには Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスの詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

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

"auto" オプションまたは "mex" オプションを使用した場合、ソフトウェアはパフォーマンス上のメリットを提供しますが、初期実行時間が長くなります。関数のそれ以降の呼び出しでは、通常、より高速になります。異なる入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。

Acceleration"mex" の場合、ソフトウェアは、関数の呼び出しで指定したモデルとパラメーターに基づいて MEX 関数を生成し、実行します。1 つのモデルに一度に複数の MEX 関数を関連付けることができます。モデルの変数をクリアすると、そのモデルに関連付けられている MEX 関数もクリアされます。

Acceleration"auto" の場合、ソフトウェアは MEX 関数を生成しません。

"mex" オプションは GPU の使用時にのみ利用できます。C/C++ コンパイラがインストールされ、GPU Coder™ Interface for Deep Learning サポート パッケージがなければなりません。MATLAB® でアドオン エクスプローラーを使用してサポート パッケージをインストールします。設定手順については、コンパイラの設定 (GPU Coder)を参照してください。GPU Coder は不要です。

"mex" オプションには以下の制限があります。

  • 出力引数 state はサポートされていません。

  • single の精度のみがサポートされています。入力データ、またはネットワークの学習可能なパラメーターは、基となる型が single でなければなりません。

  • 入力層に接続されていない入力が存在するネットワークはサポートされていません。

  • トレースされた dlarray オブジェクトはサポートされていません。これは、dlfeval の呼び出し内では "mex" オプションがサポートされていないことを意味します。

  • 一部の層はサポートされていません。サポートされている層の一覧については、サポートされている層 (GPU Coder)を参照してください。

  • "mex" オプションを使用した場合、MATLAB Compiler™ はネットワークの展開をサポートしません。

量子化されたネットワークでは、"mex" オプションには、Compute Capability 6.1、6.3、またはそれ以上の CUDA® 対応 NVIDIA® GPU が必要です。

出力引数

すべて折りたたむ

複数の出力をもつネットワークの出力データ。次のいずれかの値として返されます。

  • 形式を整えた dlarray オブジェクト

  • 形式を整えていない dlarray オブジェクト (R2023b 以降)

  • 数値配列 (R2023b 以降)

データ型は入力データのデータ型と同じです。

出力 Y1, …, YN の順序は、Outputs 引数で指定された出力の順序と一致します。

分類ニューラル ネットワークの場合、出力の要素は各クラスのスコアに対応します。スコアの順序は、学習データ内のカテゴリの順序と一致します。たとえば、カテゴリカル ラベル TTrain を使用してニューラル ネットワークに学習させた場合、スコアの順序は、categories(TTrain) によって指定されたカテゴリの順序と一致します。

更新されたネットワークの状態。table として返されます。

ネットワークの状態は、次の 3 つの列をもつ table です。

  • Layer – 層の名前。string スカラーとして指定します。

  • Parameter – 状態パラメーターの名前。string スカラーとして指定します。

  • Value – 状態パラメーターの値。dlarray オブジェクトとして指定します。

層の状態には、層の処理中に計算された情報が格納されます。この情報は、層の後続のフォワード パスで使用するために保持されます。たとえば、LSTM 層にはセル状態と隠れ状態が格納され、バッチ正規化層によって実行中の統計が計算されます。

LSTM 層などの再帰層の場合、HasStateInputs プロパティを 1 (true) に設定すると、その層の状態に関するエントリはステート テーブルに格納されません。

State プロパティを使用して dlnetwork の状態を更新します。

アルゴリズム

すべて折りたたむ

拡張機能

すべて展開する

バージョン履歴

R2019b で導入

すべて展開する