主要内容

开发自定义小批量数据存储

一个mini-batch数据存储是数据存储的实现,支持批量读取数据。您可以使用小批量数据存储作为使用深度学习工具箱万博1manbetx的深度学习应用程序的培训、验证、测试和预测数据集的来源™.

要对序列、时间序列或文本数据进行预处理,可以使用本文描述的框架构建自己的迷你批处理数据存储。有关如何使用自定义迷你批处理数据存储的示例,请参见使用序列数据自定义小批量数据存储的列车网络

概述

使用自定义数据存储类和对象构建自定义数据存储接口。然后,使用自定义数据存储将数据带入MATLAB®

设计您的自定义小批处理数据存储涉及从matlab.io.Datastorematlab.io.datastore.MiniBatchable类,并实现所需的属性和方法。您可以选择在训练期间添加对洗牌的支持。万博1manbetx

处理需求

用于深度学习工具箱中的培训、验证、测试和预测数据集的小批量数据存储

matlab.io.Datastorematlab.io.datastore.MiniBatchable

看到实现MiniBatchable数据存储

支持训练期间洗牌的迷你批量数据存储万博1manbetx

matlab.io.Datastorematlab.io.datastore.MiniBatchable,matlab.io.datastore.shufflable

看到添加对洗万博1manbetx牌的支持

实现MiniBatchable数据存储

实现一个自定义的迷你批处理数据存储我的数据存储,创建一个脚本MyDatastore.m.该脚本必须在MATLAB路径上,并且应该包含从适当的类继承的代码,并定义所需的方法。在深度学习工具箱中创建用于训练、验证、测试和预测数据集的小批数据存储的代码必须:

除了这些步骤之外,您还可以定义处理和分析数据所需的任何其他属性或方法。

请注意

如果您正在培训网络和trainingOptions指定“洗牌”作为“一次”“every-epoch”,那么你也必须继承matlab.io.datastore.shufflable类。有关更多信息,请参见添加对洗万博1manbetx牌的支持

数据存储读函数必须返回表中的数据。表元素必须是标量、行向量或包含数字数组的1 × 1单元格数组。

对于只有一个输入层的网络,第一列和第二列分别指定预测器和响应。

提示

要为具有多个输入层的网络使用数据存储,请使用结合变换函数创建数据存储,输出单元格数组(努明普茨+1)列,其中努明普茨是网络输入的数量。在本例中,第一个努明普茨列指定每个输入的预测器,最后一列指定响应。输入的顺序由输入名称层图的性质

预测值的格式取决于数据的类型。

数据 预测值格式
二维图像

h-借-w-借-c数字数组,hw,c分别是图像的高度、宽度和通道数。

三维图像

h-借-w-借-d-借-c数字数组,hwd,c分别为图像的高度、宽度、深度和通道数量。

向量序列

c-借-年代矩阵,c数列的特征数是和吗年代为序列长度。

二维图像序列

h-借-w-借-c-借-年代数组,hw,c分别对应于图像的高度、宽度和通道数,以及年代为序列长度。

mini-batch中的每个序列必须具有相同的序列长度。

三维图像序列

h-借-w-借-d-借-c-借-年代数组,hwd,c分别对应于图像的高度、宽度、深度和通道数,以及年代为序列长度。

mini-batch中的每个序列必须具有相同的序列长度。

特性

c-by-1列向量,其中c是特征的数量。

表元素必须包含数字标量、数字行向量或包含数字数组的1 × 1单元格数组。

列车网络函数不支持具有多个序列输入层的网络。万博1manbetx

响应的格式取决于任务的类型。

任务 格式的响应
分类 绝对标量
回归

  • 标量

  • 数值向量

  • 表示图像的三维数字数组

Sequence-to-sequence分类

1 -年代类别标签的序列,其中年代为相应预测序列的序列长度。

Sequence-to-sequence回归

R-借-年代矩阵,R是响应和响应的数量年代为相应预测序列的序列长度。

表元素必须包含分类标量、数值标量、数值行向量或包含数值数组的1乘1单元格数组。

这个例子展示了如何创建一个自定义的迷你批处理数据存储来处理序列数据。将脚本保存到一个名为MySequenceDatastore.m

步骤 实施

  1. 开始定义类。从基类继承matlab.io.Datastorematlab.io.datastore.MiniBatchable类。

  2. 定义属性。

    • 重新定义小批量NumObservations属性。您可以选择为任意一个属性指定其他属性属性。有关更多信息,请参见属性属性

    • 您还可以定义自定义迷你批处理数据存储特有的属性。

  3. 定义方法。

    • 实现自定义的小批量数据存储构造函数。

    • 实现hasdata方法。

    • 实现方法,该方法必须以表的形式返回数据,其中预测器在第一列,响应在第二列。

      对于序列数据,序列必须是大小相同的矩阵c-借-年代哪里c是功能和功能的数量年代是序列长度。的价值年代可以在小批量之间变化。

    • 实现重置方法。

    • 实现进步方法。

    • 您还可以为您的自定义迷你批处理数据存储定义独特的方法。

  4. 结束classdef节。

classdefMySequenceDatastore...matlab.io.datastore.MiniBatchable属性数据存储标签NumClasses SequenceDimension MiniBatchSize结束属性(SetAccess = protected结束属性(访问=私人)%此属性是从数据存储继承的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(文件);[~,标签]= fileparts (filepath);标签{我1}=标签;结束ds.Labels=categorical(Labels);ds.numclass=numel(unique(Labels));%确定序列尺寸。当您定义LSTM时%网络架构,您可以使用此属性来%指定sequenceInputLayer的输入大小。X =预览(fds);ds。SequenceDimension =大小(X, 1);%初始化数据存储属性。ds.MiniBatchSize=128;ds.NumObservations=NumObservations;ds.CurrentFileIndex=1;结束功能tf = hasdata (ds)%如果有更多可用数据则返回truetf = ds。CurrentFileIndex + ds。MiniBatchSize - 1...< = ds.NumObservations;结束功能[数据,信息]=读取(ds)读取一个小批量的数据miniBatchSize = ds.MiniBatchSize;信息=结构;i=1:miniBatchSize预测器{i,1}=read(ds.Datastore);响应(i,1)=ds.Labels(ds.CurrentFileIndex);ds.CurrentFileIndex=ds.CurrentFileIndex+1;结束数据=预处理数据(ds、预测值、响应);结束功能data = preprocessData (ds,预测反应)% data = preprocessData(ds, predicate,responses)预处理%预测值和响应中的数据并返回表%的数据miniBatchSize = ds.MiniBatchSize;将数据填充到最长序列的长度。SequenceLength=cellfun(@(X)大小(X,2),预测因子);maxSequenceLength=最大(SequenceLength);i=1:miniBatchSize X=预测器{i};%填充序列与零。如果大小(X,2)结束预测器{i}=X;结束%以表的形式返回数据。数据=表格(预测值、响应);结束功能重置(ds)%重置到数据的开始重置(ds.Datastore);ds。CurrentFileIndex = 1;结束结束方法(隐藏=真)功能压裂=进度(ds)%确定从数据存储读取数据的百分比压裂= (ds。CurrentFileIndex - 1) / ds.NumObservations;结束结束结束%端类定义
自定义数据存储的read方法的实现使用一个名为读序列.必须创建这个函数才能从mat文件中读取序列数据。
功能数据=读取顺序(文件名)% data = readSequence(filename)从mat文件中读取序列X%文件名S =负载(文件名);数据= S.X;结束

添加对洗万博1manbetx牌的支持

要添加对洗牌的万博1manbetx支持,首先按照说明实现MiniBatchable数据存储然后更新你的实现代码MySequenceDatastore.m致:

此示例代码向万博1manbetxMySequenceDatastore班级。竖直的省略号表示应该从中复制代码的位置MySequenceDatastore实现。

步骤 实施

  1. 更新类定义,使之也继承matlab.io.datastore.shufflable类。

  2. 为以下内容添加定义洗牌对现有方法节。

classdefMySequenceDatastore...matlab.io.datastore.MiniBatchable &...matlab.io.datastore.shufflable%先前定义的属性. . .方法%先前定义的方法. . .功能dsNew = shuffle (ds)% dsNew = shuffle(ds)洗牌文件和%数据存储中相应的标签。%创建数据存储的副本dsNew = (ds)复印件;dsNew。数据年代tore = copy(ds.Datastore); fds = dsNew.Datastore;%洗牌文件和相应的标签numObservations = dsNew.NumObservations;idx = randperm (numObservations);fds。文件= fds.Files (idx);dsNew。标签= dsNew.Labels (idx);结束结束结束

验证自定义小批量数据存储

如果您已经按照此处提供的所有说明进行了操作,那么您的自定义小批量数据存储的实现就完成了。在使用此数据存储之前,请使用中提供的指南对其进行鉴定自定义数据存储的测试指南

另请参阅

相关的例子

更多关于