最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英语でご覧になれます。

深层学习用のデータストア

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

データストアの选択

多くの用途では,组み込みデータストアで开始するのが最も简単な方法です。使用可能な组み込みデータストアの详细は,ファイル形式またはアプリケーション用のデータストアの选択(MATLAB)を参照してください。ただし,ネットワークの学习,検证,および推论のための入力として直接使用できるのは,一部のタイプの组み込みデータストアのみです。これらのデータストアは以下のとおりです。

その他の组み込みデータストアは深层学习の入力として使用できますが,これらのデータストアから読み取られたデータは,深层学习ネットワークに必要な形式になるように前处理しなければなりません。読み取りデータに必要な形式の详细は,学习,検证,および推论用の入力データストアを参照してください。データストアから読み取られたデータを前处理する方法の详细は,データストアの変换と组み合わせを参照してください。

用途によっては,データを当てはめる组み込みデータストアタイプが存在しないことがあります。これらの问题がある场合,カスタムデータストアを作成できます。详细については,カスタムデータストアの开発(MATLAB)を参照してください。カスタムデータストアの关数が必要な形式でデータを返す限り,すべてのカスタムデータストアが深层学习インターフェイスに対する入力として有效です。

学习,検证,および推论用の入力データストア

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

学习と検证

イメージデータストアを学习データのソースとして使用するには,trainNetworkの引数IMDSを使用します。その他のすべてのタイプのデータストアを学习データのソースとして使用するには,trainNetworkの引数DSを使用します。データストアを検证に使用するには,trainingOptionsで名前と値のペアの引数ValidationDataを使用します。

学习または検证に有效な入力であるには,(ImageDatastoreを除いて)データストアの关数が细胞配列または表としてデータを返さなければなりません。

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

复数の入力があるネットワークの场合,データストアは,予测子と応答を含む列数が(numInputs1)の细胞配列を返す,组み合わせまたは変换が行われたデータストアでなければなりません。ここで,numInputsはネットワーク入力の数,numResponsesは応答の数です。一世numInputs以下の场合,细胞配列の一世番目の要素は入力layers.InputNames(ⅰ)に対応します。ここで,はネットワークアーキテクチャを定义する层グラフです。细胞配列の最后の列は応答に対応します。

次の表に,データストアDSに対して关数を呼び出した场合の出力のサンプルを示します。

ネットワークのタイプ 読み取りデータの形式 出力の例
単入力 2列の细胞配列
数据=读(DS)
数据= 4×2单元阵列{28×28双} {[7]} {28×28双} {[7]} {28×28双} {[9]} {28×28双} {[9]}
2列の表
数据=读(DS)
数据= 4×2表输入响应______________ ________ {28×28双} 7 {28×28双} 7 {28×28}双{9 28×28双} 9
多入力 numInputs1)列の细胞配列
数据=读(DS)
数据= 4×3单元阵列{28×28双} {128×128双} {[7]} {28×28双} {128×128双} {[7]} {28×28双} {128×128双} {[9]} {28×28双} {128×128双} {[9]}

推论

预测分类,および激活を使用する推论の场合,予测子に対応する列を得るためにのみデータストアが必要です。推论关数は,データの1列目より后の追加の列を无视します。

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

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

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

データストアの変换と组み合わせ

深层学习では,データがネットワークへの入力に适した形式になる前にデータの前处理と拡张が必要になることがよくあります。データストアの关数转变および结合は,ネットワークに渡されるデータの准备に役立ちます。

复数の入力があるネットワークの场合,组み合わせが行われたデータストアを使用して,データの复数のデータソースを组み合わせます。

データストアの変换

关数转变は,“基になるデータストア”と呼ばれるデータストアによって読み取られたデータを変换し,基になるデータストアの変更された形式を作成します。

  • 复数の前处理演算を伴う复雑な変换の场合,独自の关数に変换の完全なセットを定义します。次に,关数のハンドルを转变の引数@fcnとして指定します。详细については,关数のファイルでの作成(MATLAB)を参照してください。

  • 1行のコードで表现できる単纯な変换の场合,无名关数のハンドルを转变の引数@fcnとして指定できます。详细については,无名关数(MATLAB)を参照してください。

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

例:数字分类ネットワークに学习させるためのイメージストアの変换

この例では,关数转变を使用して,イメージデータストア内の各イメージにランダムな90度の回転が追加される学习セットを作成します。结果のTransformedDatastoretrainNetworkに渡して,简単な数字分类ネットワークに学习させます。

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

digitDatasetPath =完整文件(matlabroot,'工具箱''NNET'...'nndemos''nndatasets''DigitDataset');IMDS = imageDatastore(digitDatasetPath,...'IncludeSubfolders',真正,...'LABELSOURCE''foldernames');

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

miniBatchSize = 128;imds.ReadSize = miniBatchSize;

ランダムな90度の回転を追加してイメージデータストア内のイメージを変换します。変换关数preprocessForTrainingの定义は,この例の终わりで行います。

dsTrain =变换(IMDS,@ preprocessForTraining,'IncludeInfo',真正)
dsTrain = TransformedDatastore与属性:UnderlyingDatastore:[1×1 matlab.io.datastore.ImageDatastore]变换:{@preprocessForTraining} IncludeInfo:1

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

层= [...imageInputLayer([28 28 1],'正常化''没有')convolution2dLayer(5,20)reluLayer()maxPooling2dLayer(2,“跨越论”,2)fullyConnectedLayer(10);softmaxLayer()classificationLayer()];选项= trainingOptions('亚当'...“情节”“训练进度”...'MiniBatchSize',miniBatchSize);净= trainNetwork(dsTrain,层,选项);

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

功能[DATAOUT,信息] = preprocessForTraining(数据,信息)= numRows行大小(数据,1);DATAOUT =细胞(numRows行,2);对于IDX = 1:numRows行%随机90度旋转IMGOUT = rot90(数据{IDX,1},兰迪(4)-1);%返回从信息结构的标签%在DATAOUT第二列中。DATAOUT(IDX,:) = {IMGOUT,info.Label(IDX)};结束结束

データストアの组み合わせ

关数结合は,同じ长さの2つのデータストアを关连付けて,期待される形式の学习および検证データを作成します。データストアの组み合わせではデータストア间のパリティが维持されます。结果のCombinedDatastoreの关数を呼び出すたびに,基になるデータストアの対応する部分からデータが返されます。

たとえば,入力イメージと出力イメージを使用して回帰ネットワークに学习させる场合,2つのイメージデータストアを组み合わせることによって学习データセットを作成できます。次のサンプルコードは,imdsXおよびimdsYという名前の2つのイメージデータストアの组み合わせを示します。これらのイメージデータストアはデータを细胞配列として返すため,组み合わせが行われたデータストアimdsTrainはデータを2列の细胞配列として返します。

imdsX = imageDatastore(___);imdsY = imageDatastore(___);imdsTrain =结合(imdsX,imdsY)
imdsTrain = CombinedDatastore与属性:UnderlyingDatastores:{1×2细胞}

图像处理工具箱がある场合,randomPatchExtractionDatastoreによって别の解决策が提供されます。これは,ImageDatastorePixelLabelDatastore,およびTransformedDatastore内のイメージに基づくデータを,前述の2つのデータストアのいずれかの基となる型に关连付ける方法に代わる解决策です。randomPatchExtractionDatastoreには,关数结合を使用したデータの关连付けと比べて复数の利点があります。ランダムパッチ抽出データストアは,具体的に以下のことを行います。

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

  • 转变を使用したカスタム连结操作の定义を必要とすることなく,ミニバッチのイメージごとに复数のパッチを简単に生成する方法を提供する

  • 分类データにイメージ変换を适用する际に,分类データと数値データの间での效率的な変换をサポートする

  • 并列学习をサポートする

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

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

并列学习またはマルチGPU学习に使用されるデータストアは分割可能でなければなりません。trainingOptionsの名前と値のペアの引数执行环境を使用して,并列学习またはマルチGPU学习を指定します。

多くの组み込みデータストアは关数划分をサポートしているため,既に分割可能になっています。基になるデータストアが分割可能な场合,変换后のデータストアは分割可能です。关数转变を组み込みデータストアと共に使用すると,一般的には并列学习とマルチGPU学习のサポートが维持されます。

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

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

并列学习,マルチGPU学习,およびバックグラウンドディスパッチにデータストアを使用する场合には,いくつかの制限があります。

  • データストアでは,trainingOptionsの名前と値のペアの引数拖曳'没有'に指定することはサポートされません。

  • 组み合わせが行われたデータストアは分割可能ではないため,并列学习,マルチGPU学习,またはバックグラウンドディスパッチはサポートされません。

参考

||||

关连する例

详细