ドキュメンテーション

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

predictAndUpdateState

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

説明

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

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

この関数は、再帰型ニューラル ネットワークのみをサポートしています。入力 recNet には少なくとも 1 つの再帰層を含めなければなりません。

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

ヒント

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

すべて折りたたむ

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

この例で結果を再現するには、rng'default' に設定します。

rng('default')

[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

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

load JapaneseVowelsTest

シーケンスのタイム ステップについてループします。各タイム ステップのスコアを予測し、ネットワークの状態を更新します。

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 = YTest(94)
trueLabel = categorical
     3 

lines(trueLabel).LineWidth = 3;

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

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

入力引数

すべて折りたたむ

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

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

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

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

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

例: 'MiniBatchSize',256

パフォーマンスの最適化。'Acceleration' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

既定のオプションは 'auto' です。

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

例: 'Acceleration','auto'

ハードウェア リソース。'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' — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。

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

シーケンス長を正の整数として指定している場合、連続する反復においてより小さいシーケンスが処理されます。ネットワークは、分割されたシーケンスとシーケンスの間にネットワークの状態を更新します。

パディングと切り捨てはシーケンスの右側に対して行われます。入力シーケンスのパディング、切り捨て、および分割の効果の詳細は、シーケンスのパディング、切り捨て、および分割を参照してください。

例: 'SequenceLength','shortest'

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

例: 'SequencePaddingValue',-1

出力引数

すべて折りたたむ

更新されたネットワーク。SeriesNetwork オブジェクトとして返されます。

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

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

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

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

観測値が 1 つの sequence-to-sequence 分類問題では、sequences を行列にすることができます。この場合、YPred は、スコアの K 行 S 列の行列です。K はクラスの数、S は対応する入力シーケンスのタイム ステップの総数です。

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

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

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

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

アルゴリズム

Deep Learning Toolbox™ に含まれる深層学習における学習、予測、検証用のすべての関数は、単精度浮動小数点演算を使用して計算を実行します。深層学習用の関数には trainNetworkpredictclassifyactivations などがあります。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 で導入