メインコンテンツ

dlarray

R2026b

カスタマイズ用の深層学習配列

説明

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

ヒント

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

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

タスクに必要な損失関数が関数 trainnet に用意されていない場合、カスタム損失関数を関数ハンドルとして trainnet に指定できます。損失関数が予測とターゲットよりも多くの入力を必要とする場合 (たとえば、損失関数がニューラル ネットワークまたは追加の入力にアクセスする必要がある場合)、カスタム学習ループを使用してモデルに学習させます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。

タスクに必要な層が Deep Learning Toolbox™ に用意されていない場合、カスタム層を作成できます。詳細については、カスタム深層学習層の定義を参照してください。層のネットワークとして指定できないモデルの場合は、モデルを関数として定義できます。詳細については、モデル関数を使用したネットワークの学習を参照してください。

どのタスクでどの学習手法を使用するかについての詳細は、MATLAB による深層学習モデルの学習を参照してください。

作成

説明

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

例

dlX = dlarray(X,fmt) は、fmt のデータ形式に従い、次元ラベルを使用して dlX 内のデータの形式を整えます。次元ラベルは、関数間で深層学習データを受け渡すのに役立ちます。次元ラベルの詳細については、深層学習のデータ形式を参照してください。

fmt を "" に設定しても、データから形式は削除されません。代わりに stripdims を使用してください。

例

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 スカラーまたは文字ベクトルとして指定します。

fmt が "" である場合、dlX の形式は入力 X によって異なります。

  • X が形式を整えた dlarray オブジェクトではない場合、出力 dlX には形式がありません。

  • X が形式を整えた dlarray オブジェクトである場合、出力 dlX の形式は X と同じになります。

警告

fmt を "" に設定しても、データから形式は削除されません。代わりに stripdims を使用してください。

fmt が空以外である場合、文字列の各文字は、次のいずれかの次元ラベルでなければなりません。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

"S" または "U" のラベルが付いた次元については、複数回指定できます。"C"、"B"、"T" のラベルについては、それぞれ 1 回のみ使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。

形式を整えた dlarray オブジェクトを作成する場合、ソフトウェアは、形式内の次元が以下の順序となるように次元を自動的に並べ替えます。

  • "S"

  • "C"

  • "B"

  • "T"

  • "U"

たとえば、形式を "TCB" (時間、チャネル、バッチ) と指定すると、ソフトウェアは形式が "CBT" (チャネル、バッチ、時間) となるように次元を自動的に並べ替えます。

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 で指定されたデータ形式に従ってデータが並べ替えられる場合があります。

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

オブジェクト関数

dimsdlarray オブジェクトのデータ形式
dlgradient自動微分を使用したカスタム学習ループの勾配の計算
extractdatadlarray オブジェクトからのデータの抽出
finddim指定されたラベルをもつ次元の検索
stripdimsdlarray データ形式の削除

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

例

すべて折りたたむ

行列から形式を整えていない dlarray を作成します。

X = randn(3,5);
dlX = dlarray(X)
dlX = 
  3×5 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) × 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) × 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) × 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) × 1(U) dlarray

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077

詳細

すべて展開する

ヒント

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

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

拡張機能

すべて展開する

バージョン履歴

R2019b で導入

すべて展開する