Main Content

coder.regenerateDeepLearningParameters

ネットワーク学習可能項目と状態パラメーターを含むファイルの再生成

    説明

    networkFileNames = coder.regenerateDeepLearningParameters(net,parameterFile) は、再生成されたネットワーク学習可能項目と状態パラメーターを含むファイル名の cell 配列を返します。coder.regenerateDeepLearningParameters は、入力の SeriesNetwork ネットワーク オブジェクトまたは DAGNetwork ネットワーク オブジェクトの学習可能項目と状態に基づいてこれらのファイルを再生成します。

    networkFileNames = coder.regenerateDeepLearningParameters(dlnet,parameterFile) は、再生成されたネットワーク学習可能項目と状態パラメーターを含むファイル名の cell 配列を返します。coder.regenerateDeepLearningParameters は、入力の dlnetwork オブジェクトの学習可能項目と状態に基づいてこれらのファイルを再生成します。

    networkFileNames = coder.regenerateDeepLearningParameters(___,Name,Value) は、1 つ以上の Name,Value ペアの引数で指定されたオプションを使用して、再生成されたネットワーク学習可能項目と状態パラメーターを含むファイル名の cell 配列を返します。

    すべて折りたたむ

    この例では、ネットワークのコードを再生成せずに、深層学習ネットワークの学習可能パラメーターと状態パラメーターを更新する方法を示します。

    MATLAB® で次を行うエントリポイント関数を記述します。

    1. 関数 coder.loadDeepLearningNetwork を使用して深層学習モデルを読み込みます。詳細については、コード生成用の事前学習済みのネットワークの読み込みを参照してください。

    2. predict (Deep Learning Toolbox) を呼び出して応答を予測する。

    function out = mLayer(in,matFile)
    
    myNet = coder.loadDeepLearningNetwork(coder.const(matFile));
    
    out = predict(myNet,in); 
    

    サイズ 4 x 5 x 3 の入力イメージを必要とするシンプルなネットワークを作成します。

    inputSize = [4 5 3];
    im = dlarray(rand(inputSize, 'single'), 'SSCB');
    
    outSize = 6;
    layers = [
        imageInputLayer(inputSize,'Name','input','Normalization','none')
        convolution2dLayer([3 3], 5, 'Name', 'conv-1')
        batchNormalizationLayer('Name', 'batchNorm')
        reluLayer('Name','relu1')
        transposedConv2dLayer([2 2], 5, 'Name', 'transconv')
        convolution2dLayer([2 2], 5, 'Name', 'conv2')
        reluLayer('Name','relu2')
        fullyConnectedLayer(outSize, 'Name', 'fc3')
        ];
    

    層グラフから初期化済みの dlnetwork オブジェクトを作成します。

    rng(0);
    dlnet1 = dlnetwork(layers);
    save('trainedNet.mat', 'dlnet1');
    

    cuDNN のコード生成パラメーターを指定するには、DeepLearningConfig プロパティを、coder.DeepLearningConfig を使用して作成した coder.CuDNNConfig オブジェクトに設定します。

    cfg = coder.gpuConfig('mex');
    cfg.TargetLang = 'C++';
    cfg.DeepLearningConfig = coder.DeepLearningConfig('TargetLibrary', 'cudnn')
    cfg.DeepLearningConfig.AutoTuning = true;
    cfg.DeepLearningConfig.DataType = 'fp32';
    

    codegen コマンドを実行します。codegen コマンドは MATLAB エントリポイント関数 mLayers.m から CUDA® コードを生成します。

    cnnMatFile = fullfile(pwd, 'trainedNet.mat');
    inputArgs = {im, coder.Constant(cnnMatFile)};
    
    codegen -config cfg mLayers -args inputArgs -report
    

    入力イメージで predict を呼び出し、結果を MATLAB で比較します。

    out = mLayer_mex(im,cnnMatFile)
    out_MATLAB = mLayer(im,cnnMatFile)
    
    out1 = 
    
      6(C) x 1(B) single dlarray
    
       -0.0064
       -0.1422
       -0.0897
        0.2223
        0.0329
        0.0365
    
    
    out_MATLAB = 
    
      6(C) x 1(B) single dlarray
    
       -0.0064
       -0.1422
       -0.0897
        0.2223
        0.0329
        0.0365
    

    dlnetwork を再初期化して、学習可能項目を異なる値に更新します。

    rng(10);
    dlnet2 = dlnetwork(layers);
    save('trainedNet.mat', 'dlnet2');
    

    関数 coder.regenerateDeepLearningParameters を使用して、ネットワークの新しい学習可能項目と状態に基づいてバイアス ファイルを再生成します。

    codegenDir = fullfile(pwd, 'codegen/mex/mLayer');
    networkFileNames = (coder.regenerateDeepLearningParameters(dlnet2, codegenDir))'
    
    networkFileNames = 
    
      8×1 cell array
    
        {'cnn_trainedNet0_0_conv-1_b.bin'   }
        {'cnn_trainedNet0_0_conv-1_w.bin'   }
        {'cnn_trainedNet0_0_conv2_b.bin'    }
        {'cnn_trainedNet0_0_conv2_w.bin'    }
        {'cnn_trainedNet0_0_fc3_b.bin'      }
        {'cnn_trainedNet0_0_fc3_w.bin'      }
        {'cnn_trainedNet0_0_transconv_b.bin'}
        {'cnn_trainedNet0_0_transconv_w.bin'}
    

    入力イメージで predict を呼び出し、結果を MATLAB で比較します。

    clear mLayer_mex;
    outNew = mLayer_mex(im,cnnMatFile)
    outNew_MATLAB = mLayer(im,cnnMatFile)
    
    outNew = 
    
      6(C) x 1(B) single dlarray
    
        0.1408
       -0.0080
        0.0342
       -0.0065
        0.1843
        0.0799
    
    
    outNew_MATLAB = 
    
      6(C) x 1(B) single dlarray
    
        0.1408
       -0.0080
        0.0342
       -0.0065
        0.1843
        0.0799

    入力引数

    すべて折りたたむ

    コード生成時に使用する学習済みネットワーク。SeriesNetwork (Deep Learning Toolbox) オブジェクトまたは DAGNetwork (Deep Learning Toolbox) オブジェクトとして指定します。事前学習済みのネットワークを使用する (たとえば、関数 googlenet を使用するなど) か、trainNetwork (Deep Learning Toolbox) を使用して独自のネットワークに学習させることができます。

    コード生成時に使用するカスタム学習ループのネットワーク。dlnetwork (Deep Learning Toolbox) オブジェクトとして指定します。

    生成されたネットワーク パラメーター情報ファイルが格納されるフォルダーへのパス。コード生成時に、ソフトウェアはネットワーク パラメーター情報を含むバイナリ ファイル networkParamsInfo_*.bin を作成します。既定では、コード ジェネレーターはこのファイルを codegen フォルダーに作成します。

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

    例: networkFileNames = coder.regenerateDeepLearningParameters(dlnet,"codegen",NetworkName="fooDL");

    生成コード内のネットワークの C++ クラスの名前。文字ベクトルまたは string として指定します。

    MEX ワークフローでは、生成された MEX および関連する codegen フォルダーをある場所から別の場所に移動した場合、coder.regenerateDeepLearningParameters が、ネットワーク学習可能項目と状態パラメーターを含むファイルを新しい場所に再生成できません。'OverrideParameterFiles' パラメーターを true に設定して、関数 coder.regenerateDeepLearningParameters が、元の codegen の場所にネットワーク学習可能項目と状態パラメーターを含むファイルを再生成できるようにします。

    MEX 以外のワークフローでは、このパラメーターは無効です。

    出力引数

    すべて折りたたむ

    再生成されたネットワーク学習可能項目と状態パラメーターのファイル名。cell 配列として返されます。

    制限

    関数 coder.regenerateDeepLearningParameters を使用して更新できるのは、ネットワークの学習可能項目と状態のみです。コード ジェネレーターがサポートしていない変更の場合、エラー メッセージがスローされます。たとえば、Leaky ReLU 層のスケール係数を変更した後に coder.regenerateDeepLearningParameters を使用した場合、スケール係数がネットワークの学習可能項目ではないため、次のエラー メッセージがスローされます。

    Network architecture has been modified since the last code generation. Unable 
    to accommodate the provided network in the generated code. Regenerate code 
    for the provided network to reflect changes in the network. For more 
    information, see Limitations to Regenerating Network Parameters After Code Generation.
    

    バージョン履歴

    R2021b で導入