Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

predictAndUpdateState

学習済み再帰型ニューラル ネットワークを使用した応答の予測とネットワーク状態の更新

説明

1 つの CPU または 1 つの GPU で学習済みの深層学習ネットワークを使用して予測を実行できます。GPU を使用するには Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。

[updatedNet,Y] = predictAndUpdateState(recNet,sequences) は、学習済み再帰型ニューラル ネットワーク recNet を使用して sequences のデータに対する応答を予測し、ネットワーク状態を更新します。

この関数は、再帰型ニューラル ネットワークのみをサポートします。入力 recNet には、LSTM 層などの再帰層、または状態パラメーターをもつカスタム層が 1 つ以上含まれていなければなりません。

[updatedNet,Y] = predictAndUpdateState(recNet,X1,...,XN) は、多入力ネットワーク recNet に対する数値配列または cell 配列 X1、…、XN のデータの応答を予測します。入力 Xi は、ネットワーク入力 recNet.InputNames(i) に対応します。

[updatedNet,Y] = predictAndUpdateState(recNet,mixed) は、混合するデータ型のデータから成る多入力ネットワーク recNet を使用して予測を行います。

[updatedNet,Y1,...,YM] = predictAndUpdateState(___) は、前述の入力引数を使用して多出力ネットワークの M 出力の応答を予測します。出力 Yj はネットワーク出力 recNet.OutputNames(j) に対応します。分類出力層のカテゴリカル出力を返すには、ReturnCategorical オプションを 1 (true) に設定します。

[___] = predictAndUpdateState(___,Name=Value) は、前述の構文のいずれかを使用して、1 つ以上の名前と値の引数によって指定された追加オプションを使用して予測を行います。たとえば、MiniBatchSize=27 は、サイズ 27 のミニバッチを使用して予測を行います。

ヒント

長さが異なるシーケンスで予測を行うと、ミニバッチのサイズが、入力データに追加されるパディングの量に影響し、予測値が変わることがあります。さまざまな値を使用して、ネットワークに最適なものを確認してください。ミニバッチのサイズとパディングのオプションを指定するには、MiniBatchSize オプションと SequenceLength オプションをそれぞれ使用します。

すべて折りたたむ

学習済み再帰型ニューラル ネットワークを使用して応答を予測し、ネットワーク状態を更新します。

[1] および [2] で説明されているように Japanese Vowels データセットで学習させた事前学習済みの長短期記憶 (LSTM) ネットワーク JapaneseVowelsNet を読み込みます。このネットワークは、ミニバッチのサイズ 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,TTest] = japaneseVowelsTestData;

シーケンス内のタイム ステップ全体をループ処理します。各タイム ステップのスコアを予測し、ネットワーク状態を更新します。

X = XTest{94};
numTimeSteps = size(X,2);
for i = 1:numTimeSteps
    v = X(:,i);
    [net,score] = predictAndUpdateState(net,v);
    scores(:,i) = score;
end

予測スコアをプロットします。プロットには、タイム ステップ間での予測スコアの変化が表示されます。

classNames = string(net.Layers(end).Classes);
figure
lines = plot(scores');
xlim([1 numTimeSteps])
legend("Class " + classNames,Location="northwest")
xlabel("Time Step")
ylabel("Score")
title("Prediction Scores Over Time Steps")

正しいクラスについて、タイム ステップでの予測スコアを強調表示します。

trueLabel = TTest(94)
trueLabel = categorical
     3 

lines(trueLabel).LineWidth = 3;

Figure contains an axes object. The axes object with title Prediction Scores Over Time Steps contains 9 objects of type line. These objects represent Class 1, Class 2, Class 3, Class 4, Class 5, Class 6, Class 7, Class 8, Class 9.

最後のタイム ステップの予測を棒グラフで表示します。

figure
bar(score)
title("Final Prediction Scores")
xlabel("Class")
ylabel("Score")

Figure contains an axes object. The axes object with title Final Prediction Scores contains an object of type bar.

入力引数

すべて折りたたむ

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

recNet は再帰型ニューラル ネットワークです。これには少なくとも 1 つの再帰層 (LSTM ネットワークなど) を含めなければなりません。

シーケンス データまたは時系列データ。数値配列の N 行 1 列の cell 配列、1 つのシーケンスを表す数値配列、またはデータストアとして指定します。ここで、N は観測値の数です。

cell 配列入力または数値配列入力の場合、シーケンスが含まれる数値配列の次元は、データのタイプによって異なります。

入力説明
ベクトル シーケンスc 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。
1 次元イメージ シーケンスh x c x s の配列。ここで、h および 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 に対応していなければなりません。

複数の入力をもつネットワークの数値配列または cell 配列。

シーケンスの予測子入力の場合、入力は、単一のシーケンスを表す数値配列、またはシーケンスの cell 配列でなければなりません。この場合、予測子の形式は、引数 sequences の説明に記載されている形式と一致します。イメージおよび特徴の予測子入力の場合、入力が数値配列でなければならず、予測子の形式が次のいずれかと一致しなければなりません。

データ形式
2 次元イメージ

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

3 次元イメージh x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。
特徴データ

c 行 1 列の列ベクトル。c は特徴の数です。

複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。

混在データ。次のいずれかとして指定します。

データ型説明使用例
TransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • predictAndUpdateState でサポートされていないデータストアの出力を、必要な形式に変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア

  • 複数の入力をもつネットワークを使用して予測を行う。

  • 異なるデータ ソースから取得した予測子を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア

他のデータストアでサポートされていない形式のデータを使用して予測を行います。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

関数 transform および combine を使用して、予測を行うための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、predictAndUpdateState に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。

データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ネットワーク アーキテクチャによって異なります。

データストア出力出力の例

numInputs 列の cell 配列。numInputs はネットワーク入力の数です。

入力の順序は、ネットワークの InputNames プロパティによって指定されます。

data = read(ds)
data =

  4×3 cell array

    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}

シーケンスの予測子入力の場合、入力は、単一のシーケンスを表す数値配列、またはシーケンスの cell 配列でなければなりません。この場合、予測子の形式は、引数 sequences の説明に記載されている形式と一致します。イメージおよび特徴の予測子入力の場合、入力が数値配列でなければならず、予測子の形式が次のいずれかと一致しなければなりません。

データ形式
2 次元イメージ

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

3 次元イメージh x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。
特徴データ

c 行 1 列の列ベクトル。c は特徴の数です。

複数の入力をもつネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。

ヒント

数値配列をデータストアに変換するには、ArrayDatastore を使用します。

名前と値の引数

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

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

例: [updatedNet,Y] = predictAndUpdateState(recNet,C,MiniBatchSize=27) は、サイズ 27 のミニバッチを使用して予測を行います。

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

長さが異なるシーケンスで予測を行うと、ミニバッチのサイズが、入力データに追加されるパディングの量に影響し、予測値が変わることがあります。さまざまな値を使用して、ネットワークに最適なものを確認してください。ミニバッチのサイズとパディングのオプションを指定するには、MiniBatchSize オプションと SequenceLength オプションをそれぞれ使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

Acceleration オプション "auto" を使用すると、パフォーマンス上のメリットが得られますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。新しい入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。

ハードウェア リソース。次のいずれかとして指定します。

  • "auto" — 利用可能な場合は GPU を使用し、そうでない場合は CPU を使用します。

  • "gpu" — GPU を使用します。GPU を使用するには Parallel Computing Toolbox とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

  • "cpu" — CPU を使用します。

カテゴリカル ラベルを返すオプション。0 (false) または 1 (true) として指定します。

ReturnCategorical1 (true) の場合、関数は分類出力層のカテゴリカル ラベルを返します。そうでない場合、関数は分類出力層の予測スコアを返します。

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

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

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

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

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

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

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

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

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

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

入力シーケンスをパディングする値。スカラーとして指定します。

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

更新されたネットワーク。updatedNet は入力ネットワークと同じタイプのネットワークです。

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

次の表は、分類タスクの形式について説明しています。

タスクReturnCategorical形式
sequence-to-label 分類0 (false)N 行 K 列の行列。N は観測値の数、K はクラスの数です。
1 (true)N 行 1 列の categorical ベクトル。N は観測値の数です。
sequence-to-sequence 分類0 (false)

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

1 (true)

カテゴリカル シーケンスの N 行 1 列の cell 配列。N は観測値の数です。SequenceLength オプションが各ミニバッチに個別に適用されると、このカテゴリカル シーケンスは、対応する入力シーケンスと同じ数のタイム ステップが含まれる categorical ベクトルになります。

観測値が 1 つの sequence-to-sequence 分類タスクでは、sequences を行列にすることができます。この場合、Y の形式は、ReturnCategorical オプションによって異なります。

  • ReturnCategoical0 (false) の場合、Y は、K 行 S 列の行列スコアになります。ここで、K はクラスの数、S は対応する入力シーケンスに含まれるタイム ステップの総数です。

  • ReturnCategoical1 (true) の場合、Y は、1 行 S 列の categorical ベクトルになります。ここで、S は対応する入力シーケンスに含まれるタイム ステップの総数です。

次の表は、回帰タスクの形式について説明しています。

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

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

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

複数の出力をもつネットワークの予測スコアまたは予測応答。数値配列、categorical 配列、または cell 配列として返されます。

各出力 Yj は、ネットワーク出力 recNet.OutputNames(j) に対応し、出力引数 Y で説明されている形式になります。

アルゴリズム

関数 trainNetwork を使用してネットワークに学習させる場合や、DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。学習、予測、および検証のための関数には、trainNetworkpredictclassify、および activations が含まれます。CPU と GPU の両方を使用してネットワークに学習させる場合、単精度演算が使用されます。

参照

[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

拡張機能

バージョン履歴

R2017b で導入