Main Content

深層学習ネットワーク向けの汎用 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 を使用したコード生成

  1. MATLAB で、以下を行うエントリポイント関数を記述します。

    次に例を示します。

    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); 

  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;
  3. codegen コマンドを実行します。-config オプションを使用して、構成オブジェクトを指定します。-args オプションを使用して、入力型を指定します。

    codegen -config cfg my_predict -args {myInput} -report

    メモ

    コード生成では半精度入力を指定できます。ただし、コード ジェネレーターによって入力が単精度に型キャストされます。Deep Learning Toolbox は、MATLAB でのすべての計算に単精度浮動小数点演算を使用します。

MATLAB Coder アプリを使用したコード生成

  1. 通常の手順に従い、エントリポイント関数の指定および入力型の指定を行います。MATLAB Coder アプリを使用した C コードの生成を参照してください。

  2. [コードの生成] ステップで、以下を実行します。

    • [言語][C] または [C++] のいずれかに設定します。

    • [詳細設定] をクリックします。[深層学習] ペインで、[ターゲット ライブラリ][なし] に設定します。

  3. コードを生成します。

DNN 定数の再配置

汎用 C/C++ 深層学習コードを生成すると、コード ジェネレーターは、生成されたコードに定数を埋め込むのではなく、深層ニューラル ネットワーク (DNN) の大きな定数をバイナリ データ ファイルに書き込みます。この動作をカスタマイズするには、構成パラメーター LargeConstantGenerationLargeConstantThreshold を設定します。

既定では、生成されたアプリケーションは codegen フォルダー内のバイナリ データ ファイルを検索します。生成されたアプリケーションとデータ ファイルを組み込みボードなどの別の場所に再配置する場合は、再配置されるデータ ファイルの場所を値とする CODER_DATA_PATH という名前の環境変数を作成します。生成されたアプリケーションは、この場所でデータ ファイルを検索します。

この機能の例については、Generate Code for a Deep Learning Network for x86-64 Platforms Using Advanced Vector Instructionsを参照してください。

参考

| |

関連するトピック