主要内容

。

机械学习モデルの予测をコマンドラインで行うコードの生成

この例では,分类および回帰モデルオブジェクトの予测を行うためのコードをコマンドラインで生成する方法を示します.MATLAB®编码器™アプリを使用してコードを生成することもできます。详细については,机械学习モデルの予测をMATLAB编码器アプリを使用して行うコードの生成を参照してください。

一部の分類および回帰モデルオブジェクトには,コード生成をサポートする関数预测または随机的があります。これらのオブジェクト关数を使用する予测には学习済みの分类または回帰モデルオブジェクトが必要ですが,Codegen.(MATLAB编码器)- args.オプションはこれらのオブジェクトを受け入れません。この例で说明されているようにSavelarnerforcoder.loadlearnerforcoder.を使用して,この制限に対处します。

次のフローチャートは,分类および回帰モデルオブジェクトのオブジェクト关数に対するコード生成ワークフローを示します。

モデルに学習をさせた後で,Savelarnerforcoder.を使用して学习済みモデルを保存します。loadlearnerforcoder.を使用して保存済みモデルを読み込んでオブジェクト関数を呼び出す,エントリポイント関数を定義します。次に,Codegen.を使用してエントリポイント关数のコードを生成し,生成されたコードを确认します。

分類モデルの学習

コード生成に対応している关数预测がある分类モデルオブジェクトに学习をさせます。このケースでは,サポートベクターマシン(SVM)分类モデルに学习をさせます。

加载fisheririsINDS =〜的strcmp(物种,“setosa”);X = MEAS(INDS,3:4);Y =物种(INDS);MDL = fitcsvm(X,Y);

この手順には,データの前処理,特徴選択および(交差検証などの使用による)モデルの最適化が含まれる可能性があります。

Savelarnerforcoder.の使用によるモデルの保存

Savelarnerforcoder.を使用して,分类モデルをSVMModel.matというファイルに保存します。

SavelAlnerForCoder(MDL,'SVMModel');

Savelarnerforcoder.は,现在のフォルダーのMATLABバイナリファイルSVMModel.matに构造体配列として分类モデルを保存します。

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

“エントリポイント”关数は,コード生成用に定义する关数で, “最上位”関数または”プライマリ”関数とも呼ばれます。Codegen.を使用して最上位レベルの关数を呼び出すことはできないので,コード生成に対応する关数を呼び出すエントリポイント关数を定义し,Codegen.を使用してエントリポイント関数のC / c++コードを生成しなければなりません。エントリポイント関数内のすべての関数がコード生成をサポートしなければなりません。

入力された予测子データに対して予测したラベルを返すエントリポイント关数を定义します。この关数では,loadlearnerforcoder.を使用して学习済みの分类モデルを読み込み,预测に渡します。このケースでは,SVMモデルMdlを使用してラベルを予测する关数predictLabelsSVMを定义します。

类型predictLabelsSVM.m%predictLabelsSVM.m文件的显示内容
功能标记= predictLabelsSVM(X)%#代码生成%PREDICTLABELSSVM标签中使用训练的SVM模型铜牌%predictLabelsSVM预测标签的标签载体使用%新的观察所保存的SVM模型铜牌和预测器数据x。MDL = loadLearnerForCoder( 'SVMModel');标记=预测(MDL,X);结尾

MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令%#代码生成(またはプラグマ)をエントリポイント关数のシグネチャの后に追加します。この命令を追加すると,MATLAB代码分析器はコード生成时にエラーになる违反の诊断と修正を支援します。コードアナライザーによるコードのチェック(MATLAB编码器)を参照してください。

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

コードの生成

コンパイラの設定

C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人-设置を使用すると,既定のコンパイラを表示および変更できます详细。は,既定のコンパイラの変更を参照してください。

Codegen.の使用によるコードの生成

Codegen.(MATLAB编码器)を使用して,エントリポイント关数のコードを生成します.CおよびC ++は静的な型の言语なので,エントリポイント关数内のすべての変数のプロパティをコンパイル时に决定しなければなりません。Codegen.を呼び出すときに- args.オプションを使用して,エントリポイント关数のすべての入力についてデータ型とサイズを指定します。

このケースでは,- args.オプションの値としてXを渡し,生成コードが学习データXと同じデータ型および配列サイズをもつ入力を受け入れなければならないことを指定します。

Codegen.predictLabelsSVM-  args.{X}

コンパイル时に観测値の个数が不明である场合,Coder.typeof.(MATLAB编码器)を使用して可変サイズの入力を指定することもできます。详细については,コード生成用の可変サイズ引数の指定エントリポイント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。

ビルドタイプ

MATLAB编码器は,以下のビルドタイプについてコードを生成できます。

  • MEX(MATLAB実行可能ファイル)关数

  • スタンドアロンC / C ++コード

  • スタティックライブラリにコンパイルされるスタンドアロンC / C ++コード

  • ダイナミックリンクライブラリにコンパイルされるスタンドアロンC / C ++コード

  • 実行可能ファイルにコンパイルされるスタンドアロンC / C ++コード

ビルドタイプは,Codegen.(MATLAB编码器)-Config.オプションを使用して指定できます。コード生成オプションの设定の详细については,Codegen.(MATLAB编码器)-Config.オプションとビルド设定の构成(MATLAB编码器)を参照してください。

既定では,Codegen.はMEX关数を生成します.MEX关数は,MATLABから実行できるC / C ++プログラムです.MEX关数を使用すると,MATLABのアルゴリズムを高速化し,生成されたコードの机能と実行时の问题をテストすることができます详细。は,MATLABアルゴリズムの高速化(MATLAB编码器)MATLABで墨西哥人関数をテストする理由(MATLAB编码器)を参照してください。

コード生成レポート

-报告フラグを使用して,コード生成レポートを作成できます。このレポートは,コード生成の问题のデバッグと,生成されたC / C ++コードの确认に役立ちます。详细については,コード生成レポート(MATLAB编码器)を参照してください。

生成されたコードの确认

MEX关数をテストして,生成されたコードが元のMATLABコードと同じ机能を提供するかどうかを确认します。このテストを実行するため,元のMATLABコードの実行に使用したものと同じ入力を使用してMEX关数を実行してから,结果を比较します。スタンドアロンコードを生成する前にMATLABでMEX关数を実行すると,実行时エラーを検出して修正することもできます。生成されたスタンドアロンコードでは,このようなエラーの诊断がはるかに困难になります详细。は,MATLABで墨西哥人関数をテストする理由(MATLAB编码器)を参照してください。

予測子データを渡して,预测predictLabelsSVMおよびMEX关数が同じラベルを返すかどうかを确认します。

labels1 =预测(MDL,X);标签2 = predictLabelsSVM(X);标签3 = predictLabelsSVM_mex(X);

是平等的を使用して,予测されたラベルを比较します。

verifyMEX = isequal (labels1 labels2 labels3)
verifyMEX =逻辑1

是平等的は,すべての入力が等しいことを意味する逻辑1(真正的)を返します。この比较により,同じラベルを关数预测,关数predictLabelsSVM,および墨西哥人関数が返すことを確認します。

参考

|||(MATLAB编码器)

关键词トピック