最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英语でご覧になれます。
MATLAB®のデータストアは,大きすぎて一度にメモリに收まらないデータの集合を处理および表现する便利な方法です。深层学习には大量のデータが必要となる场合がよくあるため,データストアはMATLABにおける深层学习ワークフローの重要な部分です。
多くの用途では,组み込みデータストアで开始するのが最も简単な方法です。使用可能な组み込みデータストアの详细は,ファイル形式またはアプリケーション用のデータストアの选択(MATLAB)を参照してください。ただし,ネットワークの学习,検证,および推论のための入力として直接使用できるのは,一部のタイプの组み込みデータストアのみです。これらのデータストアは以下のとおりです。
randomPatchExtractionDatastore
(图像处理工具箱™が必要)
DenoisingImageDatastore
(图像处理工具箱が必要)
boxLabelDatastore
(计算机视觉工具箱™が必要)
PixelLabelImageDatastore
(计算机视觉工具箱が必要)
その他の组み込みデータストアは深层学习の入力として使用できますが,これらのデータストアから読み取られたデータは,深层学习ネットワークに必要な形式になるように前处理しなければなりません。読み取りデータに必要な形式の详细は,学习,検证,および推论用の入力データストアを参照してください。データストアから読み取られたデータを前处理する方法の详细は,データストアの変换と组み合わせを参照してください。
用途によっては,データを当てはめる组み込みデータストアタイプが存在しないことがあります。これらの问题がある场合,カスタムデータストアを作成できます。详细については,カスタムデータストアの开発(MATLAB)を参照してください。カスタムデータストアの关数读
が必要な形式でデータを返す限り,すべてのカスタムデータストアが深层学习インターフェイスに対する入力として有效です。
深度学习工具箱™のデータストアは,学习,検证,および推论に有效な入力です。
イメージデータストアを学习データのソースとして使用するには,trainNetwork
の引数IMDS
を使用します。その他のすべてのタイプのデータストアを学习データのソースとして使用するには,trainNetwork
の引数DS
を使用します。データストアを検证に使用するには,trainingOptions
で名前と値のペアの引数“
を使用します。ValidationData
“
学习または検证に有效な入力であるには,(ImageDatastore
を除いて)データストアの关数读
が细胞配列または表としてデータを返さなければなりません。
単一の入力があるネットワークの场合,データストアによって返される表または细胞配列に2つの列がなければなりません。データの最初の列はネットワークへの入力を表し,データの2列目は応答を表します。データの各列は个别の観测を表します。ImageDatastore
の场合のみ,trainNetwork
およびtrainingOptions
は整数配列および整数配列の1列の细胞配列として返されるデータをサポートします。
复数の入力があるネットワークの场合,データストアは,予测子と応答を含む列数が(numInputs
1)の细胞配列を返す,组み合わせまたは変换が行われたデータストアでなければなりません。ここで,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 |
|
多入力 | (numInputs 1)列の细胞配列 |
数据=读(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行を返し,MiniBatchSize
が128
である场合,データの各ミニバッチを形成するには读
を2回呼び出す必要があります。
最良のランタイムパフォーマンスを得るには,读
によって返される観测値の数が'MiniBatchSize'
に等しくなるようにデータストアを构成することをお勧めします。'READSIZE'
プロパティがあるデータストアの场合,'READSIZE'
を设定して,读
を呼び出すたびにデータストアによって返される観测値の数を変更します。
深层学习では,データがネットワークへの入力に适した形式になる前にデータの前处理と拡张が必要になることがよくあります。データストアの关数转变
および结合
は,ネットワークに渡されるデータの准备に役立ちます。
复数の入力があるネットワークの场合,组み合わせが行われたデータストアを使用して,データの复数のデータソースを组み合わせます。
关数转变
は,“基になるデータストア”と呼ばれるデータストアによって読み取られたデータを変换し,基になるデータストアの変更された形式を作成します。
复数の前处理演算を伴う复雑な変换の场合,独自の关数に変换の完全なセットを定义します。次に,关数のハンドルを转变
の引数@fcn
として指定します。详细については,关数のファイルでの作成(MATLAB)を参照してください。
1行のコードで表现できる単纯な変换の场合,无名关数のハンドルを转变
の引数@fcn
として指定できます。详细については,无名关数(MATLAB)を参照してください。
转变
に指定された关数ハンドルは,基になるデータストアの关数读
によって返される形式と同じ形式の入力データを受け入れなければなりません。
例:数字分类ネットワークに学习させるためのイメージストアの変换
この例では,关数转变
を使用して,イメージデータストア内の各イメージにランダムな90度の回転が追加される学习セットを作成します。结果のTransformedDatastore
をtrainNetwork
に渡して,简単な数字分类ネットワークに学习させます。
数字イメージを含むイメージデータストアを作成します。
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
によって别の解决策が提供されます。これは,ImageDatastore
,PixelLabelDatastore
,およびTransformedDatastore
内のイメージに基づくデータを,前述の2つのデータストアのいずれかの基となる型に关连付ける方法に代わる解决策です。randomPatchExtractionDatastore
には,关数结合
を使用したデータの关连付けと比べて复数の利点があります。ランダムパッチ抽出データストアは,具体的に以下のことを行います。
转变
および结合
を使用したカスタムのトリミング操作の実装を必要とすることなく,2次元および3次元の両方のデータからパッチを抽出する,简単な方法を提供する
转变
を使用したカスタム连结操作の定义を必要とすることなく,ミニバッチのイメージごとに复数のパッチを简単に生成する方法を提供する
分类データにイメージ変换を适用する际に,分类データと数値データの间での效率的な変换をサポートする
并列学习をサポートする
イメージをキャッシュすることによってパフォーマンスを改善する
并列学习またはマルチGPU学习に使用されるデータストアは分割可能でなければなりません。trainingOptions
の名前と値のペアの引数“
を使用して,并列学习またはマルチGPU学习を指定します。执行环境
“
多くの组み込みデータストアは关数划分
をサポートしているため,既に分割可能になっています。基になるデータストアが分割可能な场合,変换后のデータストアは分割可能です。关数转变
を组み込みデータストアと共に使用すると,一般的には并列学习とマルチGPU学习のサポートが维持されます。
并列学习またはマルチGPU学习をサポートするカスタムデータストアを作成する必要がある场合,データストアはmatlab.io.datastore.Partitionable
クラスを実装しなければなりません。
分割可能なデータストアは,バックグラウンドディスパッチを使用した学习データの読み取りをサポートします。バックグラウンドディスパッチでは,GPUの作动中にデータがメモリのキューに入れられます。trainingOptions
の名前と値のペアの引数“
を使用してバックグラウンドディスパッチを指定します。バックグラウンドディスパッチは并行计算工具箱™が必要です。DispatchInBackground
“
并列学习,マルチGPU学习,およびバックグラウンドディスパッチにデータストアを使用する场合には,いくつかの制限があります。
データストアでは,trainingOptions
の名前と値のペアの引数“
を拖曳
“'没有'
に指定することはサポートされません。
组み合わせが行われたデータストアは分割可能ではないため,并列学习,マルチGPU学习,またはバックグラウンドディスパッチはサポートされません。
结合
|读
|trainNetwork
|trainingOptions
|转变