predict
推論用の深層学習ネットワーク出力の計算
説明
深層学習層によっては学習時と推論時 (予測時) の動作が異なる場合があります。たとえば、学習時には過適合を防ぐためにドロップアウト層によって入力要素がランダムに 0 に設定されますが、推論時にはドロップアウト層によって入力が変更されることはありません。
例
事前学習済みの SqueezeNet ニューラル ネットワークをワークスペースに読み込みます。
[net,classNames] = imagePretrainedNetwork;
イメージを PNG ファイルから読み取って分類します。イメージを分類するには、最初にイメージをデータ型 single に変換します。
im = imread("peppers.png");
figure
imshow(im)
X = single(im); scores = predict(net,X); [label,score] = scores2label(scores,classNames);
予測されたラベルと対応するスコアを含むイメージを表示します。
figure imshow(im) title(string(label) + " (Score: " + score + ")")

入力引数
ニューラル ネットワーク。次のいずれかの値として指定します。
dlnetworkオブジェクト — カスタム学習ループ用のニューラル ネットワーク。TaylorPrunableNetworkオブジェクト — カスタム枝刈りループ用のニューラル ネットワーク。
深層ニューラル ネットワークの枝刈りを行うには、Deep Learning Toolbox™ Model Compression Library サポート パッケージが必要です。このサポート パッケージは無料のアドオンで、アドオン エクスプローラーを使用してダウンロードできます。または、Deep Learning Toolbox Model Compression Library を参照してください。
入力データ。それぞれ次のいずれかの値として指定します。
形式を整えた
dlarrayオブジェクト形式を整えていない
dlarrayオブジェクト (R2023b 以降)数値配列 (R2023b 以降)
ヒント
ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、t 行 c 列の配列として表されたベクトルシーケンスを必要とします。ここで、t と c は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、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"— 出力データと入力データの次元の数が同じ場合、関数predictはInputDataFormatsで指定された形式を使用します。出力データと入力データの次元数が異なる場合、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) に設定すると、その層の状態に関するエントリはステート テーブルに格納されません。
アルゴリズム
最高のパフォーマンスを提供するために、GPU を使用した MATLAB での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。GPU を使用して深層学習演算を実行するときに確定性が必要な場合は、deep.gpu.deterministicAlgorithms 関数 (R2024b 以降)を使用します。
rng 関数を使用して同じ乱数発生器とシードを設定した場合、CPU を使用して行った予測は再現性をもちます。
拡張機能
使用上の注意および制限:
C++ コード生成は、以下の構文をサポートします。
Y = predict(net,X)Y = predict(net,X1,...,XM)[Y1,...,YN] = predict(__)[Y1,...,YK] = predict(__,'Outputs',layerNames)
構文
[__,state] = predict(__)を使用すると、サードパーティのライブラリに依存しない汎用 C/C++ コードを生成できます。コード生成は、
Stateプロパティの変数Valueの調整をサポートします。コード生成は、Stateプロパティの変数LayerおよびParameterの変更をサポートしません。コード生成は、
Stateプロパティに関する次の関数をサポートします。Simulink によるシミュレーションに関し、コード生成は、MATLAB Function ブロックにおける
dlnetworkのStateの抽出と更新をサポートしません。代わりに、Stateful Predict ブロックまたは Stateful Classify ブロックを使用してください。入力データ
Xは、時間 ("T") 次元でのみ可変サイズをもつことができます。入力データXの他のデータ次元は可変サイズであってはなりません。サイズはコード生成時に固定しなければなりません。コード生成では、
dlnetworkオブジェクトのpredictメソッドに複素数値の入力を渡すことはサポートされていません。predictメソッドへのdlarray入力は、singleデータ型でなければなりません。
使用上の注意および制限:
GPU コード生成は、以下の構文をサポートします。
Y = predict(net,X)Y = predict(net,X1,...,XM)[Y1,...,YN] = predict(__)[Y1,...,YK] = predict(__,'Outputs',layerNames)
構文
[__,state] = predict(__)を使用すると、深層学習ライブラリに依存しない標準 CUDA コードを生成できます。コード生成は、
Stateプロパティの変数Valueの調整をサポートします。コード生成は、Stateプロパティの変数LayerおよびParameterの変更をサポートしません。コード生成は、
Stateプロパティに関する次の関数をサポートします。Simulink によるシミュレーションに関し、コード生成は、MATLAB Function ブロックにおける
dlnetworkのStateの抽出と更新をサポートしません。代わりに、Stateful Predict ブロックまたは Stateful Classify ブロックを使用してください。入力データ
Xは、時間 ("T") 次元でのみ可変サイズをもつことができます。入力データXの他のデータ次元は可変サイズであってはなりません。サイズはコード生成時に固定しなければなりません。TensorRT ライブラリ用のコード生成では、構文
[Y1,...,YK] = predict(__,'Outputs',layerNames)を使用して入力層を出力としてマークすることができません。コード生成では、
dlnetworkオブジェクトのpredictメソッドに複素数値の入力を渡すことはサポートされていません。predictメソッドへのdlarray入力は、singleデータ型でなければなりません。
predict 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
次の条件の少なくとも 1 つが満たされる場合、この関数は GPU 上で実行されます。
net.Learnables.Valueに含まれるネットワークの学習可能なパラメーター値のいずれかが、基となるデータがgpuArray型であるdlarrayオブジェクトである。入力引数
Xが、基となるデータがgpuArray型であるdlarrayである。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2019b で導入ニューラル ネットワークへの入力として形式を整えていないデータを指定し、InputDataFormats 引数を指定しない場合、関数は形式を整えていないデータをネットワークに直接渡します。
形式を整えていないデータを受け取るニューラル ネットワークを作成するには、inputLayer オブジェクトを使用し、形式を指定しないでください。
数値配列および形式を整えていない dlarray オブジェクトを使用して予測を実行します。
入力と出力のデータ形式は、それぞれ InputDataFormats オプションおよび OutputDataFormats オプションを使用して指定します。
dlnetwork オブジェクトの場合、関数 predict によって返される出力引数 state は、ネットワーク内の各層に関する状態パラメーターの名前と値が格納された table になります。
R2021a 以降、状態値は dlarray オブジェクトになっています。この変更によって、AcceleratedFunction オブジェクトを使用する際のサポートが強化されています。頻繁に変更される入力値 (ネットワークの状態を含む入力など) をもつ深層学習関数を高速化するには、頻繁に変更される値を dlarray オブジェクトとして指定しなければなりません。
以前のバージョンでは、状態値が数値配列になっています。
多くの場合、コードを更新する必要はありません。状態値を数値配列にする必要があるコードの場合、以前の動作を再現するには、関数 extractdata と関数 dlupdate を併用して状態値からデータを手動で抽出します。
state = dlupdate(@extractdata,net.State);
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)