Main Content

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 での dlnetworkdlarray の使用例を確認するには、GPU Coder™ を参照してください。

コード生成をサポートする dlarray オブジェクト関数

コード生成の場合、この表にリストされている深層学習配列オブジェクト関数に制限されます。使用上の注意および制限の詳細については、リファレンス ページの「拡張機能」のセクションを参照してください。

dims (Deep Learning Toolbox)

dlarray の次元ラベル

extractdata (Deep Learning Toolbox)

dlarray からのデータの抽出

finddim (Deep Learning Toolbox)

指定されたラベルをもつ次元の検索

stripdims (Deep Learning Toolbox)

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 関数

単項の要素単位の関数

関数注意と制限
abs

出力 dlarray のデータ形式は入力 dlarray と同じになります。

atan2

出力 dlarray のデータ形式は入力 dlarray と同じになります。

cos
cosh
cot
csc
exp
log

  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • dlarray は複素数をサポートしないため、入力 dlarray には非負の値が含まれなければなりません。

sec

出力 dlarray のデータ形式は入力 dlarray と同じになります。

sign
sin
sinh
sqrt

  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • dlarray は複素数をサポートしないため、入力 dlarray には非負の値が含まれなければなりません。

tan

出力 dlarray のデータ形式は入力 dlarray と同じになります。

tanh
uplus, +
uminus, -
erf

二項の要素単位の演算子

関数注意と制限
minus, -

2 つの dlarray 入力の形式が整っている場合、出力 dlarray は、その両方のデータ形式の組み合わせを使用して形式を整えます。この関数は暗黙的な拡張を使用して入力を結合します。詳細については、データ形式での暗黙的な拡張 (Deep Learning Toolbox)を参照してください。

plus, +
power, .^
rdivide, ./
times, .*

リダクション関数

関数注意と制限
mean
  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • 'omitnan' オプションはサポートされません。

  • 入力 dlarray が GPU にある場合、'native' オプションはサポートされません。

prod
  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • 'omitnan' オプションはサポートされません。

sum
vecnorm

出力 dlarray のデータ形式は入力 dlarray と同じになります。

極値関数

関数注意と制限
ceil

出力 dlarray のデータ形式は入力 dlarray と同じになります。

eps

  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • eps(ones(‘like’, x)) を使用して、dlarray x のデータ型に基づいてスカラーのイプシロンの値を取得します。

fix

出力 dlarray のデータ形式は入力 dlarray と同じになります。

floor

出力 dlarray のデータ形式は入力 dlarray と同じになります。

max
  • 単一の dlarray の最大要素または最小要素が見つかった場合、出力 dlarray のデータ形式は入力 dlarray と同じになります。

  • 形式が整っている 2 つの dlarray 入力間に最大要素または最小要素が見つかった場合、出力 dlarray には両方のデータ形式の組み合わせが含まれます。この関数は暗黙的な拡張を使用して入力を結合します。詳細については、データ形式での暗黙的な拡張 (Deep Learning Toolbox)を参照してください。

  • インデックスの出力引数はトレースされないため、自動微分と併用することはできません。詳細については、Deep Learning Toolbox での自動微分の使用 (Deep Learning Toolbox)を参照してください。

min
round

  • 構文 Y = round(X) のみがサポートされます。

  • 出力 dlarray のデータ形式は入力 dlarray と同じになります。

その他の算術演算

関数注意と制限
colon, :
  • サポートされている演算は次のとおりです。

    • a:b

    • a:b:c

    dlarray のインデックス付けの詳細については、インデックス (Deep Learning Toolbox)を参照してください。

  • すべての入力は実数スカラーでなければなりません。出力 dlarray は書式化されません。

mtimes, *
  • 一方の入力を形式を整えた dlarray にできるのは、もう片方の入力が形式の整っていないスカラーである場合のみです。この場合、出力 dlarray のデータ形式は、形式を整えた dlarray 入力と同じになります。

  • dlarray ではないスパース行列と dlarray の乗算は、両方の入力が非スカラーの場合にのみサポートされています。

pagemtimes
  • 一方の入力を形式を整えた dlarray にできるのは、もう片方のページの入力が形式の整っていないスカラーである場合のみです。この場合、出力 dlarray のデータ形式は、書式化された dlarray 入力と同じになります。

  • コード生成の場合、pagemtimes の各転置オプションは定数でなければなりません。

pinv 
sort 

論理演算

関数注意と制限
and, &

2 つの dlarray 入力の形式が整っている場合、出力 dlarray は、その両方のデータ形式の組み合わせを使用して形式を整えます。この関数は暗黙的な拡張を使用して入力を結合します。詳細については、データ形式での暗黙的な拡張 (Deep Learning Toolbox)を参照してください。

eq, ==

2 つの dlarray 入力の形式が整っている場合、出力 dlarray は、その両方のデータ形式の組み合わせを使用して形式を整えます。この関数は暗黙的な拡張を使用して入力を結合します。詳細については、データ形式での暗黙的な拡張 (Deep Learning Toolbox)を参照してください。

ge, >=
gt, >
le, <=
lt, <
ne, ~=
not, ~

出力 dlarray のデータ形式は入力 dlarray と同じになります。

or, |

2 つの dlarray 入力の形式が整っている場合、出力 dlarray は、その両方のデータ形式の組み合わせを使用して形式を整えます。この関数は暗黙的な拡張を使用して入力を結合します。詳細については、データ形式での暗黙的な拡張 (Deep Learning Toolbox)を参照してください。

xor

サイズ操作関数

関数注意と制限
reshape

入力 dlarray が書式化されていても、出力 dlarray は書式化されません。

コード生成の場合、サイズの次元は固定サイズでなければなりません。

squeeze

2 次元の dlarray オブジェクトは squeeze の影響を受けません。入力 dlarray の形式が整っている場合、この関数は大きさが 1 の次元に属する次元ラベルを削除します。入力 dlarray に 2 つを超える次元があり、その 3 番目以上の次元の大きさが 1 である場合、この関数はこれらの次元とそのラベルを破棄します。

repelem

構文 u = repelem(v,n) を使用し、repelem で各要素を繰り返す回数を指定すると、入力 dlarray が書式化されていても、出力 dlarray は書式化されません。

構文 B = repelem(A,r1,...,rN) を使用し、repelem で各次元の反復係数を指定すると、出力 dlarray は入力 dlarray と同じデータ形式になります。

repmat

出力 dlarray のデータ形式は入力 dlarray と同じになります。

転置演算

関数注意と制限
ctranspose, '

入力 dlarray の形式が整っている場合、両方の次元のラベルは同じでなければなりません。この関数は転置を暗黙的に実行し、他の演算に必要な場合のみ転置を直接行います。

permute

入力 dlarray の形式が整っている場合、置換は同じラベルが付いている次元でのみ行われなければなりません。この関数は置換を暗黙的に実行し、他の演算に必要な場合のみ置換を直接行います。

コード生成の場合、次元の次数は固定サイズでなければなりません。

ipermute

入力 dlarray が書式化されている場合、置換は同じラベルが付いている次元でのみ行われなければなりません。この関数は置換を暗黙的に実行し、他の演算に必要な場合のみ置換を直接行います。

コード生成の場合、次元の次数は固定サイズでなければなりません。

transpose, .'

入力 dlarray の形式が整っている場合、両方の次元のラベルは同じでなければなりません。この関数は転置を暗黙的に実行し、他の演算に必要な場合のみ転置を直接行います。

連結関数

関数注意と制限
cat

dlarray 入力は、形式が一致しているか、形式が整っていないものでなければなりません。形式を整えた入力と形式を整えていない入力を混在させることができます。いずれかの dlarray 入力が書式化されている場合、出力 dlarray は同じデータ形式で書式化されます。

コード生成の場合、関数 cat に対する次元の次数は固定サイズでなければなりません。

horzcat
vertcat

変換関数

関数注意と制限
cast
  • cast(dlA,newdatatype) は、dlarray dlA のデータを基となるデータ型 newdatatypedlarray にコピーします。newdatatype オプションは 'double''single'、または 'logical' でなければなりません。出力 dlarraydlA と同じデータ形式で書式化されます。

  • cast(A,'like',Y) は、Y と同じ型の配列を返します。Ydlarray である場合、出力は基となるデータ型が Y と同じ dlarray になります。Y が GPU にある場合、出力は GPU にあります。AY が両方とも dlarray オブジェクトである場合、出力 dlarray は入力 A と同じデータ形式で形式が整います。

double

出力は double 型のデータが含まれる dlarray です。

logical出力は logical 型のデータが含まれる dlarray です。
single出力は single 型のデータが含まれる dlarray です。

比較関数

関数注意と制限
isequal

  • 2 つを超える入力引数がある構文はサポートされません。

  • 2 つの dlarray 入力が表す数値データが等しく、その両方が同じデータ形式で形式が整っているか、あるいは形式が整っていない場合、これらの入力は等しくなります。

isequaln

  • 2 つを超える入力引数がある構文はサポートされません。

  • 2 つの dlarray 入力が表す数値データが等しく (NaN は同等として扱う)、これらの両方が同じデータ形式で形式が整っているか、あるいは形式が整っていない場合、これらの入力は等しくなります。

データ型と値を識別する関数

関数注意と制限
isfloat

この関数は入力 dlarray の基となるデータに適用されます。

islogical
isnumeric
isreal

dlarray は複素数をサポートしないため、この関数は常に dlarray 入力に対して true を返します。

underlyingTypeN/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 は行ベクトルです。
isscalarN/A
isvectorこの関数は、行ベクトルまたは列ベクトルである dlarray に対して true を返します。isvector では 1 x 1 x 3 の dlarray がベクトルであるとは見なされないことに注意してください。
lengthN/A
ndims

入力 dlarray dlX が書式化されている場合、一部のラベル付きの次元が、末尾にある大きさが 1 の次元であっても、ndims(dlX) は次元ラベルの数を返します。

numelN/A
size

入力 dlarray dlX が書式化されている場合、一部のラベル付きの次元が、末尾にある大きさが 1 の次元であっても、size(dlX) は次元ラベルの数に等しい長さのベクトルを返します。

作成関数

関数注意と制限
falsedlarray では 'like' 構文のみがサポートされています。
Inf
NaN
ones
rand
true
zeros

インデックス

コード生成では、dlarray オブジェクトのインデックス作成をサポートし、次の動作を示します。

  • dlY(idx1,...,idxn) = dlX を設定した場合、dlYdlX は代入互換でなければなりません。

    • データのサイズを変更してはなりません。範囲外の代入演算はサポートされていません。

    • 代入ステートメントでは、U ラベルを追加または削除できません。

  • コード生成は、dlX(idx1,…,idxn) = [] を使用した dlarray オブジェクトの部分的な削除をサポートしていません。

参考

オブジェクト

関連する例

詳細