主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

深層学習用のデータストア

MATLAB®のデータストアは、大きすぎて一度にメモリに収まらないデータの集合を処理および表現する便利な方法です。深層学習には大量のデータが必要となる場合がよくあるため、データストアは MATLABにおける深層学習ワークフローの重要な部分です。

データストアの選択

多くの用途では、組み込みデータストアで開始するのが最も簡単な方法です。使用可能な組み込みデータストアの詳細は、ファイル形式またはアプリケーション用のデータ ストアの選択を参照してください。ただし,ネットワークの学習,検証,および推論のための入力として直接使用できるのは,一部のタイプの組み込みデータストアのみです。これらのデータストアは以下のとおりです。

データストア 説明 追加で必要になるツールボックス
ImageDatastore イメージデータ用のデータストア なし
AugmentedImageDatastore

学習イメージのサイズ変更および拡張を行うためのデータストア

データストアは非確定的

なし
PixelLabelDatastore(计算机视觉工具箱)

ピクセルラベルデータのデータストア

计算机视觉工具箱™

PixelLabelImageDatastore(计算机视觉工具箱)

セマンティックセグメンテーションネットワークに学習させるためのデータストア

データストアは非確定的

计算机视觉的工具箱

boxLabelDatastore(计算机视觉工具箱)

境界ボックス ラベル データ用のデータストア

计算机视觉的工具箱

RandomPatchExtractionDatastore(图像处理工具箱)

イメージベースのデータからランダムパッチを抽出するためのデータストア

データストアは非確定的

图像处理工具箱™

bigimageDatastore(图像处理工具箱) メモリに収まらない単一の大きなイメージのブロックを管理するためのデータストア 图像处理工具箱
DenoisingImageDatastore(图像处理工具箱)

イメージ ノイズ除去の深層ニューラル ネットワークに学習させるためのデータストア

データストアは非確定的

图像处理工具箱

その他の組み込みデータストアは深層学習の入力として使用できますが、これらのデータストアから読み取られたデータは、深層学習ネットワークに必要な形式になるように前処理しなければなりません。読み取りデータに必要な形式の詳細は、学習,検証,および推論用の入力データストアを参照してください。データストアから読み取られたデータを前処理する方法の詳細は、データストアの変換と統合を参照してください。

用途によっては、データを当てはめる組み込みデータストア タイプが存在しないことがあります。これらの問題がある場合、カスタム データストアを作成できます。詳細については、カスタム データ ストアの開発を参照してください。カスタム データストアの関数が必要な形式でデータを返す限り、すべてのカスタム データストアが深層学習インターフェイスに対する入力として有効です。

学習,検証,および推論用の入力データストア

深度学习工具箱™のデータストアは,学習,検証,および推論に有効な入力です。

学習と検証

イメージ データストアを学習データのソースとして使用するには、trainNetworkの引数洛桑国际管理发展学院を使用します。その他のすべてのタイプのデータストアを学習データのソースとして使用するには、trainNetworkの引数dsを使用します。データストアを検証に使用するには、培训选项で名前と値のペアの引数ValidationDataを使用します。

学習または検証に有効な入力であるには、データストアの関数が 单间牢房配列または 桌子としてデータを返さなければなりません (数値配列を出力できるImageDatastoreオブジェクトと、桌子を出力しなければならないカスタム ミニバッチ データストアは除く)。

単一の入力があるネットワークの場合,データストアによって返される表または细胞配列に2つの列がなければなりません。データの最初の列はネットワークへの入力を表し,データの2列目は応答を表します。データの各列は個別の観測を表します。ImageDatastoreの場合のみ、trainNetworkおよび培训选项は整数配列および整数配列の1列の细胞配列として返されるデータをサポートします。

複数の入力層があるネットワークにデータストアを使用するには、関数结合および使改变を使用して,列数が(numInputs+ 1)の细胞配列を出力するデータストアを作成します。ここで,numInputsはネットワーク入力の数です。この場合、最初のnumInputs列は各入力の予測子を指定し、最後の列は応答を指定します。入力の順序は、層グラフInputNamesプロパティによって指定します。

以下の表に、データストアdsに対して関数を呼び出した場合の出力の例を示します。

ネットワークアーキテクチャ データストア出力 出力の例
単入力層

表2列のまたは细胞配列。

最初の列と2番目の列は,それぞれ予測子と応答を指定します。

表の要素は,スカラー,行ベクトルであるか,数値配列が格納された1行1列の细胞配列でなければなりません。

カスタム ミニバッチ データストアは、桌子を出力しなければなりません。

数据=读取(ds)
数据=4×2表预测值响应{224×224×3双}2{224×224×3双}7{224×224×3双}9{224×224×3双}
数据=读取(ds)
Data = 4×2 cell array {224×224×3 double} {[2]} {224×224×3 double} {[7]} {224×224×3 double} {[9]} {224×224×3 double} {[9]}
多入力層

numInputs+ 1)列の细胞配列。numInputsはネットワーク入力の数です。

最初のnumInputs個の列は各入力の予測子を指定し、最後の列は応答を指定します。

入力の順序は,層グラフInputNamesプロパティによって指定します。

数据=读取(ds)
数据=4×3单元阵列{224×224×3 double}{128×128×3 double}{[2]}{224×224×3 double}{[2]}{224×224×3 double}{128×128×3 double}{[9]}{224×224×3 double}{128×128×3 double}{[9]}

予測子の形式は,データのタイプによって異なります。

データ 予測子の形式
2次元イメージ

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

3.次元イメージ

h x w x d cの数値配列。ここで,h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。

ベクトルシーケンス

C行 s列の行列。ここで、Cはシーケンスの特徴の数、sはシーケンス長です。

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

高x宽x高x低の配列。ここで、h、 w、および Cはそれぞれイメージの高さ、幅、およびチャネル数に対応します。sはシーケンス長です。

ミニバッチ内の各シーケンスは,同じシーケンス長でなければなりません。

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

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

ミニバッチ内の各シーケンスは,同じシーケンス長でなければなりません。

特徴

C行 1.列の列ベクトル。Cは特徴の数です。

表で返される予測子の場合,要素に,数値スカラー,数値行ベクトルが含まれているか,または数値配列が格納された1行1列の细胞配列が含まれていなければなりません。

関数trainNetworkは、複数のシーケンス入力層をもつネットワークをサポートしていません。

応答の形式は,タスクのタイプによって異なります。

タスク 応答の形式
分類 直言スカラー
回帰

  • スカラー

  • 数値ベクトル

  • イメージを表す 3.次元数値配列

sequence-to-sequence分類

カテゴリカルラベルの1行s列のシーケンス。ここで,s は対応する予測子シーケンスのシーケンス長です。

sequence-to-sequence回帰

R行 s列の行列。ここで、Rは応答の数、sは対応する予測子シーケンスのシーケンス長です。

桌子で返される応答の場合、要素は、明确的スカラー、数値行ベクトルであるか、数値配列が格納された 1.行 1.列の 单间牢房配列でなければなりません。

予測

预测分类,および激活を使用する推論の場合、予測子に対応する列を得るためにのみデータストアが必要です。推論関数は最初の努明普茨個の列を使用し、後続の層を無視します。ここで、努明普茨はネットワーク入力層の数です。

読み取りサイズとミニバッチ サイズの指定

を呼び出すたびに,データストアが任意の行数(観測値)を返すことがあります。データストアを使用でき,“MiniBatchSize”の指定をサポートするtrainNetwork预测分类激活などの関数は、データの完全なミニバッチの形成に必要な回数だけを呼び出します。これらの関数がミニバッチを形成する際には,メモリの内部キューを使用して読み取りデータを格納します。たとえば,の呼び出しごとにデータストアが一貫して64行を返し,MiniBatchSize128である場合、データの各ミニバッチを形成するにはを2回呼び出す必要があります。

最良のランタイム パフォーマンスを得るには、によって返される観測値の数が“MiniBatchSize”に等しくなるようにデータストアを構成することをお勧めします。“ReadSize”プロパティがあるデータストアの場合、“ReadSize”を設定して,を呼び出すたびにデータストアによって返される観測値の数を変更します。

データストアの変換と統合

深層学習では,データがネットワークへの入力に適した形式になる前にデータの前処理と拡張が必要になることがよくあります。データストアの関数使改变および结合は、ネットワークに渡されるデータの準備に役立ちます。

複数の入力層があるネットワークにデータストアを使用するには、関数结合および使改变を使用して,列数が(numInputs+ 1)の细胞配列を出力するデータストアを作成します。ここで,numInputsはネットワーク入力の数です。この場合、最初のnumInputs列は各入力の予測子を指定し、最後の列は応答を指定します。入力の順序は、層グラフInputNamesプロパティによって指定します。

データストアの変換

変換されたデータストアは,データを読み取るときに,特定のデータ変換を基となるデータストアに適用します。変換されたデータストアを作成するには,関数使改变を使用して、基となるデータストアおよび変換処理について指定します。

  • 複数の前処理演算を伴う複雑な変換の場合,独自の関数に変換の完全なセットを定義します。次に,関数のハンドルを使改变の引数@fcnとして指定します。詳細については,関数のファイルでの作成を参照してください。

  • 1行のコードで表現できる単純な変換の場合,無名関数のハンドルを使改变の引数@fcnとして指定できます。詳細については、無名関数を参照してください。

使改变に指定された関数ハンドルは、基になるデータストアの関数によって返される形式と同じ形式の入力データを受け入れなければなりません。

例:数字分類ネットワークに学習させるためのイメージ データストアの変換

この例では、関数使改变を使用して,イメージデータストア内の各イメージにランダムな90度の回転が追加される学習セットを作成します。結果の转换数据存储trainNetworkに渡して、簡単な数字分類ネットワークに学習させます。

数字イメージを含むイメージ データストアを作成します。

digitDatasetPath=fullfile(matlabroot,“工具箱”“内特”...“nndemos”“nndatasets”“DigitDataset”); imds2=图像数据存储(digitDatasetPath,...“IncludeSubfolders”错误的...“标签源”“foldernames”);

ミニバッチサイズがイメージデータストアの可读大小に等しくなるように設定します。

miniBatchSize=128;imds.ReadSize=miniBatchSize;

ランダムな 90度の回転を追加してイメージ データストア内のイメージを変換します。変換関数预训练の定義は、この例の終わりで行います。

dsTrain=变换(imds,@prepreprefortrain,“IncludeInfo”,对)
[1×1 matlab.io.datastore. dsTrain = TransformedDatastore . properties:ImageDatastore转换:{@preprocessForTraining} IncludeInfo

ネットワークの層および学習オプションを指定し,変換が行われたデータストアdsTrainをデータのソースとして使用してネットワークに学習させます。

层=[imageInputLayer([28 1],“正常化”“没有”reluLayer maxPooling2dLayer(2, 10)“步”,2)全连接层(10);softmaxLayer分类层];选项=培训选项(“亚当”...“阴谋”“培训进度”...“MiniBatchSize”, miniBatchSize);网= trainNetwork (dsTrain层,选项);

基になるデータストアから読み取られたデータ数据に対して目的の変換を実行する関数を定義します。この関数は各読み取りイメージをループ処理し、ランダムな回転を実行して、変換後のイメージと対応するラベルをtrainNetworkで期待される细胞配列として返します。

函数[dataOut,info]=prepreprefortraining(data,info)numRows=size(data,1);dataOut=cell(numRows,2);idx = 1: numRows%随机90度旋转imgOut=rot90(数据{idx,1},randi(4)-1);从info结构体返回标签作为%数据输出中的第二列。dataOut(idx,:)={imgOut,info.Label(idx)};结束结束

データストアの統合

関数结合は、複数のデータストアを関連付けます。結果の组合数据存储に対してデータストアのリセットなどの操作を行うと,基になるすべてのデータストアに対して同じ操作が実行されます。結合されたデータストアの関数を呼び出すと,基になるN個の基になるデータストアすべてからデータのバッチ1つが読み取られます。返される観測値の数は同じでなければなりません。結合されたデータストアから読み取りを行うと,学習と検証に適したN列の细胞配列で,結果が水平方向に連結されて返されます。結合されたデータストアをシャッフルすると,基になるデータストア内のファイルも同一のランダムな順序になります。

たとえば、图像对图像回帰ネットワークに学習させる場合、2.つのイメージ データストアを組み合わせることによって学習データ セットを作成できます。次のサンプル コードは、imdsXおよびimdsYという名前の2つのイメージデータストアの組み合わせを示します。組み合わせが行われたデータストアimdsTrainはデータを2列の细胞配列として返します。

imdsX = imageDatastore (___);imdsY = imageDatastore (___);imdsTrain =结合(imdsX imdsY)
imdsTrain=CombinedDatastore与属性:底层数据存储:{1×2 cell}

图像处理工具箱がある場合,随机抽取数据存储(图像处理工具箱)によって別の解決策が提供されます。これは,ImageDatastorePixelLabelDatastore,および转换数据存储内のイメージに基づくデータを関連付ける方法に代わる解決策です。随机抽取数据存储には、関数结合を使用したデータの関連付けと比べて複数の利点があります。ランダムパッチ抽出データストアは,具体的に以下のことを行います。

  • 使改变および结合を使用したカスタムのトリミング操作の実装を必要とすることなく,2次元および3次元の両方のデータからパッチを抽出する,簡単な方法を提供する

  • 使改变を使用したカスタム連結操作の定義を必要とすることなく,ミニバッチのイメージごとに複数のパッチを簡単に生成する方法を提供する

  • 明确的データにイメージ変換を適用する際に、明确的データと数値データの間での効率的な変換をサポートする

  • 並列学習をサポートする

  • イメージをキャッシュすることによってパフォーマンスを改善する

並列学習およびバックグラウンド ディスパッチへのデータストアの使用

並列学習またはマルチ GPU学習に使用されるデータストアは分割可能でなければなりません。データストアが分割可能かどうかを判定するには、関数可分割を使用します。培训选项の名前と値のペアの引数执行环境を使用して,並列学習またはマルチGPU学習を指定します。並列学習や,単一GPUまたは複数GPUでの学習を行うには,并行计算工具箱™が必要です。

多くの組み込みデータストアは関数隔断をサポートしているため、既に分割可能になっています。関数使改变结合を組み込みデータストアと共に使用すると、一般的には並列学習とマルチ GPU学習のサポートが維持されます。

並列学習またはマルチGPU学習をサポートするカスタムデータストアを作成する必要がある場合,データストアはmatlab.io.datastore.Partitionableクラスを実装しなければなりません。

分割可能なデータストアは、バックグラウンド ディスパッチを使用した学習データの読み取りをサポートします。バックグラウンド ディスパッチでは、GPUの作動中にデータがメモリのキューに入れられます。培训选项の名前と値のペアの引数派遣背景を使用してバックグラウンドディスパッチを指定します。バックグラウンドディスパッチは并行计算工具箱が必要です。

並列学習の場合,データストアで培训选项の名前と値のペアの引数洗牌“没有”に指定することはサポートされません。

参考

||||

関連する例

詳細