コード生成における 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
などの単項演算では、使用する次元を定数値で明示的に指定します。自動次元選択の制限事項を参照してください。
制限
深層学習配列のコード生成には次の制限があります。
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
データ型でなければなりません。
参考
オブジェクト
関連する例
詳細
- Code Generation for dlarray
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning Toolbox)
- カスタム学習ループを使用したネットワークの学習 (Deep Learning Toolbox)
- dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)