主要内容

matlab.io.datastore.MiniBatchable类

包裹:matlab.io.datastore

向数据存储添加小批量支持万博1manbetx

描述

matlab.io.datastore.MiniBatchable是一个抽象的mixin类,它向自定义数据存储中添加了对小批量的支持,以便与万博1manbetx深度学习工具箱一起使用™. 小批量数据存储包含用于深度学习工具箱培训、预测和分类的培训和测试数据集。

要使用此mixin类,必须从matlab.io.datastore.MiniBatchable类除了继承matlab.io.Datastore基类。在类定义文件的第一行输入以下语法:

classdefMyDatastore
            

要向数据存储添万博1manbetx加对小批量的支持,请执行以下操作:

  • 从额外的类继承matlab.io.datastore.MiniBatchable

  • 定义两个附加属性:MiniBatchSizeNumObservations

有关创建自定义迷你批处理数据存储以在培训、预测和分类期间优化性能的详细信息和步骤,请参见开发自定义小批量数据存储

属性

全部展开

每批中返回的观察数,或阅读函数。用于训练、预测和分类MiniBatchSize属性设置为中定义的迷你批处理大小培训选项

属性:

摘要 符合事实的
访问 平民的

数据存储中包含的观察总数。这个观察次数是一个训练时期的长度。

属性:

摘要 符合事实的
设置访问 受保护的
读访问 平民的

属性

摘要 符合事实的
密封的

有关类属性的信息,请参见类属性

复制语义

句柄。要了解句柄类如何影响复制操作,请参见复制对象

例子

全部折叠

这个例子展示了如何通过转换和组合数据存储来训练关于内存外序列数据的深度学习网络。

转换后的数据存储转换或处理从基础数据存储读取的数据。您可以使用转换后的数据存储作为深度学习应用程序的培训、验证、测试和预测数据集的来源。使用转换后的数据存储读取内存不足的数据,或在读取批量数据时执行特定的预处理操作。当您拥有包含预测值和标签的单独数据存储时,您可以将它们组合起来,以便将数据输入到深度学习网络中。

在训练网络时,软件通过填充、截断或分割输入数据来创建相同长度的小批量序列。对于内存中的数据培训选项函数提供了填充和截断输入序列的选项,但是,对于内存不足的数据,必须手动填充和截断序列。

负荷训练数据

按照[1]和[2]中所述加载日语元音数据集。zip文件日本包含不同长度的序列。序列分为两个文件夹,火车测验,分别包含训练序列和测试序列。在每个文件夹中,序列被划分为子文件夹,这些子文件夹从编号开始1.9。这些子文件夹的名称是标签名称。MAT文件表示每个序列。每个序列是一个矩阵,有12行,每个要素一行,不同数量的列,每个时间步一列。行数是序列维度,列数是序列长度。

解压缩序列数据。

文件名=“japaneseVowels.zip”; outputFolder=fullfile(tempdir,“日本世界”);解压缩(文件名、输出文件夹);

对于训练预测器,创建一个文件数据存储并指定read函数为负载函数。这个负载函数,将MAT文件中的数据加载到结构数组中。若要从training文件夹的子文件夹中读取文件,请设置“包含子文件夹”选择符合事实的

folderTrain = fullfile (outputFolder,“训练”); fdspredictorrain=文件数据存储(folderTrain,...“ReadFcn”,@load,...“包含子文件夹”,真正的);

预览数据存储。返回的结构包含来自第一个文件的单个序列。

预览(fdsPredictorTrain)
ans =结构体字段:X(12×20双):

对于标签,创建一个文件数据存储并指定read函数为可读标签函数,在示例的最后定义。这个可读标签函数从子文件夹名称中提取标签。

一会=字符串(1:9);fdsLabelTrain = fileDatastore (folderTrain,...“ReadFcn”@(文件名)readLabel(文件名,类名),...“包含子文件夹”,真正的);

预览数据存储。输出对应于第一个文件的标签。

预览(fdsLabelTrain)
ans =分类1.

转换和组合数据存储

为了将序列数据从预测器的数据存储中输入到深度学习网络中,序列的小批量必须具有相同的长度。属性转换数据存储焊盘序列函数,该函数定义在数据存储的末尾,用于填充或截断序列,使其长度为20。

sequenceLength=20;TDSTREAN=变换(fdsPredictorTrain,@(数据)焊盘序列(数据,序列长度));

预览转换后的数据存储。输出对应于第一个文件中的填充序列。

X=预览(TDR)
X=1×1单元阵列{12×20双}

要将来自两个数据存储的预测器和标签都输入到深度学习网络中,可以使用结合函数。

cdsTrain =结合(tdsTrain fdsLabelTrain);

预览组合数据存储。数据存储返回1×2单元格数组。第一个元素对应于预测器。第二个元素对应于标签。

预览(CDS)
ans =1×2单元阵列{12×20双}{[1]}

定义LSTM网络体系结构

定义LSTM网络架构。指定输入数据的特征数量作为输入大小。指定一个包含100个隐藏单元的LSTM层,并输出序列的最后一个元素。最后,指定输出大小等于类数的全连接层,然后是softmax层和分类层。

numFeatures=12;numClasses=numel(类名);numhidden单位=100;层=[...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,“OutputMode”,“最后”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer;

指定训练选项。将解算器设置为“亚当”“GradientThreshold”到2。将最小批量大小设置为27,并将最大历元数设置为75。数据存储不支持洗牌,所以设置万博1manbetx“洗牌”“从来没有”

因为迷你批很小,序列很短,所以CPU更适合于训练。集“执行环境”“cpu”.如果需要在GPU上进行训练,请设置“执行环境”“自动”(默认值)。

miniBatchSize = 27个;选择= trainingOptions (“亚当”,...“执行环境”,“cpu”,...“MaxEpochs”, 75,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”,2,...“洗牌”,“从来没有”,...“详细”0,...“情节”,“培训进度”);

使用指定的培训选项培训LSTM网络。

网= trainNetwork (cdsTrain层,选项);

测试网络

使用与训练数据相同的步骤,创建包含保留测试数据的转换数据存储。

folderTest = fullfile (outputFolder,“测试”);fdsPredictorTest = fileDatastore (folderTest,...“ReadFcn”,@load,...“包含子文件夹”,对);tdsTest=转换(fdsPredictorTest,@(数据)焊盘序列(数据,序列长度));

使用经过训练的网络对测试数据进行预测。

YPred=分类(净、TDST、,“MiniBatchSize”, miniBatchSize);

根据测试数据计算分类精度。要获取测试集的标签,请使用read函数创建一个文件数据存储可读标签并指定包含子文件夹。属性,指定输出是垂直连接的“UniformRead”选择符合事实的

fdsLabelTest=文件数据存储(folderTest,...“ReadFcn”@(文件名)readLabel(文件名,类名),...“包含子文件夹”符合事实的...“UniformRead”,真正的);欧美= readall (fdsLabelTest);
精度=平均值(YPred==YTest)
精度= 0.9351

功能

这个可读标签函数从指定的文件名上的类别中提取标签一会

作用label=readLabel(文件名、类名)filepath=fileparts(文件名);[~,label]=fileparts(filepath);标签=分类(字符串(标签),类名);结束

这个焊盘序列函数填充或截断中的序列数据。X具有指定的序列长度,并在一个1乘1单元格中返回结果。

作用sequence=padSequence(数据,sequenceLength)sequence=data.X;[C,S]=大小(顺序);如果S其他的序列=序列(:,1:sequenceLength);结束序列={sequence};结束

兼容性考虑

全部展开

不建议从R2019a开始

工具书类

[1] 使用通过区域的多维曲线分类模式识别的字母.第20卷,第11-13期,第1103-1111页。

工藤,富山,新博。日语元音数据集. https://archive.ics.uci.edu/ml/datasets/Japanese+元音

R2018a中引入