コード生成における 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
2 つの入力 in1 と in2 を single 型の制限なしの 2 次元配列として指定します。fooAdd の汎用 C MEX コードを生成するための適切なコード構成オブジェクト cfg を作成します。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データ型でなければなりません。
参考
オブジェクト
トピック
- Intel CPU での変分自己符号化器を使用した数字イメージの生成
- Code Generation for dlarray
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning Toolbox)
- カスタム学習ループを使用したネットワークの学習 (Deep Learning Toolbox)
- dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)