このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
dlarray
用のコード生成
深層学習配列には、カスタム学習ループ用のデータとオプションのデータ形式ラベルが格納されます。関数は、この配列を使用し、自動微分による微分の計算を行ってその結果を利用することができます。カスタム学習ループ、自動微分、深層学習配列の詳細については、カスタム学習ループ (Deep Learning Toolbox)を参照してください。
コード生成は、書式化された深層学習配列と書式化されていない深層学習配列の両方をサポートします。gpuArrays
を含む dlarray
オブジェクトは、コード生成でもサポートされます。深層学習配列を使用して C/C++ コードを生成するには、MATLAB Coder Interface for Deep Learning をインストールする必要があります。CUDA コードを生成して NVIDIA GPU に展開するには、GPU Coder Interface for Deep Learning をインストールする必要があります。CPU コード生成および GPU コード生成で深層学習配列を使用する場合は、以下の制限に従ってください。
コード生成用の dlarray
の定義
コード生成の場合、関数 dlarray
(Deep Learning Toolbox) を使用して深層学習配列を作成します。たとえば、mynet.mat
MAT ファイルに事前学習済みの dlnetwork
(Deep Learning Toolbox) ネットワーク オブジェクトがあるとします。このネットワークの応答を予測するには、MATLAB® でエントリポイント関数を作成します。
以下の 2 つの選択肢があります。
メモ
コード生成の場合、dlnetwork
オブジェクトの predict
メソッドに対する dlarray
入力は single
データ型でなければなりません。
設計 1 (非推奨)
この設計例では、エントリポイント関数 foo
に対する入力と出力が dlarray
型です。MATLAB では dlarray
によってラベルの順序が 'SCBTU'
に適用されるため、エントリポイント関数のこの型はコード生成において推奨されません。MEX コードを生成する場合もこれと同じ動作になります。ただし、スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイルなどのスタンドアロン コードを生成する場合、データ形式は dlarray
オブジェクトの fmt
引数の仕様に従います。その結果、エントリポイント関数の入力または出力が dlarray
オブジェクトであり、ラベルの順序が 'SCBTU'
でない場合、データ レイアウトは MATLAB 環境とスタンドアロン コードで異なることになります。
function dlOut = foo(dlIn) persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork('mynet.mat'); end dlOut = predict(dlnet, dlIn); end
設計 2 (推奨)
この設計例では、foo
への入力と出力がプリミティブ データ型となり、dlarray
オブジェクトが関数内に作成されます。dlarray
オブジェクトの extractdata
(Deep Learning Toolbox) メソッドは、dlarray
dlA
のデータを foo
の出力として返します。出力 a
のデータ型は、dlA
の基になるデータ型と同じです。
Design 1
と比較すると、このエントリポイント設計には次の利点があります。
スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイルなどのスタンドアロン コード生成ワークフローとの統合が容易になる。
関数
extractdata
からの出力のデータ形式が、MATLAB 環境と生成されたコードの両方で同じ順序 ('SCBTU'
) になる。MEX ワークフローでのパフォーマンスが向上する。
Simulink® は
dlarray
オブジェクトをネイティブにサポートしていないが、MATLAB Function ブロックの使用により Simulink ワークフローが単純化される。
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
GPU Coder での dlnetwork
と dlarray
の使用例を確認するには、GPU Coder™ を参照してください。
コード生成をサポートする dlarray
オブジェクト関数
コード生成の場合、この表にリストされている深層学習配列オブジェクト関数に制限されます。
|
|
|
|
| 指定されたラベルをもつ次元の検索 |
|
|
dlarray
コード生成をサポートする Deep Learning Toolbox 関数
深層学習の操作
関数 | 説明 |
---|---|
avgpool (Deep Learning Toolbox) | 平均プーリング演算は、入力をプーリング領域に分割し、各領域の平均値を計算することによって、ダウンサンプリングを実行します。 |
dlconv (Deep Learning Toolbox) | 畳み込み演算は、入力データにスライディング フィルターを適用します。関数 dlconv (Deep Learning Toolbox) は、深層学習畳み込み、グループ化された畳み込み、チャネル方向に分離可能な畳み込みで使用します。 |
fullyconnect (Deep Learning Toolbox) | 全結合演算は、入力に重み行列を乗算してから、バイアス ベクトルを加算します。 |
maxpool (Deep Learning Toolbox) | 最大プーリング演算は、入力をプーリング領域に分割し、各領域の最大値を計算することによって、ダウンサンプリングを実行します。 |
sigmoid (Deep Learning Toolbox) | シグモイド活性化演算は、入力データにシグモイド関数を適用します。 |
softmax (Deep Learning Toolbox) | ソフトマックス活性化演算は、入力データのチャネルの次元にソフトマックス関数を適用します。 |
dlarray
コード生成をサポートする MATLAB 関数
単項の要素単位の関数
関数 | 注意と制限 |
---|---|
abs | 出力 |
atan2 | 出力 |
cos | |
cosh | |
cot | |
csc | |
exp | |
log |
|
sec | 出力 |
sign | |
sin | |
sinh | |
sqrt |
|
tan | 出力 |
tanh | |
uplus , + | |
uminus , - | |
erf |
二項の要素単位の演算子
リダクション関数
極値関数
関数 | 注意と制限 |
---|---|
ceil | 出力 |
eps |
|
fix | 出力 |
floor | 出力 |
max |
|
min | |
round |
|
その他の算術演算
関数 | 注意と制限 |
---|---|
colon , : |
|
mtimes , * |
|
pagemtimes |
|
論理演算
関数 | 注意と制限 |
---|---|
and , & | 2 つの |
eq , == | 2 つの |
ge , >= | |
gt , > | |
le , <= | |
lt , < | |
ne , ~= | |
or , | | 2 つの |
xor |
サイズ操作関数
関数 | 注意と制限 |
---|---|
reshape | 入力 コード生成の場合、サイズの次元は固定サイズでなければなりません。 |
squeeze | 2 次元の |
repelem | 構文 構文 |
repmat | 出力 |
転置演算
関数 | 注意と制限 |
---|---|
ctranspose , ' | 入力 |
permute | 入力 コード生成の場合、次元の次数は固定サイズでなければなりません。 |
ipermute | 入力 コード生成の場合、次元の次数は固定サイズでなければなりません。 |
transpose , .' | 入力 |
連結関数
変換関数
関数 | 注意と制限 |
---|---|
cast |
|
double | 出力は |
logical | 出力は logical 型のデータが含まれる dlarray です。 |
single | 出力は single 型のデータが含まれる dlarray です。 |
比較関数
データ型と値を識別する関数
サイズ識別関数
関数 | 注意と制限 |
---|---|
iscolumn | この関数は、列ベクトルで、最初の次元を除く各次元の大きさが 1 である dlarray に対して true を返します。たとえば、3 x 1 x 1 の dlarray は列ベクトルです。 |
ismatrix | この関数は、2 つの次元のみをもつ dlarray オブジェクト、および最初の 2 つの次元を除く各次元の大きさが 1 である dlarray オブジェクトに対して true を返します。たとえば、3 x 4 x 1 の dlarray は行列です。 |
isrow | この関数は、行ベクトルで、2 番目の次元を除く各次元の大きさが 1 である dlarray に対して true を返します。たとえば、1 x 3 x 1 の dlarray は行ベクトルです。 |
isscalar | N/A |
isvector | この関数は、行ベクトルまたは列ベクトルである dlarray に対して true を返します。isvector では 1 x 1 x 3 の dlarray がベクトルであるとは見なされないことに注意してください。 |
length | N/A |
ndims | 入力 |
numel | N/A |
size | 入力 |
作成関数
インデックス
コード生成では、dlarray
オブジェクトのインデックス作成をサポートし、次の動作を示します。
dlY(idx1,...,idxn) = dlX
を設定した場合、dlY
とdlX
は代入互換でなければなりません。データのサイズを変更してはなりません。範囲外の代入演算はサポートされていません。
代入ステートメントでは、
U
ラベルを追加または削除できません。
コード生成は、
dlX(idx1,…,idxn) = []
を使用したdlarray
オブジェクトの部分的な削除をサポートしていません。
参考
オブジェクト
関連する例
詳細
- コード生成での dlarray の制限
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning Toolbox)
- カスタム学習ループを使用したネットワークの学習 (Deep Learning Toolbox)
- dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)