主要内容

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

A.小批量数据存储是数据存储的实现,支持批量读取数据。您可以使用小批量数据存储作为使用深度学习工具箱金宝app的深度学习应用程序的培训、验证、测试和预测数据集的来源™.

要预处理序列、时间序列或文本数据,请使用此处描述的框架构建您自己的小批量数据存储。有关如何使用自定义小批量数据存储的示例,请参阅使用序列数据自定义小批量数据存储的列车网络.

概述

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

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

处理需求

班级

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

matlab.io.Datastorematlab.io.datastore.MiniBatchable

看见实现小型可批处理数据存储.

支持训练期间洗牌的迷你批量数据存储金宝app

matlab.io.Datastore,matlab.io.datastore.MiniBatchablematlab.io.datastore.shufflable

看见添加对洗金宝app牌的支持.

使生效小批量数据存储

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

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

笔记

如果您正在培训网络和培训选项指定“洗牌”“一次”“每个时代”,则您还必须从matlab.io.datastore.shufflable类。有关更多信息,请参阅添加对洗金宝app牌的支持.

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

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

提示

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

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

数据 预测值格式
二维图像

H-借-W-借-C数字数组,其中H,WC分别是图像的高度、宽度和通道数。

三维图像

H-借-W-借-D-借-C数字数组,其中H,W,DC分别是图像的高度、宽度、深度和通道数。

向量序列

C-借-s矩阵,在哪里C是序列的特征数,并且s是序列长度。

一维图像序列

H-借-C-借-s数组,在哪里HC分别对应于图像的高度和通道数,以及s是序列长度。

小批量中的每个序列必须具有相同的序列长度。

二维图像序列

H-借-W-借-C-借-s数组,在哪里H,WC分别对应于图像的高度、宽度和通道数,以及s是序列长度。

小批量中的每个序列必须具有相同的序列长度。

三维图像序列

H-借-W-借-D-借-C-借-s数组,在哪里H,W,DC分别对应于图像的高度、宽度、深度和通道数,以及s是序列长度。

小批量中的每个序列必须具有相同的序列长度。

特征

C-by-1列向量,其中C是功能的数量。

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

这个列车网络函数不支持具有多个序列输入层的网络。金宝app

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

任务 答复的格式
分类 范畴标量
回归

  • 标量

  • 数值向量

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

序列间分类

一乘-s分类标签序列,其中s是对应预测器序列的序列长度。

序列间回归

R-借-s矩阵,在哪里R是响应和响应的数量s是对应预测器序列的序列长度。

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

此示例演示如何创建用于处理序列数据的自定义小批量数据存储MySequenceDatastore.m.

台阶 实施

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

  2. 定义属性。

    • 重新定义小批量NumObservations财产。可以选择将其他特性属性指定给任一特性。有关详细信息,请参阅属性属性.

    • 您还可以定义自定义小批量数据存储的唯一属性。

  3. 定义方法。

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

    • 实施hasdata方法

    • 实施阅读方法,该方法必须以表的形式返回数据,预测值在第一列,响应在第二列。

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

    • 实施重置方法

    • 实施进步方法

    • 您还可以定义自定义小批量数据存储特有的方法。

  4. 结束classdef部分

classdefMySequenceDatastore...matlab.io.datastore.MiniBatchable性质数据存储标签NumClasses SequenceDimension MiniBatchSize终止性质(SetAccess=protected)NumObservations终止性质(访问=私人)%此属性是从数据存储继承的当前文件索引终止方法作用ds=MySequenceDatastore(文件夹)%构造MySequenceDatastore对象%创建文件数据存储。readSequence函数为%在类定义之后定义。fds=文件数据存储(文件夹,...“ReadFcn”,@readSequence,...“包含子文件夹”,对);ds.Datastore=fds;%从文件夹名称中读取标签numObservations=numel(fds.Files);对于i=1:numObservations file=fds.Files{i};filepath=fileparts(file);[~,label]=fileparts(filepath);labels{i,1}=label;终止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.numobervations;终止作用[数据,信息]=读取(ds)%读取一小批数据miniBatchSize=ds.miniBatchSize;info=struct;对于i=1:miniBatchSize预测器{i,1}=read(ds.Datastore);响应(i,1)=ds.Labels(ds.CurrentFileIndex);ds.CurrentFileIndex=ds.CurrentFileIndex+1;终止数据=预处理数据(ds、预测值、响应);终止作用数据=预处理数据(ds、预测值、响应)%数据=预处理数据(ds、预测值、响应)预处理%预测值和响应中的数据并返回表%资料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)%确定从数据存储中读取的数据百分比frac=(ds.CurrentFileIndex-1)/ds.NumObservations;终止终止终止%端类定义
自定义数据存储的read方法的实现使用一个名为读序列. 必须创建此函数才能从MAT文件读取序列数据。
作用数据=读取顺序(文件名)%data=readSequence(文件名)从MAT文件中读取序列X%文件名S=加载(文件名);数据=S.X;终止

添加对洗金宝app牌的支持

要添加对洗牌的金宝app支持,请首先按照中的说明进行操作实现小型可批处理数据存储然后在中更新您的实现代码MySequenceDatastore.m致:

此示例代码向金宝appMySequenceDatastore班竖直的省略号表示应该从中复制代码的位置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.Datastore=copy(ds.Datastore);fds=dsNew.Datastore;%洗牌文件和相应的标签numObservations=dsNew.numObservations;idx=randperm(numObservations);fds.Files=fds.Files(idx);dsNew.Labels=dsNew.Labels(idx);终止终止终止

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

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

另见

相关实例

更多关于