Main Content

dlarray

カスタム学習ループ用の深層学習配列

説明

深層学習配列には、カスタム学習ループ用のデータとオプションのデータ形式ラベルが格納されます。関数は、この配列を使用し、自動微分による微分の計算を行ってその結果を利用することができます。

ヒント

ほとんどの深層学習タスクでは、事前学習済みのネットワークを使用して独自のデータに適応させることができます。転移学習を使用して、畳み込みニューラル ネットワークの再学習を行い、新しい一連のイメージを分類する方法を示す例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。または、layerGraph オブジェクトを関数 trainNetwork および関数 trainingOptions と共に使用して、ネットワークを作成してゼロから学習させることができます。

タスクに必要な学習オプションが関数 trainingOptions に用意されていない場合、自動微分を使用してカスタム学習ループを作成できます。詳細については、カスタム学習ループ向けの深層学習ネットワークの定義を参照してください。

作成

説明

dlX = dlarray(X) は、X を表す dlarray オブジェクトを返します。Xdlarray の場合、dlXX のコピーになります。

dlX = dlarray(X,fmt) は、fmt のデータ形式に従い、次元ラベルを使用して dlX 内のデータを書式化します。次元ラベルは、関数間で深層学習データを受け渡すのに役立ちます。次元ラベルの詳細については、使用法を参照してください。X が書式化された dlarray の場合、既存の形式が fmt に置き換えられます。

dlX = dlarray(v,dim) は、ベクトル v および 1 つの文字形式 dim を受け入れ、列ベクトル dlarray を返します。dlX の最初の次元は次元ラベル dim をもち、2 番目の次元 (大きさが 1 の次元) は次元ラベル 'U' をもちます。

入力引数

すべて展開する

データ配列。データ型 double または single の数値配列、logical 配列、gpuArray オブジェクト、または dlarray オブジェクトとして指定します。X は、スパースではなく非スパースでなければなりません。

例: rand(31*23,23)

データ型: single | double | logical
複素数のサポート: あり

データ形式。string スカラーまたは文字ベクトルとして指定します。文字列の各文字は、次のいずれかの次元ラベルでなければなりません。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

"S" ラベルと "U" ラベルは、任意の数だけ指定できます。"C" ラベル、"B" ラベル、および "T" ラベルは、それぞれ 1 つまで指定できます。

fmt の各要素は、入力データの対応する次元にラベルを付けます。fmt の要素が上記の順に並んでいない場合 ('S' の後に 'C' が続いている場合など)、dlarray は、データのストレージを変更せずに、上記と同じ順序となるよう、fmt とデータを暗黙的に並べ替えます。

fmt には、少なくとも、入力データに含まれている次元と同じ数の次元ラベルが含まれていなければなりません。それより多い数の次元ラベルを指定した場合、dlarray は、余分なラベルに対して空の次元 (大きさが 1 の次元) を作成します。

次の表は、一般的なデータ タイプの推奨データ形式について説明しています。

データ
形状データ形式
2 次元イメージ

h×w×c×n の数値配列。ここで、h、w、c、および n は、それぞれイメージの高さ、幅、チャネル数、および観測値の数です。

"SSCB"
3 次元イメージh×w×d×c×n の数値配列。ここで、h、w、d、c、および n は、それぞれイメージの高さ、幅、深さ、チャネル数、およびイメージの観測値の数です。"SSSCB"
ベクトル シーケンス

c×s×n の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長、n はシーケンスの観測値の数です。

"CTB"
2 次元イメージ シーケンス

h×w×c×s×n の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応し、s はシーケンス長、n はイメージ シーケンスの観測値の数です。

"SSCTB"
3 次元イメージ シーケンス

h×w×d×c×s×n の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応し、s はシーケンス長、n はイメージ シーケンスの観測値の数です。

"SSSCTB"
特徴c 行 n 列の配列。ここで、c は特徴の数、n は観測値の数です。"CB"

データ ベクトル。データ型 double または single の数値ベクトル、logical ベクトル、または dlarray ベクトル オブジェクトとして指定します。ここでいう "ベクトル" とは、大きさが 1 でない次元を 1 つだけもつ任意の配列を意味します。

例: rand(100,1)

次元ラベル。fmt で許容されるタイプの 1 つの文字として指定します。

例: "S"

例: 'S'

出力引数

すべて展開する

深層学習配列。dlarray オブジェクトとして返されます。dlX を使用すると、dlgradient および dlfeval による自動微分を行うことができます。引数 fmt を与えた場合、dlX にはラベルが格納されます。

  • X が数値配列または logical 配列の場合、dlX にはそのデータが格納されます。その際、fmt で指定されたデータ形式に従ってデータが並べ替えられる場合があります。

  • XgpuArray の場合、dlX のデータは GPU にも読み込まれます。dlX を使用するその後の計算は GPU で実行されます。

使用法

dlarray のデータ形式を使用すると、データが適切な形状であることを確認した状態で、以下の表に示す関数を実行できます。

関数操作入力次元の検証入力次元のサイズへの影響
avgpoolプール サイズ パラメーターで定義された移動矩形 (または移動直方体) の空間 ('S') 領域における入力データの平均値を計算します。'S''S'
batchnorm入力データの各チャネル ('C') に含まれる値を正規化します。'C' 
crossentropy推定値とターゲット値との間のクロスエントロピーを計算し、バッチ ('B') 次元のサイズに基づきその平均値を計算します。'S''C''B''T''U' (推定値とターゲット値の配列は同じサイズでなければなりません。)'S''C''B''T''U' (出力は書式化されていないスカラーです。)
dlconvフィルターの配列を使用して入力データの深層学習畳み込みを計算し、入力の空間 ('S') 次元とチャネル ('C') 次元 (の関数) の数を一致させ、定数バイアスを加算します。'S', 'C''S', 'C'
dltranspconvフィルターの配列を使用して入力データの深層学習転置畳み込みを計算し、入力の空間 ('S') 次元とチャネル ('C') 次元 (の関数) の数を一致させ、定数バイアスを加算します。'S', 'C''S', 'C'
fullyconnect入力データの重み付き和を計算し、各バッチ ('B') 次元と時間 ('T') 次元にバイアスを適用します。'S', 'C', 'U''S''C''B''T''U' (出力のデータ形式は、常に、'CB''CT'、または 'CTB' となります。)
gru

入力データにゲート付き回帰型ユニット演算を適用します。

'S', 'C', 'T''C'
lstm

入力データに長短期記憶演算を適用します。

'S', 'C', 'T''C'
maxpoolプール サイズ パラメーターで定義された移動矩形の空間 ('S') 領域における入力データの最大値を計算します。'S''S'
maxunpool空間 ('S') 次元に沿って逆プーリング演算を実行します。'S''S'
mse推定値とターゲット値との間の半平均二乗誤差を計算し、バッチ ('B') 次元のサイズに基づいてその平均値を計算します。'S''C''B''T''U' (推定値とターゲット値の配列は同じサイズでなければなりません。)'S''C''B''T''U' (出力は書式化されていないスカラーです。)
softmax入力データの各チャネル ('C') にソフトマックス活性化を適用します。'C' 

これらの関数を使用するには、各次元にラベルを付ける必要があります。次元ラベルの形式を指定するには、最初の入力を書式化された dlarray として与えるか、関数の名前と値の引数 'DataFormat' を使用します。

dlarray は、'SCBTU' の順序で次元ラベルを並べ替えます。これにより、入力間のラベルを暗黙的に一致させる演算において不明瞭な動作が排除されます。また、dlarray は、次元ラベル 'C''B'、および 'T' の出現回数がそれぞれ最大 1 回となるように処理します。これらの次元ラベルを使用する関数は、各ラベルの次元を最大 1 つまで受け入れます。

dlarray には、dlarray に関連付けられたデータ形式を取得する関数 (dims)、データ形式を削除する関数 (stripdims)、および特定の次元ラベルに関連付けられた次元を取得する関数 (finddim) が用意されています。

dlarray が形式を処理する方法の詳細については、dlarray の主な動作を参照してください。

オブジェクト関数

avgpoolPool data to average values over spatial dimensions
batchnormNormalize data across all observations for each channel independently
crossentropy分類タスク用の交差エントロピー損失
dimsdlarray の次元ラベル
dlconvDeep learning convolution
dlgradient自動微分を使用したカスタム学習ループの勾配の計算
dltranspconvDeep learning transposed convolution
extractdatadlarray からのデータの抽出
finddim指定されたラベルをもつ次元の検索
fullyconnectすべての重み付き入力データの加算とバイアスの適用
gruゲート付き回帰型ユニット
leakyrelu漏洩 (leaky) 正規化線形ユニット活性化の適用
lstm長短期記憶
maxpoolPool data to maximum value
maxunpool最大プーリング演算の出力の逆プーリング
mse半平均二乗誤差
relu正規化線形ユニット活性化の適用
sigmoidシグモイド活性化の適用
softmaxチャネル次元へのソフトマックス活性化の適用
stripdimsdlarray データ形式の削除

dlarray には、数値の関数、行列、およびその他の演算を指定することもできます。一覧については、dlarray をサポートする関数の一覧を参照してください。

すべて折りたたむ

行列から書式化されていない dlarray を作成します。

X = randn(3,5);
dlX = dlarray(X)
dlX = 
  3x5 dlarray

    0.5377    0.8622   -0.4336    2.7694    0.7254
    1.8339    0.3188    0.3426   -1.3499   -0.0631
   -2.2588   -1.3077    3.5784    3.0349    0.7147

次元ラベル 'S' および 'C' を含む、データ形式が指定された dlarray を作成します。

X = randn(3,5);
dlX = dlarray(X,'SC')
dlX = 
  3(S) x 5(C) dlarray

    0.5377    0.8622   -0.4336    2.7694    0.7254
    1.8339    0.3188    0.3426   -1.3499   -0.0631
   -2.2588   -1.3077    3.5784    3.0349    0.7147

これとは逆の順序で次元ラベルを指定した場合、dlarray は、基になるデータを暗黙的に並べ替えます。

dlX = dlarray(X,'CS')
dlX = 
  5(S) x 3(C) dlarray

    0.5377    1.8339   -2.2588
    0.8622    0.3188   -1.3077
   -0.4336    0.3426    3.5784
    2.7694   -1.3499    3.0349
    0.7254   -0.0631    0.7147

最初の次元ラベル 'T' を使用して、dlarray ベクトルを作成します。2 番目の次元ラベルは 'U' で、これは dlarray によって自動的に作成されます。

X = randn(6,1);
dlX = dlarray(X,'T')
dlX = 
  6(T) x 1(U) dlarray

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077

X に行ベクトルを指定した場合、dlarray は、列ベクトルとなるように結果を暗黙的に並べ替えます。

X = X';
dlX = dlarray(X,'T')
dlX = 
  6(T) x 1(U) dlarray

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077

ヒント

  • dlgradient は関数の内部で呼び出さなければなりません。勾配の数値を取得するには、dlfeval を使用して関数を評価しなければなりません。また、関数の引数は dlarray でなければなりません。Deep Learning Toolbox での自動微分の使用を参照してください。

  • 勾配を正しく評価するため、dlfevaldlarray をサポートしている関数のみを使用する関数を呼び出さなければなりません。dlarray をサポートする関数の一覧を参照してください。

拡張機能

バージョン履歴

R2019b で導入

すべて展開する