RegressionNeuralNetwork Predict ブロックの使用による応答の予測
この例では、RegressionNeuralNetwork Predictブロックを Simulink® の応答予測に使用する方法を示します。このブロックは、観測値 (予測子データ) を受け入れて、学習済みのニューラル ネットワーク回帰モデルを使用することにより、その観測値の予測された応答を返します。
回帰モデルの学習
cereal データ セットを読み込みます。77 個の観測値に対する 6 個の特徴量を格納する数値行列として予測子 X を作成します。各シリアルのカロリーを格納する数値ベクトルとして応答 Y を作成します。
load cereal
X = [Carbo Cups Fat Fiber Protein Sugars];
Y = Calories;非層化ホールドアウト分割を使用して、データを学習セットとテスト セットに分割します。観測値の約 20% がテスト データ セット用に予約され、残りの観測値が学習データ セットに使用されます。
rng("default") % For reproducibility of the partition cv = cvpartition(length(Y),"Holdout",0.20);
学習インデックスとテスト インデックスを抽出します。
trainingInds = training(cv); testInds = test(cv);
学習データ セットとテスト データ セットを指定します。
XTrain = X(trainingInds,:); YTrain = Y(trainingInds); XTest = X(testInds,:); YTest = Y(testInds);
学習データ XTrain および YTrain を関数 fitrnet に渡して、ニューラル ネットワーク回帰モデルに学習させます。数値予測子を標準化するための指定を行い、He 初期化子で重みを初期化します。
nnetMdl = fitrnet(XTrain,YTrain,"Standardize",true, ... "LayerWeightsInitializer","he")
nnetMdl =
RegressionNeuralNetwork
ResponseName: 'Y'
CategoricalPredictors: []
ResponseTransform: 'none'
NumObservations: 62
LayerSizes: 10
Activations: 'relu'
OutputLayerActivation: 'none'
Solver: 'LBFGS'
ConvergenceInfo: [1×1 struct]
TrainingHistory: [55×7 table]
Properties, Methods
nnetMdl は RegressionNeuralNetwork モデルです。ドット表記を使用して nnetMdl のプロパティにアクセスできます。たとえば、nnetMdl.TrainingHistory と指定すると、ニューラル ネットワーク モデルの学習履歴についての詳細情報を取得できます。
Simulink モデルの作成
この例では、RegressionNeuralNetwork Predictブロックを含む Simulink モデル slexRegressionNeuralNetworkPredictExample.slx が用意されています。この節の説明に従って、この Simulink モデルを開くことも、新しいモデルを作成することもできます。
指定されたモデルを開く
Simulink モデル slexRegressionNeuralNetworkPredictExample.slx を開きます。
SimMdlName = 'slexRegressionNeuralNetworkPredictExample';
open_system(SimMdlName)
Simulink モデルを開くと、Simulink モデルを読み込む前に、ソフトウェアがコールバック関数 PreLoadFcn のコードを実行します。slexRegressionNeuralNetworkPredictExample のコールバック関数 PreLoadFcn には、学習済みモデルの変数 nnetMdl がワークスペースにあるかどうかをチェックするコードが含まれています。ワークスペースに変数がない場合、PreLoadFcn は標本データを読み込み、ニューラル ネットワーク モデルに学習させ、Simulink モデルの入力信号を作成します。コールバック関数を表示するには、[モデル化] タブの [設定] セクションで、[モデル設定] をクリックし、[モデル プロパティ] を選択します。次に、[コールバック] タブで、[モデルのコールバック] ペインのコールバック関数 PreLoadFcn を選択します。
新規モデルの作成
指定されたモデルを開く代わりに新規モデルを作成できます。新しい Simulink モデルを作成するには、[空のモデル] テンプレートを開き、RegressionNeuralNetwork Predict ブロックを追加します。Inport ブロックと Outport ブロックを追加して、それらを RegressionNeuralNetwork Predict ブロックに接続します。
RegressionNeuralNetwork Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。学習済みのニューラル ネットワーク モデルを含むワークスペース変数の名前を指定できます。既定の変数名は nnetMdl です。[リフレッシュ] ボタンをクリックします。ダイアログ ボックスの [Trained Machine Learning Model] セクションに、モデル nnetMdl の学習に使用されるオプションが表示されます。

RegressionNeuralNetwork Predict ブロックには、6 個の予測子の値を含む観測値が必要です。Inport ブロックをダブルクリックし、[信号属性] タブで [端子の次元] を 6 に設定します。
Simulink モデルの構造体配列の形式で、入力信号を作成します。構造体配列には、次のフィールドが含まれていなければなりません。
time— 観測値がモデルに入力された時点。方向は予測子データ内の観測値に対応しなければなりません。この例の場合はtimeが列ベクトルでなければなりません。signals—valuesフィールドとdimensionsフィールドが含まれている、入力データを説明する 1 行 1 列の構造体配列。valuesは予測子データの行列、dimensionsは予測子変数の個数です。
将来の予測用に適切な構造体配列を作成します。
cerealInput.time = (0:length(YTest)-1)'; cerealInput.signals(1).values = XTest; cerealInput.signals(1).dimensions = size(XTest,2);
ワークスペースから信号データをインポートします。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開く。[モデル化] タブで、[モデル設定] をクリック。
[データのインポート/エクスポート] ペインで [入力] チェック ボックスをオンにし、隣のテキスト ボックスに「
cerealInput」と入力。[ソルバー] ペインの [シミュレーション時間] で、[終了時間] を
cerealInput.time(end)に設定。[ソルバーの選択] で、[タイプ] をFixed-stepに、[ソルバー] をdiscrete (no continuous states)に設定。
詳細は、シミュレーションのための信号データの読み込み (Simulink)を参照してください。
モデルをシミュレーション
モデルをシミュレートします。
sim(SimMdlName);
Inport ブロックでは、観測値を検出すると、その観測値を RegressionNeuralNetwork Predict ブロックに配置します。シミュレーション データ インスペクター (Simulink)を使用して、Outport ブロックのログ データを表示できます。
参考
RegressionNeuralNetwork Predict