Main Content

dlarray 用のコード生成

深層学習配列は、カスタム学習ループ用にオプションのデータ形式ラベルを使用してデータを格納し、自動微分によって関数が微分を計算して使用できるようにします。カスタム学習ループ、自動微分、深層学習配列の詳細については、深層学習のカスタム学習ループ (Deep Learning Toolbox)を参照してください。

コード生成は、書式化された深層学習配列と書式化されていない深層学習配列の両方をサポートします。gpuArrays を含む dlarray オブジェクトは、コード生成でもサポートされます。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 関数

深層学習の操作

関数説明
fullyconnect (Deep Learning Toolbox)

全結合演算は、入力に重み行列を乗算してから、バイアス ベクトルを加算します。

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, -

二項の要素単位の演算子

関数注意と制限
minus, -

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

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

リダクション関数

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

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

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

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

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

sum

極値関数

関数注意と制限
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 の各転置オプションは定数でなければなりません。

論理演算

関数注意と制限
and, &

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

eq, ==

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

ge, >=
gt, >
le, <=
lt, <
ne, ~=
or, |

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

xor

サイズ操作関数

関数注意と制限
reshape

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

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

squeeze

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

転置演算

関数注意と制限
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 を返します。

サイズ識別関数

関数注意と制限
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 オブジェクトの部分的な削除をサポートしていません。

参考

オブジェクト

関連する例

詳細