このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 つの選択肢があります。
設計 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
オブジェクトを使用する複素数関数がサポートされます。dlarray
をサポートする複素数関数に複素数値の入力を渡し、サードパーティ ライブラリに依存しない C/C++ コードおよび CUDA コードを生成できます。MATLAB Function Block を使用して、Simulink で複素数値の dlarray
サポート機能を実装できます。
コード生成では、dlnetwork
オブジェクトの predict
メソッドに複素数値の入力を渡すことはサポートされていません。コード生成の場合、dlnetwork
オブジェクトの predict
メソッドに対する dlarray
入力は single
データ型でなければなりません。
コード生成時に入力が実数として指定されている場合、複素数値の入力を MEX 関数に渡すことはできません。複素数データに対するコード生成サポートの使用上の注意および制限の詳細については、複素数データのコード生成を参照してください。
コード生成をサポートする dlarray
オブジェクト関数
コード生成の場合、この表にリストされている深層学習配列オブジェクト関数に制限されます。使用上の注意および制限の詳細については、リファレンス ページの「拡張機能」のセクションを参照してください。
|
|
|
|
| 指定されたラベルをもつ次元の検索 |
|
|
dlarray
コード生成をサポートする Deep Learning Toolbox 関数
深層学習の操作
関数 | 説明 |
---|---|
avgpool (Deep Learning Toolbox) | 平均プーリング演算は、入力をプーリング領域に分割し、各領域の平均値を計算することによって、ダウンサンプリングを実行します。 |
batchnorm (Deep Learning Toolbox) | バッチ正規化演算は、観測値全体における入力データの正規化を、各チャネルについて個別に行います。畳み込みニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、relu (Deep Learning Toolbox) など、畳み込み演算と非線形演算の間のバッチ正規化を使用します。 |
dlconv (Deep Learning Toolbox) | 畳み込み演算は、入力データにスライディング フィルターを適用します。関数 dlconv (Deep Learning Toolbox) は、深層学習畳み込み、グループ化された畳み込み、チャネル方向に分離可能な畳み込みで使用します。 |
fullyconnect (Deep Learning Toolbox) | 全結合演算は、入力に重み行列を乗算してから、バイアス ベクトルを加算します。 |
leakyrelu (Deep Learning Toolbox) | 漏洩 (leaky) 正規化線形ユニット (ReLU) 活性化演算は、非線形のしきい値処理を実行し、ゼロよりも小さい入力値を固定スケール係数で乗算します。 |
maxpool (Deep Learning Toolbox) | 最大プーリング演算は、入力をプーリング領域に分割し、各領域の最大値を計算することによって、ダウンサンプリングを実行します。 |
relu (Deep Learning Toolbox) | 正規化線形ユニット (ReLU) 活性化演算は、非線形のしきい値処理を実行し、ゼロよりも小さい入力値をゼロに設定します。 |
sigmoid (Deep Learning Toolbox) | シグモイド活性化演算は、入力データにシグモイド関数を適用します。 |
softmax (Deep Learning Toolbox) | ソフトマックス活性化演算は、入力データのチャネルの次元にソフトマックス関数を適用します。 |
dlarray
コード生成をサポートする MATLAB 関数
単項の要素単位の関数
二項の要素単位の演算子
関数 | 注意と制限 |
---|---|
complex | 1 入力の構文の場合、出力 2 入力の構文の場合、 |
minus , - | 2 つの |
plus , + | |
power , .^ | |
rdivide , ./ | |
realpow | |
times , .* |
リダクション関数
極値関数
関数 | 注意と制限 |
---|---|
ceil | 出力 |
eps |
|
fix | 出力 |
floor | 出力 |
max |
|
min | |
round |
|
フーリエ変換
その他の算術演算
関数 | 注意と制限 |
---|---|
colon , : |
|
mtimes , * |
|
pagemtimes |
|
pinv | |
sort |
論理演算
関数 | 注意と制限 |
---|---|
and , & | 2 つの |
eq , == | 2 つの |
ge , >= | |
gt , > | |
le , <= | |
lt , < | |
ne , ~= | |
not , ~ | 出力 |
or , | | 2 つの |
xor |
サイズ操作関数
関数 | 注意と制限 |
---|---|
reshape | 入力 コード生成の場合、サイズの次元は固定サイズでなければなりません。 |
squeeze | 2 次元の |
repelem | 構文 構文 |
repmat | 出力 |
転置演算
関数 | 注意と制限 |
---|---|
ctranspose , ' | 入力 |
permute | 入力 コード生成の場合、次元の次数は固定サイズでなければなりません。 |
ipermute | 入力 コード生成の場合、次元の次数は固定サイズでなければなりません。 |
transpose , .' | 入力 |
連結関数
変換関数
関数 | 注意と制限 |
---|---|
cast |
|
double | 出力は |
logical | 出力は logical 型のデータが含まれる dlarray です。 |
single | 出力は single 型のデータが含まれる dlarray です。 |
比較関数
データ型と値を識別する関数
関数 | 注意と制限 |
---|---|
isdlarray (Deep Learning Toolbox) | N/A |
isfloat | この関数は入力 |
islogical | |
isnumeric | |
isreal | |
underlyingType | N/A |
validateattributes | 入力配列 A が、形式を整えた dlarray である場合、その次元は "SCBTU" の順序に従って並べ替えられます。サイズの検証は並べ替え後に適用されます。 |
サイズ識別関数
関数 | 注意と制限 |
---|---|
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
オブジェクトの部分的な削除をサポートしていません。
参考
オブジェクト
トピック
- 変分自己符号化器を使用した NVIDIA GPU での数字イメージの生成
- コード生成での dlarray の制限
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning Toolbox)
- カスタム学習ループを使用したネットワークの学習 (Deep Learning Toolbox)
- dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)