メインコンテンツ

TensorFlow Model Predict ブロックを使用した応答の予測

この例では、Simulink® での予測にTensorFlow Model Predictブロックを使用する方法を示します。ブロックは観測値 (予測データ) を受け入れ、Python® で実行される学習済み機械学習モデルを使用して予測した応答を返します。MATLAB® は、CPython とも呼ばれる Python のリファレンス実装をサポートしています。Mac または Linux® プラットフォームを使用している場合は、Python は既にインストールされています。Windows® を使用する場合は、https://www.python.org/downloads/ などで提供されているディストリビューションをインストールする必要があります。詳細については、Python を使用するためのシステムの構成を参照してください。使用する MATLAB Python 環境には tensorflow モジュールがインストールされている必要があります。

TensorFlow Model Predict ブロックには、SavedModel 形式または Python の Keras HDF5 ファイルとして保存した事前学習済みの TensorFlow™ モデルが必要です。この例では、保存されたモデル tfmodel.zip が用意されています。これは、UCI Machine Learning Repository [1] の ionosphere レーダー信号データ セットの半分で学習させたニューラル ネットワーク バイナリ分類モデルです。この例では、Python ファイル tfScaler.pkltfmodel.py、および tfpreprocessor.py も用意されています。サポートされる Python ファイルはすべて、tensorflow version 2.14.0 を使用して保存されました。

用意された Simulink モデルを開く

この例では、TensorFlow Model Predict ブロックを含む Simulink モデル slexTensorFlowPredictExample.slx が用意されています。次のセクションで説明するように、Simulink モデルを開くことも、新しいモデルを作成することもできます。

Simulink モデル slexTensorFlowPredictExample.slx を開きます。

open_system("slexTensorFlowPredictExample");

TFPredict.png

Simulink モデルを開くと、Simulink モデルを読み込む前にソフトウェアによって PreLoadFcn コールバック関数内のコードが実行されます。slexTensorFlowPredictExamplePreLoadFcn コールバック関数には、学習済みモデルの modelInput 変数がワークスペースに含まれているかどうかをチェックするコードが含まれています。ワークスペースに変数が含まれていない場合、PreLoadFcn はサンプル データを読み込み、Simulink モデルの入力信号を作成します。コールバック関数を表示するには、[モデル化] タブの [設定] セクションで、[モデル設定] をクリックし、[モデル プロパティ] を選択します。次に、[コールバック] タブの [モデルのコールバック] ペインで PreLoadFcn コールバック関数を選択します。

Simulink モデルの作成

新しい Simulink モデルを作成するには、[空のモデル] テンプレートを開き、Statistics and Machine Learning Toolbox™ ライブラリから TensorFlow Model Predict ブロックを追加します。

Inport ブロックと Outport ブロックを追加し、それらを TensorFlow Model Predict ブロックに接続します。

TensorFlow Model Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。[モデル (SavedModel フォルダーまたは Keras HDF5 ファイル) へのパス] テキスト ボックスに tfmodel と入力します。

[前/後処理] タブで、[preprocess() を定義する Python ファイルへのパス] テキスト ボックスに tfpreprocessor.py と入力します。[OK] をクリックします。

Python モデルは 34 個の予測子変数を含むデータ セットを使用して学習させているため、TensorFlow Model Predict ブロックでは 34 個の予測子の値を含む観測値が必要です。Inport ブロックをダブルクリックし、[信号属性] タブで [端子の次元] を 34 に設定します。

出力信号が入力信号と同じ長さになるように指定するには、[実行] タブで [サンプル時間] を 1 に設定します。

[データを内挿する] のチェック ボックスをオフにして、[OK] をクリックします。

ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射に対する 34 個の予測子 (X) と 351 個の二項反応 (Y) があり、不良 ("b") または良好 ("g") のいずれかになります。

load ionosphere

入力データに適した構造体配列を作成します。詳細については、Control How Models Load Input Data (Simulink)を参照してください。

modelInput.time = (1:size(X,1))' - 1;
modelInput.signals.values = X;
modelInput.signals.dimensions = size(X,2);

次のようにして、ワークスペースから信号データをインポートします。

  • [モデル化] タブで [モデル設定] をクリックし、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  • ダイアログ ボックスの左側にある [データのインポート/エクスポート] をクリックします。次に、[入力] チェック ボックスをオンにし、隣接するテキスト ボックスに modelInput と入力します。

  • 左側の [ソルバー] をクリックします。[シミュレーション時間] の下にある [終了時間]size(X,1)-1 に設定します。[ソルバーの選択] で、[タイプ][Fixed-step] に設定し、[ソルバー][discrete (no continuous states)] に設定します。[OK] をクリックします。

詳細については、シミュレーションのための信号データの読み込み (Simulink)を参照してください。

Simulink でモデルを slexTensorFlowPredictExample.slx として保存します。

Simulink モデルのシミュレーション

Python TensorFlow モデルを含む tfmodel.zip ファイルを解凍します。

if ~exist("tfmodel","file")
    unzip("tfmodel.zip")
end

Simulink モデルをシミュレーションして、入力観測値に対する応答を予測します。Python のインストールで 2.14.0 より前のバージョンの tensorflow を使用している場合は、警告メッセージが表示されることがあります。

simOut=sim("slexTensorFlowPredictExample");

Inport ブロックは入力データを検出すると、そのデータを TensorFlow Model Predict ブロックに配置します。TensorFlow Model Predict ブロックは、入力データを [Python データ型] 列 ([ブロック パラメーター] ダイアログ ボックスの [入力] タブ内) で指定されている Python データ型または NumPy データ型に変換します。ブロックはデータを Python に渡し、ソフトウェアは preprocessor.py で定義された関数を使用してデータを前処理した後、データを Python モデルに送信します。Python モデルは、観測値に対する予測応答を返します。シミュレーション データ インスペクター (Simulink)を使用して、Outport ブロックのログ データを表示できます。

モデル予測の可視化

各観測値に対する予測応答をプロットします。

Resp = round(squeeze(simOut.yout.getElement(1).Values.Data));
plot(Resp,LineStyle="none",Marker="*")
xlabel("Observation")
ylabel("Predicted Response")

不良 ("b") および良好 ("g") の予測応答値は、それぞれ 0 と 1 として示されます。

参考文献

[1] Lichman, M. UCI Machine Learning Repository, Irvine, CA: University of California, School of Information and Computer Science, 2013. https://archive.ics.uci.edu.

参考

| | |

トピック