コード生成の紹介
MATLAB® Coder™ は、コード生成をサポートする Statistics and Machine Learning Toolbox™ 関数から、読み取り可能および移植可能な C および C++ コードを生成します。生成されたコードは、ソース コード、スタティック ライブラリ、またはダイナミック ライブラリとしてプロジェクトに統合できます。また、生成されたコードを MATLAB 環境内で使用して、MATLAB コードの計算負荷が高い部分を高速化することもできます。
C/C++ コードの生成には MATLAB Coder が必要です。以下の制限があります。
codegen(MATLAB Coder) を使用してコードを生成するときに、最上位レベルにある関数を呼び出すことはできません。代わりに、"エントリポイント" 関数内で対象の関数を呼び出した後で、エントリポイント関数からコードを生成します。エントリポイント関数は、コード生成用に定義する関数で、"最上位" 関数または "プライマリ" 関数とも呼ばれます。エントリポイント関数内のすべての関数がコード生成をサポートしなければなりません。コード生成についての MATLAB Coder の制限は Statistics and Machine Learning Toolbox にも適用されます。詳細については、C/C++ コード生成でサポートされている MATLAB 言語機能 (MATLAB Coder)を参照してください。
Statistics and Machine Learning Toolbox におけるコード生成では、スパース行列はサポートされません。
各関数のコード生成に関する使用上の注意および制限については、関数のリファレンス ページの「コード生成」セクションを参照してください。
コード生成をサポートする Statistics and Machine Learning Toolbox 関数の一覧については、関数リスト (C/C++ コード生成) を参照してください。
コード生成のワークフロー
Statistics and Machine Learning Toolbox 関数に対する C/C++ コードは、いくつかの方法で生成できます。
機械学習モデルのオブジェクト関数以外の関数の一般的なコード生成ワークフロー

コード生成をサポートする関数を呼び出す "エントリポイント" 関数を定義し、
codegen(MATLAB Coder) を使用してエントリポイント関数の C/C++ コードを生成して、生成されたコードを確認します。エントリポイント関数は、コード生成用に定義する関数で、"最上位" 関数または "プライマリ" 関数とも呼ばれます。codegenを使用して最上位レベルにある関数を呼び出すことはできないので、エントリポイント関数を定義しなければなりません。エントリポイント関数内のすべての関数がコード生成をサポートしなければなりません。詳細については、一般的なコード生成のワークフローを参照してください。
機械学習モデルのオブジェクト関数 (
predict、random、knnsearch、rangesearch、isanomaly、インクリメンタル学習オブジェクト関数など) のコード生成ワークフロー
saveLearnerForCoderを使用して、学習済みモデルを保存します。loadLearnerForCoderを使用して保存済みモデルを読み込んでオブジェクト関数を呼び出す、エントリポイント関数を定義します。次に、codegen(MATLAB Coder) を使用してエントリポイント関数のコードを生成し、生成されたコードを確認します。エントリポイント関数の入力引数として、分類または回帰モデル オブジェクトは使用できません。したがって、saveLearnerForCoderとloadLearnerForCoderを使用してこの制限に対処する必要があります。分類および回帰の機械学習モデルの予測用に、単精度 C/C++ コードを生成することもできます。単精度コード生成では、関数
loadLearnerForCoderへの追加の入力として、名前と値のペアの引数'Datatype','single'を指定します。詳細については、以下の例を参照してください。
さらに、サポート ベクター マシン (SVM) モデル、決定木モデル、分類および回帰のための決定木のアンサンブルの予測用に、固定小数点 C/C++ コードを生成することもできます。このタイプのコード生成には Fixed-Point Designer™ が必要です。

固定小数点コードの生成には、予測に必要な変数の固定小数点データ型を定義する追加の手順が必要です。
generateLearnerDataTypeFcnによって生成されるデータ型関数を使用して固定小数点データ型構造体を作成し、その構造体をエントリポイント関数でloadLearnerForCoderの入力引数として使用します。コードを生成する前に固定小数点データ型を最適化することもできます。詳細については、SVM の予測用の固定小数点コード生成を参照してください。
ツリー モデル、SVM モデル、線形モデル、もしくは SVM 学習器または線形バイナリ学習器を使用するマルチクラス誤り訂正出力符号 (ECOC) 分類モデルの関数
predictおよび関数updateに対するコード生成ワークフロー
モデルに学習をさせた後で、
learnerCoderConfigurerを使用してコーダー コンフィギュアラーを作成し、generateCodeを使用してコードを生成して、生成されたコードを確認します。コード生成オプションを設定し、オブジェクトのプロパティを使用してモデル パラメーターのコーダー属性を指定できます。新しいデータまたは設定でモデルに再学習をさせた後で、コードを再生成せずに、生成された C/C++ コードのモデル パラメーターを更新できます。この機能により、C/C++ コードの再生成、再展開および再確認に必要な作業が不要になります。詳細については、予測用のコード生成とコーダー コンフィギュアラーの使用による更新を参照してください。
サポートされるタイプの機械学習モデルに分類学習器アプリまたは回帰学習器アプリで学習させるとき、そのモデルを MATLAB Coder に直接エクスポートできます。アプリの [学習] タブの [エクスポート] セクションで、[モデルのエクスポート] をクリックして [モデルを Coder にエクスポート] を選択します。詳細については、Export Classification Model to MATLAB Coder to Generate C/C++ CodeおよびExport Regression Model to MATLAB Coder to Generate C/C++ Codeを参照してください。
コード生成の応用
機械学習モデルの予測を Simulink® に統合するには、MATLAB Function ブロックを使用するか、Statistics and Machine Learning Toolbox ライブラリの Simulink ブロックを使用します。詳細については、以下の例を参照してください。
以下の例で説明されているように、Statistics and Machine Learning Toolbox の関数に対するコード生成は、System object™ や Stateflow® など、他のツールボックスとも連携します。
コード生成の応用の詳細については、以下の例を参照してください。
参考
codegen (MATLAB Coder) | saveLearnerForCoder | loadLearnerForCoder | learnerCoderConfigurer | generateLearnerDataTypeFcn
トピック
- MATLAB Coder 入門 (MATLAB Coder)