深層学習ネットワーク向けの汎用 C/C++ コードの生成
MATLAB® Coder™ を使用して、既に学習済みのニューラル ネットワークからの予測のための汎用 C または C++ コードを生成できます。生成された C/C++ コードは、サードパーティ ライブラリに依存しません。生成されたコードは、入力 SeriesNetwork
(Deep Learning Toolbox)、DAGNetwork
(Deep Learning Toolbox)、または dlnetwork
(Deep Learning Toolbox) ネットワーク オブジェクトで指定されるアーキテクチャ、レイヤー、およびパラメーターを使用してニューラル ネットワークを実装します。コード生成でサポートされているネットワークとレイヤーを参照してください。
次のいずれかの方法を使用してコードを生成します。
MATLAB コードからの C/C++ コード生成のための標準
codegen
コマンド。MATLAB Coder アプリ。
必要条件
Windows® では、関数
codegen
を使用した深層学習ネットワークのコード生成には Microsoft® Visual Studio® または MinGW® コンパイラが必要です。MATLAB Coder Interface for Deep Learning。このサポート パッケージをインストールするには、これを MATLAB の [アドオン] メニューから選択します。
Deep Learning Toolbox™.
codegen
を使用したコード生成
MATLAB で、以下を行うエントリポイント関数を記述します。
関数
coder.loadDeepLearningNetwork
を使用してネットワーク オブジェクトを構築し設定する。詳細については、コード生成のための事前学習済みネットワークの読み込みを参照してください。エントリポイント関数の入力におけるネットワークの
predict
(Deep Learning Toolbox) メソッドを呼び出す。predict
メソッドでMiniBatchSize
を指定して、複数の入力イメージ、または観測値の予測のメモリ使用を管理する。
次に例を示します。
function out = my_predict(in) %#codegen % A persistent object mynet is used to load the series network object. % At the first call to this function, the persistent object is constructed and % setup. When the function is called subsequent times, the same object is reused % to call predict on inputs, thus avoiding reconstructing and reloading the % network object. persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('myNetwork.mat'); end % pass in input out = predict(mynet,in,'MiniBatchSize',2);
関数
coder.DeepLearningConfig
を使用して、汎用 C/C++ コードの生成用に設定された深層学習構成オブジェクトdlconfig
を作成します。dlconfig = coder.DeepLearningConfig(TargetLibrary='none');
MEX 用または実行可能ファイル用またはスタティックまたはダイナミック リンク ライブラリ用のコード生成構成オブジェクトを作成します。既定では、コード ジェネレーターは汎用 C コードを生成します。汎用 C++ コードを生成するには、コード生成構成オブジェクトで
TargetLang
パラメーターを'C++'
に設定します。DeepLearningConfig
パラメーターを前に作成したオブジェクトdlconfig
に設定します。cfg = coder.config('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = dlconfig;
codegen
コマンドを実行します。-config
オプションを使用して、構成オブジェクトを指定します。-args
オプションを使用して、入力型を指定します。codegen -config cfg my_predict -args {myInput} -report
メモ
コード生成では半精度入力を指定できます。ただし、コード ジェネレーターによって入力が単精度に型キャストされます。Deep Learning Toolbox は、MATLAB でのすべての計算に単精度浮動小数点演算を使用します。
MATLAB Coder アプリを使用したコード生成
通常の手順に従い、エントリポイント関数の指定および入力型の指定を行います。MATLAB Coder アプリを使用した C コードの生成を参照してください。
[コードの生成] ステップで、以下を実行します。
[言語] を [C] または [C++] のいずれかに設定します。
[詳細設定] をクリックします。[深層学習] ペインで、[ターゲット ライブラリ] を
[なし]
に設定します。
コードを生成します。
DNN 定数の再配置
汎用 C/C++ 深層学習コードを生成すると、コード ジェネレーターは、生成されたコードに定数を埋め込むのではなく、深層ニューラル ネットワーク (DNN) の大きな定数をバイナリ データ ファイルに書き込みます。この動作をカスタマイズするには、構成パラメーター LargeConstantGeneration
と LargeConstantThreshold
を設定します。
既定では、生成されたアプリケーションは codegen
フォルダー内のバイナリ データ ファイルを検索します。生成されたアプリケーションとデータ ファイルを組み込みボードなどの別の場所に再配置する場合は、再配置されるデータ ファイルの場所を値とする CODER_DATA_PATH
という名前の環境変数を作成します。生成されたアプリケーションは、この場所でデータ ファイルを検索します。
この機能の例については、Generate Code for a Deep Learning Network for x86-64 Platforms Using Advanced Vector Instructionsを参照してください。
参考
codegen
| coder.DeepLearningConfig
| coder.loadDeepLearningNetwork