Main Content

コード生成での dlarray の制限

推奨する使用方法

コード生成の場合、関数 dlarray (Deep Learning Toolbox) を使用して深層学習配列を作成します。たとえば、mynet.mat MAT ファイルに事前学習済みの dlnetwork (Deep Learning Toolbox) ネットワーク オブジェクトがあるとします。このネットワークの応答を予測するには、このコードに示すように、MATLAB® でエントリポイント関数を作成します。

function a = foo(in)
dlIn = dlarray(in, 'SSC');

persistent dlnet;
if isempty(dlnet)
    dlnet = coder.loadDeepLearningNetwork('mynet.mat');
end

dlA = predict(dlnet, dlIn);

a = extractdata(dlA);

end

可変サイズの dlarray の使用

可変サイズの dlarray オブジェクトを使用する MATLAB コード用のコードを生成できます。

たとえば、次の MATLAB 設計ファイルを定義します。

function out = fooAdd(in1,in2) %#codegen
dlIn1_1 = dlarray(in1);
dlIn1_2 = dlarray(in2);
out = dlIn1_1 + dlIn1_2;
end

in1 および in2 の 2 つの入力を single 型の非有界 2 次元配列に指定します。適切なコード構成オブジェクト cfg を作成して、fooAdd 用の汎用 C MEX コードを生成します。MEX コードを生成し、生成された MEX を実行します。

t_in1 = coder.typeof(single(1),[inf inf],[1 1]);
t_in2 = coder.typeof(single(1),[inf inf],[1 1]);

codegen fooAdd -args {t_in1,t_in2} -report 

out = fooAdd_mex(single(eye(4,4)),single(ones(4,1)));

可変サイズの dlarray オブジェクトのコードを生成する場合は、次の制限に従います。

  • dlarray オブジェクトの U 次元は固定サイズでなければなりません。

  • dlarray データ形式 fmt に含まれる文字が 1 つだけの場合、対応するデータ配列 X は可変サイズの次元を 1 つだけもつことができます。X の他のすべての次元は、大きさが 1 でなければなりません。

  • いずれかのオペランドを暗黙的に展開する可能性のある数値配列と dlarray オブジェクトとの間で演算を行う場合、dlarray オブジェクトの固定サイズの U 次元と数値配列の可変サイズの次元を結合してはなりません。

  • 可変サイズの dlarray オブジェクトに対する maxminmean などの単項演算の場合、目的の作業次元を定数値として明示的に指定します。自動次元選択の制限事項を参照してください。

制限

深層学習配列の場合、コード生成に次の制限があります。

  • dlarray オブジェクトのデータ形式の引数は、コンパイル時の定数でなければなりません。次に例を示します。

    function out = foo()
    
    dlA = dlarray(ones(5,4),'SSC'); %fmt 'SSC' is constant
     .
     .
     .
    end

  • コード生成レポートには、dlarray オブジェクトのサイズが表示されません。サイズは常に 1x1 として表示されます。

    Screen shot of sample report generator showing dlarray size as 1-by-1

  • MATLAB では、dlarray によってラベルの順序が 'SCBTU' に適用されます。この適用により、入力間のラベルを暗黙的に照合する操作で意味があいまいにならずに済みます。MEX コードを生成する場合もこれと同じ動作になります。ただし、スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイルなどのスタンドアロン コードを生成する場合、データ形式は dlarray オブジェクトの fmt 引数の仕様に従います。その結果、エントリポイント関数の入力または出力が dlarray オブジェクトであり、ラベルの順序が 'SCBTU' でない場合、データ レイアウトは MATLAB 環境とスタンドアロン コードで異なることになります。

    たとえば、出力として dlarray オブジェクトを使用する関数 foo について考えてみます。

    function dlA = foo()
    rng default
    dlA = dlarray(rand(5,4), 'BC');
     
    end
    

    MATLAB では、dlA4(C)5(B) 列になります。

    dlA = 
    
      4(C) × 5(B) dlarray
    
        0.8147    0.9058    0.1270    0.9134    0.6324
        0.0975    0.2785    0.5469    0.9575    0.9649
        0.1576    0.9706    0.9572    0.4854    0.8003
        0.1419    0.4218    0.9157    0.7922    0.9595
    

    スタンドアロン コードの生成では、dlA5(B)4(C) 列になります。

  • コード生成の場合、dlnetwork オブジェクトの predict メソッドに対する dlarray 入力は single データ型でなければなりません。

参考

オブジェクト

関連する例

詳細