カスタムミニバッチデ,タストアの開発
“ミニバッチデータストア”とは,バッチ単位でのデータの読み取りをサポートするデータストアの実装です。ミニバッチデータストアは,深度学习工具箱™を使用する深層学習アプリケーションの学習データセット,検証データセット,テストデータセット,および予測データセットのソースとして使用できます。
シーケンスデータ,時系列データ,またはテキストデータを前処理するには,ここで説明するフレームワークを使用して独自のミニバッチデータストアを構築します。カスタムミニバッチデタストアを使用する方法を示す例にいては,シ,ケンスデ,タのカスタムミニバッチデ,タストアを使用したネットワ,クの学習を参照してください。
概要
カスタムデータストアのクラスおよびオブジェクトを使用して,カスタムデータストアインターフェイスを構築します。次に,カスタムデ,タストアを使用してデ,タをmatlab®に読み込みます。
カスタムミニバッチデ,タストアの設計には,matlab.io.Datastore
およびmatlab.io.datastore.MiniBatchable
クラスからの継承や,必要なプロパティおよびメソッドの実装が含まれます。オプションで,学習中のシャッフルのサポ,トを追加できます。
処理のニ,ズ |
クラス |
---|---|
深度学习工具箱での学習データセット,検証データセット,テストデータセット,および予測データセット用のミニバッチデータストア |
MiniBatchableデ,タストアの実装を参照してください。 |
学習中のシャッフルをサポ,トするミニバッチデ,タストア |
シャッフルのサポ,トの追加を参照してください。 |
MiniBatchable
デ,タストアの実装
MyDatastore
という名前のカスタムミニバッチデ,タストアを実装するには,スクリプトMyDatastore.m
を作成します。このスクリプトはMATLABパス上になければならず,適切なクラスから継承し,必要なメソッドを定義するコードを含んでいる必要があります。深度学习工具箱での学習データセット、検証データセット、テスト データセット、および予測データセット用のミニバッチ データストアを作成するコードは以下でなければなりません。
クラス
matlab.io.Datastore
およびmatlab.io.datastore.MiniBatchable
から継承する。プロパティ
MiniBatchSize
およびNumObservations
を定義する。
これらの手順に加えて,デ,タの処理および解析に必要なその他のプロパティやメソッドを定義できます。
メモ
ネットワ,クに学習させていて,trainingOptions
が“洗牌”
を“一次”
または“every-epoch”
に指定している場合,matlab.io.datastore.Shuffleable
クラスからも継承しなければなりません。詳細にいては,シャッフルのサポ,トの追加を参照してください。
デ,タストアの読み取り関数は,表でデ,タを返さなければなりません。表の要素は,スカラー,行ベクトルであるか,数値配列が格納された1行1列の细胞配列でなければなりません。
単一の入力層をも2。
ヒント
複数の入力層があるネットワ,クにデ,タストアを使用するには,関数结合
および变换
を使用して、列数が(numInputs
+ 1)のcell配列を出力するデタストアを作成します。ここで,numInputs
はネットワ,ク入力の数です。この場合,最初のnumInputs
列は各入力の予測子を指定し,最後の列は応答を指定します。入力の順序は,層グラフ层
のInputNames
プロパティによって指定します。
予測子の形式は,デ,タのタ,プによって異なります。
デタ | 予測子の形式 |
---|---|
2次元 | 高x宽x宽の数値配列。ここで,h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
3次元 | 高x宽x深x深の数値配列。ここで,h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
ベクトルシ,ケンス | C行s列の行列。ここで,c はシーケンスの特徴の数、s はシーケンス長です。 |
1次元メジシケンス | H x c x sの配列。ここで,h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シ,ケンスは,同じシ,ケンス長でなければなりません。 |
2次元メジシケンス | 高x宽x c x sの配列。ここで,h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シ,ケンスは,同じシ,ケンス長でなければなりません。 |
3次元メジシケンス | 高x宽x深x c x sの配列。ここで,h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シ,ケンスは,同じシ,ケンス長でなければなりません。 |
特徴 | C行1列の列ベクトル。Cは特徴の数です。 |
表要素には,数値スカラー,数値行ベクトルが含まれているか,数値配列が格納された1行1列の细胞配列が含まれていなければなりません。
関数trainNetwork
は,複数のシケンス入力層をもネットワクをサポトしていません。
応答の形式は,タスクのタ。
タスク | 応答の形式 |
---|---|
分類 | 分类スカラ |
回帰 |
|
序列对序列分類 | カテゴリカルラベルの1行s列のシ,ケンス。ここで,s は対応する予測子シーケンスのシーケンス長です。 |
序列对序列回帰 | R行s列の行列。ここで,R は応答の数、s は対応する予測子シーケンスのシーケンス長です。 |
表要素には,直言スカラー,数値スカラー,数値行ベクトルが含まれているか,数値配列が格納された1行1列の细胞配列が含まれていなければなりません。
この例では,シーケンスデータを処理するためのカスタムミニバッチデータストアを作成する方法を説明します。スクリプトをMySequenceDatastore.m
という名前のファ@ @ルに保存します。
手順 | 実装 |
---|---|
|
classdefMySequenceDatastore < matlab.io.Datastore &...matlab.io.datastore.MiniBatchable属性数据存储标签NumClasses SequenceDimension MiniBatchSize结束属性(SetAccess = protected) NumObservations结束属性(Access = private)此属性从数据存储继承CurrentFileIndex结束方法函数ds = MySequenceDatastore(文件夹)构造一个MySequenceDatastore对象创建文件数据存储。readSequence函数为%定义在类定义之后。fds = fileDatastore(文件夹,...“ReadFcn”@readSequence,...“IncludeSubfolders”,真正的);ds。数据存储= fds;从文件夹名中读取标签numObservations = numel(fds.Files);为i = 1:numObservations file = fds.Files{i};Filepath = fileparts(文件);[~,label] = fileparts(filepath);标签{i,1} =标签;结束ds。标签=分类的(标签);ds。NumClasses = numel(唯一的(标签));确定序列维数。定义LSTM时%网络架构,您可以使用此属性来指定sequenceInputLayer的输入大小。X =预览(fds);ds。SequenceDimension = size(X,1);初始化数据存储属性。ds。MiniBatchSize = 128;ds。NumObservations = NumObservations;ds。CurrentFileIndex = 1;结束函数Tf = hasdata(ds)%如果有更多可用数据则返回trueTf = ds。CurrentFileIndex + ds。MiniBatchSize - 1...< = ds.NumObservations;结束函数[data,info] = read(ds)读取一个小批量数据miniBatchSize = ds.MiniBatchSize;Info = struct;为i = 1:miniBatchSize predictors{i,1} = read(ds.Datastore);responses(i,1) = ds.Labels(ds.CurrentFileIndex);ds。CurrentFileIndex = ds。CurrentFileIndex + 1;结束data = preprocessData(ds,predictors,responses);结束函数data = preprocessData(ds,predictors,responses)% data = preprocessData(ds,predictors,responses)预处理%预测器和响应中的数据,并返回表%的数据miniBatchSize = ds.MiniBatchSize;将数据填充到最长序列的长度。sequenceLengths = cellfun(@(X) size(X,2),predictors);maxSequenceLength = max(sequenceLengths);为i = 1:miniBatchSize X = predictors{i};%零填充序列。如果size(X,2) < maxSequenceLength X(:,maxSequenceLength) = 0;结束预测器{i} = X;结束以表形式返回数据。数据=表(预测器,响应);结束函数重置(ds)重置到数据的开始位置重置(ds.Datastore);ds。CurrentFileIndex = 1;结束结束方法(Hidden = true)函数压裂=进展(ds)确定从数据存储读取数据的百分比压裂= (ds。CurrentFileIndex - 1) / ds.NumObservations;结束结束结束结束类定义 readSequence という関数が使用されます。Matファルからシケンスデタを読み取るにはこの関数を作成しなければなりません。函数数据= readSequence(文件名)% data = readSequence(filename)从mat文件中读取序列X%文件名S = load(文件名);数据= S.X;结束 |
シャッフルのサポ,トの追加
シャッフルのサポ,トを追加するには,まず,MiniBatchableデ,タストアの実装の手順に従います。次にMySequenceDatastore.m
の実装コ,ドを次のように更新します。
追加クラス
matlab.io.datastore.Shuffleable
から継承します。追加メソッド
洗牌
を定義します。
この例のコ,ドでは,シャッフルのサポ,トをMySequenceDatastore
クラスに追加します。縦並びの省略記号は,MySequenceDatastore
の実装からコ,ドをコピ,する必要がある場所を示します。
手順 | 実装 |
---|---|
|
classdefMySequenceDatastore < matlab.io.Datastore &...matlab.io.datastore.MiniBatchable &...matlab.io.datastore.Shuffleable%先前定义的属性……方法%先前定义的方法……函数dsNew = shuffle(ds)% dsNew = shuffle(ds)打乱文件和%对应的标签在数据存储。创建一个数据存储副本dsNew =复制(ds);dsNew。Datastore = copy(ds.Datastore);fds = dsnew .数据存储;打乱文件和相应的标签numObservations = dsNew.NumObservations;idx = randperm(numObservations);fds。Files = fds.Files(idx);dsNew。标签= dsNew.Labels(idx);结束结束结束 |
カスタムミニバッチデ,タストアの検証
ここに記載したすべての手順に従うと,カスタムミニバッチデ,タストアの実装が完了します。このデ,タストアを使用する前に,カスタムデタストアのテストのガドランに記載されているガドランを使用して,デタストアが適切か確認します。