LoginSignup
3

More than 3 years have passed since last update.

Simulinkで機械学習モデルを使いたい

Last updated at Posted at 2020-01-03

はじめに

Simulinkでガウス過程回帰モデルを用いたいと思ったのですが,少しハマったのでメモ.

やりたいこと

オフラインで,fitrgpコマンドで作成したガウス過程回帰モデルを作成した.
このモデルをMATLAB function ブロック内で用いて,変数Yを推定したい.

解決方法

1) XからYを予測するガウス過程回帰モデルを作成したら,saveCompactModelでモデルを保存する.

gpr_predict.m
gprMdl = fitrgp(X, Y);
saveCompactModel(gprMdl, 'GPRModel');

2) (Simulink内 MATLAB Function blockにおいて)loadCompactModelでモデルを呼び出してpredictでYを計算する.

predict_Y
gprMdl = loadCompactModel('GPRModel');
Y = predict(gprMdl, X_online);

公式のページは以下を参照.
機械学習モデルの予測をコマンド ラインで行うコードの生成

ハマった方法

普通にmat ファイル形式でsave(gprMdl, 'GPRModel')とやると,Simulinkでは扱えない形式になってしまう.
具体的には,以下のエラーが出てくる.

調整不可プロパティをもつクラスは外部関数からの出力としてサポートされません

なんのことやら,という感じ.

データストアメモリを用いてもグローバル変数にしようとしても,だめだった.
サポートされているデータ型しか受け付けないらしい.

以前Simulinkで困ったときに,コード生成に対応しているかどうかが重要だったような・・・という記憶を頼りに調べたら上のサイトを見つけることができ,無事に解決したが,小一時間程度要してしまった.

Simulinkを用いるときにはコード生成に対応しているかどうかをチェックする癖をつけないと,また同じような問題にトラップされそう・・・
今後も気をつけよう(自戒).

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3