主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

saveLearnerForCoder

モデルオブジェクトをコード生成用のファイルに保存

説明

機械学習モデルのオブジェクト関数(预测随机knnsearchrangesearch,インクリメンタル学習オブジェクト関数など)に対するC / c++コードを生成するには,saveLearnerForCoderloadLearnerForCoder,およびcodegen(MATLAB编码器)を使用します。機械学習モデルに学習をさせた後で,saveLearnerForCoderを使用してモデルを保存します。loadLearnerForCoderを使用してモデルを読み込みオブジェクト関数を呼び出す,エントリポイント関数を定義します。その後,codegenまたはMATLAB®编码器™アプリを使用してC / c++コードを生成します。C / c++コードの生成にはMATLAB编码器が必要です。

次のフローチャートは,機械学習モデルのオブジェクト関数に対するコード生成ワークフローを示します。強調表示されているステップでsaveLearnerForCoderを使用します。

固定小数点のC / c++コードを生成するには,予測に必要な変数の固定小数点データ型を定義する追加の手順が必要です。generateLearnerDataTypeFcnによって生成されるデータ型関数を使用して固定小数点データ型構造体を作成し,その構造体をエントリポイント関数でloadLearnerForCoderの入力引数として使用します。固定小数点のC / c++コードを生成するには,MATLAB编码器および定点设计师™が必要です。

次のフローチャートは,機械学習モデルの関数预测の固定小数点のコード生成ワークフローを示します。強調表示されているステップでsaveLearnerForCoderを使用します。

saveLearnerForCoder (Mdl文件名は,分類モデル,回帰モデルまたは最近傍探索モデル(Mdl)をコード生成用に準備してから,文件名という名前のMATLAB形式のバイナリファイル(垫ファイル)に保存します。文件名loadLearnerForCoderに渡すと,文件名ファイルからモデルオブジェクトを再構築できます。

すべて折りたたむ

機械学習モデルに学習をさせた後で,saveLearnerForCoderを使用してモデルを保存します。loadLearnerForCoderを使用してモデルを読み込み学習済みモデルの関数预测を呼び出す,エントリポイント関数を定義します。その後,codegen(MATLAB编码器)を使用してC / c++コードを生成します。

この例では,コマンドラインで機械学習モデルの予測を行うためのコード生成ワークフローについて簡単に説明します。詳細は,機械学習モデルの予測をコマンドラインで行うコードの生成を参照してください。MATLABCoder アプリを使用してコードを生成することもできます。詳細については、機械学習モデルの予測をMATLAB编码器アプリを使用して行うコードの生成を参照してください。再近傍探索モデルを使用した最近傍探索用のコード生成の詳細については,最近傍探索モデルのコード生成を参照してください。

モデルの学習

フィッシャーのアヤメのデータセットを読み込みます。観測されたsetosa種のアヤメをすべて削除して,2つのクラスのデータのみがXYに含まれるようにします。

负载fisheriris第1 = ~ strcmp(物种,“setosa”);X =量(第1:);Y =物种(第1);

処理済みのデータセットを使用して,サポートベクターマシン(SVM)分類モデルに学習をさせます。

Mdl = fitcsvm (X, Y);

MdlClassificationSVMモデルです。

モデルの保存

saveLearnerForCoderを使用して,支持向量机分類モデルをSVMIris.matというファイルに保存します。

saveLearnerForCoder (Mdl“SVMIris”);

エントリポイント関数の定義

以下を行うclassifyIrisという名前のエントリポイント関数を定義します。

  • に対応する列をもつアヤメの花の測定値を受け入れ,予測したラベルを返す。

  • 学習済みのSVM分類モデルを読み込む。

  • 読み込んだアヤメの花の測定値の分類モデルを使用して,ラベルを予測する。

类型classifyIris.m%显示虹膜分类内容。m文件
% classifyIris使用文件SVMIris中的SVM %模型对X中的鸢尾花进行分类。Mat,然后返回label中的类标签。Mdl = loadLearnerForCoder(“SVMIris”);标签=预测(Mdl X);结束

MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令% # codegen(またはプラグマ)をエントリポイント関数のシグネチャの後に追加します。この命令を追加すると,MATLAB代码分析器はコード生成時にエラーになる違反の診断と修正を支援します。

メモ:この例の右上にあるボタンをクリックしてこの例をMATLAB®で開くと,例のフォルダーが開きます。このフォルダーには,エントリポイント関数のファイルが含まれています。

コードの生成

codegen(MATLAB编码器)を使用して,エントリポイント関数のコードを生成します。Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。arg游戏オプションの値としてXを渡し,生成コードが学習データXと同じデータ型および配列サイズをもつ入力を受け入れなければならないことを指定します。コンパイル時に観測値の個数が不明である場合,coder.typeof(MATLAB编码器)を使用して可変サイズの入力を指定することもできます。詳細は,コード生成用の可変サイズ引数の指定エントリポイント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。

codegenclassifyIrisarg游戏{X}
代码生成成功。

codegenは,プラットフォームに依存する拡張子をもつ墨西哥人関数classifyIris_mexを生成します。

生成されたコードの確認

预测classifyIrisおよびclassifyIris_mexを使用して分類されたラベルを比較します。

label1 =预测(Mdl X);label2 = classifyIris (X);label3 = classifyIris_mex (X);verify_label = isequal (label1 label2 label3)
verify_label =逻辑1

isequalは,すべての入力が等しいことを意味する逻辑1(真正的)を返します。3つの方法で分類したラベルは,すべて同じです。

機械学習モデルに学習させた後で,saveLearnerForCoderを使用してモデルを保存します。固定小数点のコード生成の場合,generateLearnerDataTypeFcnによって生成されるデータ型関数を使用して,予測に必要な変数の固定小数点データ型を指定します。次に,loadLearnerForCoderおよび指定した固定小数点データ型の両方を使用してモデルを読み込んでからモデルの関数预测を呼び出す,エントリポイント関数を定義します。codegen(MATLAB编码器)を使用してエントリポイント関数の固定小数点のC / c++コードを生成し,生成されたコードを確認します。

codegenを使用してコードを生成する前に,buildInstrumentedMex(定点设计师)showInstrumentationResults(定点设计师)を使用して固定小数点データ型を最適化し,固定小数点コードのパフォーマンスを向上させることができます。buildInstrumentedMexを使用して,予測用の名前付きの内部変数の最小値と最大値を記録します。showInstrumentationResultsを使用して計測結果を表示します。次に,その結果に基づいて、変数の固定小数点データ型のプロパティを調整します。このオプション手順の詳細については、SVMの予測用の固定小数点コード生成を参照してください。

モデルの学習

电离层データセットを読み込み,バイナリSVM分類モデルに学習をさせます。

负载电离层Mdl = fitcsvm (X, Y,“KernelFunction”“高斯”);

MdlClassificationSVMモデルです。

モデルの保存

saveLearnerForCoderを使用して,支持向量机分類モデルをmyMdl.matというファイルに保存します。

saveLearnerForCoder (Mdl“myMdl”);

固定小数点データ型の定義

generateLearnerDataTypeFcnを使用して,SVMモデルの予測に必要な変数の固定小数点データ型を定義する関数を生成します。

generateLearnerDataTypeFcn (“myMdl”, X)

generateLearnerDataTypeFcnは関数myMdl_datatypeを生成します。

myMdl_datatypeを使用して,固定小数点データ型を定義する構造体Tを作成します。

T = myMdl_datatype (“固定”
T =结构体字段:XDataType: [0 x0嵌入。fi] ScoreDataType: [0x0 embedded.fi] InnerProductDataType: [0x0 embedded.fi]

構造体Tには,関数预测の実行に必要な名前付きの内部変数に対するフィールドが含まれています。各フィールドには,fi(定点设计师)で返される固定小数点オブジェクトが含まれています。固定小数点オブジェクトは,語長や小数部の長さなどの固定小数点データ型のプロパティを指定します。たとえば,予測子データの固定小数点データ型プロパティを表示します。

T.XDataType
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14 RoundingMethod: Floor OverflowAction: Wrap ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128

エントリポイント関数の定義

以下を行うmyFixedPointPredictという名前のエントリポイント関数を定義します。

  • 予測子データXおよび固定小数点データ型構造体Tを受け入れる。

  • loadLearnerForCoderおよび構造体Tの両方を使用して,学習済みSVM分類モデルの固定小数点バージョンを読み込みます。

  • 読み込まれたモデルを使用してラベルとスコアを予測する。

类型myFixedPointPredict.m显示myFixedPointPredict的内容。m文件
function [label,score] = myFixedPointPredict(X,T) %#codegen Mdl = loadLearnerForCoder('myMdl','DataType',T);(标签,分数)=预测(Mdl X);结束

メモ:この例の右上にあるボタンをクリックしてMATLAB®で例を開くと,MATLABは例のフォルダーを開きます。このフォルダーには,エントリポイント関数のファイルが含まれています。

コードの生成

構造体TXDataTypeフィールドは予測子データの固定小数点データ型を指定します。関数(定点设计师)を使用してXT.XDataTypeで指定された型に変換します。

X_fx =投(X,“喜欢”, T.XDataType);

codegenを使用して,エントリポイント関数のコードを生成します。X_fxと定数畳み込みされたTをエントリポイント関数の入力引数として指定します。

codegenmyFixedPointPredictarg游戏{X_fx, coder.Constant (T)}
代码生成成功。

codegenは,プラットフォームに依存する拡張子をもつ墨西哥人関数myFixedPointPredict_mexを生成します。

生成されたコードの確認

予測子データを预测myFixedPointPredict_mexに渡し,出力を比較します。

(标签、分数)=预测(Mdl X);[labels_fx, scores_fx] = myFixedPointPredict_mex (X_fx T);

预测myFixedPointPredict_mexからの出力を比較します。

labels_fx verify_labels = isequal(标签)
verify_labels =逻辑1

isequalは、逻辑1(真正的)を返します。これは标签labels_fxが等しいことを意味します。ラベルが等しくない場合,不正に分類されたラベルの割合を次のように計算できます。

sum (strcmp (labels_fx、标签)= = 0)/元素个数(labels_fx) * 100
ans = 0

スコア出力間の相対的な差分の最大値を求めます。

relDiff_scores = max (abs (scores_fx.double(: 1)分数(:1))。/分数(:1)))
relDiff_scores = 0.0055

比較結果に満足せず,生成されたコードの精度を向上させる場合,固定小数点データ型を調整し,コードを再生成できます。詳細については,generateLearnerDataTypeFcnヒントデータ型関数およびSVMの予測用の固定小数点コード生成を参照してください。

入力引数

すべて折りたたむ

機械学習モデル。完全またはコンパクトなモデルオブジェクトを指定します。サポートされるモデルは次の表に記載されています。表には,各モデルが固定小数点コードの生成をサポートしているかどうかも示されています。

ファイル名。文字ベクトルまたは字符串スカラーを指定します。

文件名ファイルが存在する場合,saveLearnerForCoderはファイルを上書きします。

文件名ファイルの拡張子は.matでなければなりません。文件名に拡張子がない場合,saveLearnerForCoder.matを追加します。

文件名に絶対パスが含まれていない場合,saveLearnerForCoderは現在のフォルダーにファイルを保存します。

例:“SVMMdl”

データ型:字符|字符串

アルゴリズム

saveLearnerForCoderは機械学習モデル(Mdl)をコード生成用に準備します。この関数は,いくつかの不要なプロパティを削除します。

  • 対応するコンパクトなモデルがあるモデルの場合,関数saveLearnerForCoderは該当する関数紧凑的をモデルに適用してからモデルを保存します。

  • 対応するコンパクトなモデルがないモデル(ClassificationKNNClassificationLinearRegressionLinearExhaustiveSearcherKDTreeSearcherなど)の場合,関数saveLearnerForCoderはプロパティ(ハイパーパラメーター最適化プロパティなど),ソルバーの学習に関する情報などを削除します。

loadLearnerForCoderは,saveLearnerForCoderによって保存されたモデルを読み込みます。

代替機能

R2019bで導入