このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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]} |
||
多入力層 | ( 最初の 入力の順序は,層グラフ |
数据=读取(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
は、複数のシーケンス入力層をもつネットワークをサポートしていません。
応答の形式は,タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
分類 | 直言スカラー |
回帰 |
|
sequence-to-sequence分類 | カテゴリカルラベルの1行s列のシーケンス。ここで,s は対応する予測子シーケンスのシーケンス長です。 |
sequence-to-sequence回帰 | R行 s列の行列。ここで、Rは応答の数、sは対応する予測子シーケンスのシーケンス長です。 |
桌子で返される応答の場合、要素は、明确的スカラー、数値行ベクトルであるか、数値配列が格納された 1.行 1.列の 单间牢房配列でなければなりません。
预测
、分类
,および激活
を使用する推論の場合、予測子に対応する列を得るためにのみデータストアが必要です。推論関数は最初の努明普茨
個の列を使用し、後続の層を無視します。ここで、努明普茨
はネットワーク入力層の数です。
读
を呼び出すたびに,データストアが任意の行数(観測値)を返すことがあります。データストアを使用でき,“MiniBatchSize”
の指定をサポートするtrainNetwork
、预测
、分类
、激活
などの関数は、データの完全なミニバッチの形成に必要な回数だけ读
を呼び出します。これらの関数がミニバッチを形成する際には,メモリの内部キューを使用して読み取りデータを格納します。たとえば,读
の呼び出しごとにデータストアが一貫して64行を返し,MiniBatchSize
が128
である場合、データの各ミニバッチを形成するには读
を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}
图像处理工具箱がある場合,随机抽取数据存储
(图像处理工具箱)によって別の解決策が提供されます。これは,ImageDatastore
、PixelLabelDatastore
,および转换数据存储
内のイメージに基づくデータを関連付ける方法に代わる解決策です。随机抽取数据存储
には、関数结合
を使用したデータの関連付けと比べて複数の利点があります。ランダムパッチ抽出データストアは,具体的に以下のことを行います。
使改变
および结合
を使用したカスタムのトリミング操作の実装を必要とすることなく,2次元および3次元の両方のデータからパッチを抽出する,簡単な方法を提供する
使改变
を使用したカスタム連結操作の定義を必要とすることなく,ミニバッチのイメージごとに複数のパッチを簡単に生成する方法を提供する
明确的データにイメージ変換を適用する際に、明确的データと数値データの間での効率的な変換をサポートする
並列学習をサポートする
イメージをキャッシュすることによってパフォーマンスを改善する
並列学習またはマルチ GPU学習に使用されるデータストアは分割可能でなければなりません。データストアが分割可能かどうかを判定するには、関数可分割
を使用します。培训选项
の名前と値のペアの引数'
を使用して,並列学習またはマルチGPU学習を指定します。並列学習や,単一GPUまたは複数GPUでの学習を行うには,并行计算工具箱™が必要です。执行环境
'
多くの組み込みデータストアは関数隔断
をサポートしているため、既に分割可能になっています。関数使改变
と结合
を組み込みデータストアと共に使用すると、一般的には並列学習とマルチ GPU学習のサポートが維持されます。
並列学習またはマルチGPU学習をサポートするカスタムデータストアを作成する必要がある場合,データストアはmatlab.io.datastore.Partitionable
クラスを実装しなければなりません。
分割可能なデータストアは、バックグラウンド ディスパッチを使用した学習データの読み取りをサポートします。バックグラウンド ディスパッチでは、GPUの作動中にデータがメモリのキューに入れられます。培训选项
の名前と値のペアの引数'
を使用してバックグラウンドディスパッチを指定します。バックグラウンドディスパッチは并行计算工具箱が必要です。派遣背景
'
並列学習の場合,データストアで培训选项
の名前と値のペアの引数'
を洗牌
'“没有”
に指定することはサポートされません。