コード生成での 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オブジェクトに対するmax、min、meanなどの単項演算の場合、目的の作業次元を定数値として明示的に指定します。既定の次元の選択に関する MATLAB との非互換性を参照してください。
制限
深層学習配列の場合、コード生成に次の制限があります。
dlarrayオブジェクトのデータ形式の引数は、コンパイル時の定数でなければなりません。次に例を示します。function out = foo() dlA = dlarray(ones(5,4),'SSC'); %fmt 'SSC' is constant . . . end
コード生成レポートには、
dlarrayオブジェクトのサイズが表示されません。サイズは常に1x1として表示されます。
MATLAB では、
dlarrayによってラベルの順序が'SCBTU'に適用されます。この適用により、入力間のラベルを暗黙的に照合する操作で意味があいまいにならずに済みます。MEX コードを生成する場合もこれと同じ動作になります。ただし、スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイルなどのスタンドアロン コードを生成する場合、データ形式はdlarrayオブジェクトのfmt引数の仕様に従います。その結果、エントリポイント関数の入力または出力がdlarrayオブジェクトであり、ラベルの順序が'SCBTU'でない場合、データ レイアウトは MATLAB 環境とスタンドアロン コードで異なることになります。たとえば、出力として
dlarrayオブジェクトを使用する関数fooについて考えてみます。function dlA = foo() rng default dlA = dlarray(rand(5,4), 'BC'); end
MATLAB では、
dlAが4(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スタンドアロン コードの生成では、
dlAが5(B)行4(C)列になります。コード生成の場合、
dlnetworkオブジェクトのpredictメソッドに対するdlarray入力はsingleデータ型でなければなりません。
参考
オブジェクト
トピック
- 変分自己符号化器を使用した NVIDIA GPU での数字イメージの生成
- dlarray 用のコード生成
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning Toolbox)
- カスタム学習ループを使用したネットワークの学習 (Deep Learning Toolbox)
- dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)