generateLearnerDataTypeFcn
固定小数点コードの生成用のデータ型を定義する関数を生成
説明
機械学習モデルの関数 predict の固定小数点の C/C++ コードを生成するには、generateLearnerDataTypeFcn、saveLearnerForCoder、loadLearnerForCoder および codegen (MATLAB Coder) を使用します。
機械学習モデルに学習させた後で、
saveLearnerForCoderを使用してモデルを保存します。generateLearnerDataTypeFcnから生成される関数を使用して、固定小数点データ型を定義する構造体を作成します。loadLearnerForCoderと構造体の両方を使用してモデルを読み込み、関数predictを呼び出すエントリポイント関数を定義します。codegenを使用してコードを生成し、生成されたコードを確認します。
関数 generateLearnerDataTypeFcn には Fixed-Point Designer™ が必要であり、固定小数点の C/C++ コードの生成には MATLAB® Coder™ および Fixed-Point Designer が必要です。
次のフロー チャートは、機械学習モデルの関数 predict の固定小数点のコード生成ワークフローを示します。強調表示されているステップで generateLearnerDataTypeFcn を使用します。

generateLearnerDataTypeFcn( は、機械学習モデルの予測用の固定小数点の C/C++ コードの生成に必要な変数の固定小数点データ型を定義するデータ型関数を生成します。filename,X)filename は機械学習モデルを格納し、X にはモデルの関数 predict の予測子データが含まれます。
生成された関数を使用して、固定小数点データ型を定義する構造体を作成します。この場合、loadLearnerForCoder の入力引数 T として構造体を使用します。
generateLearnerDataTypeFcn( では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、固定小数点データ型で 32 ビットのワード長を使用するには、filename,X,Name,Value)'WordLength',32 を指定します。
例
入力引数
名前と値の引数
詳細
ヒント
生成された固定小数点コードの精度を向上させるために、固定小数点データ型を調整できます。データ型関数 (
myMdl_datatype) を更新して、新しい構造体を作成して固定小数点データ型を変更し、その新しい構造体を使用してコードを再生成します。次の 2 つの方法のいずれかで、関数myMdl_datatypeを更新できます。generateLearnerDataTypeFcnとその名前と値のペアの引数を使用して、関数myMdl_datatypeを再生成します。名前と値のペアの引数
'WordLength'を使用して、語長を増やします。名前と値のペアの引数
'PercentSafetyMargin'を使用して、安全余裕を減らします。
語長を増やしたり、安全余裕を減らしたりすると、より長い小数部の長さが提案され、したがって、指定のデータ セットに基づいて生成されたコードの精度が向上します。
関数ファイル (
myMdl_datatype.m) の固定小数点データ型を手動で変更します。各変数について、語長と小数部の長さを調整し、fimath(Fixed-Point Designer) オブジェクトを使用して固定小数点の数学的設定を指定できます。
生成された固定小数点コードで、操作を大量に行ったり、変数範囲を大きくすると、対応する浮動小数点コードの精度と比較して精度が失われる可能性があります。SVM モデルの学習時は、次のヒントに注意して、生成された固定小数点コードの精度が失われないようにします。
データの標準化 (
'Standardize') — SVM モデルのサポート ベクターのモデル プロパティの値がオーバーフローしないようにするために、予測子データを標準化できます。モデルを学習させるときに名前と値のペアの引数'Standardize'を使用せず、データを近似関数と関数predictに渡す前に予測子データを標準化し、固定小数点コードに標準化の操作が含まれないようにします。カーネル関数 (
'KernelFunction') — 多項式カーネルを使用するより、ガウス カーネルまたは線形カーネルを使用する方が適切です。多項式カーネルは、他のカーネルよりさらに多くの計算量が必要であり、多項式カーネル関数の出力は無制限です。カーネル スケール (
'KernelScale') — カーネル スケールを使用すると、'KernelScale'の値が 1 ではない場合に追加の操作が必要です。予測されたクラス スコアの値の範囲が大きい場合、1 クラス分類問題の予測の精度が失われる可能性があります。
FunctionApproximation.TransformFunction(Fixed-Point Designer) オブジェクトとその関数approximate(Fixed-Point Designer) を使用して、学習済み分類器のスコア変換関数を近似するルックアップ テーブルを生成できます。その後、そのルックアップ テーブルを固定小数点コードの生成に使用します。このアプローチを使用すると、CORDIC ベースのアルゴリズムを使用する既定のアプローチに比べて、生成されるコードでのスコア変換に必要な計算が少なくなります。そのため、ルックアップ テーブルを使用することで、パフォーマンスが比較的高速になり、必要なメモリも比較的少なくなります。サポートされるスコア変換関数には、'doublelogit'、'logit'、および'symmetriclogit'が含まれます。例については、スコア変換を近似するためのルックアップ テーブルの使用を参照してください。 (R2023a 以降)
バージョン履歴
R2019b で導入参考
loadLearnerForCoder | saveLearnerForCoder | buildInstrumentedMex (Fixed-Point Designer) | showInstrumentationResults (Fixed-Point Designer) | codegen (MATLAB Coder) | fi (Fixed-Point Designer)