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