主要内容

开发自定义Mini-Batch数据存储

一个mini-batch数据存储是一个数据存储的实现支持批量读取数据。金宝app您可以使用一个mini-batch数据存储的培训、验证、测试和预测数据集深学习使用深度学习工具箱™的应用程序。

时间序列,对序列进行预处理或文本数据,构建自己的mini-batch数据存储使用这里描述的框架。为一个例子,演示如何使用自定义mini-batch数据存储,明白了列车网络的使用自定义Mini-Batch序列数据的数据存储

概述

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

定制mini-batch数据存储的设计涉及到继承的matlab.io.Datastorematlab.io.datastore.MiniBatchable类,并实现所需的属性和方法。你还可以添加支持培训期间洗牌。金宝app

处理需求

Mini-batch培训数据存储、验证、测试和预测数据集在深学习工具箱

matlab.io.Datastorematlab.io.datastore.MiniBatchable

看到实现MiniBatchable数据存储

培训期间Mini-batch数据存储支持洗牌金宝app

matlab.io.Datastore,matlab.io.datastore.MiniBatchable,matlab.io.datastore.Shuffleable

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

实现MiniBatchable数据存储

实现一个自定义mini-batch数据存储MyDatastore,创建一个脚本MyDatastore.m。该脚本必须在MATLAB路径和应包含的代码继承自适当的类,并定义了所需的方法。的代码创建一个mini-batch数据存储的培训、验证、测试、和预测数据集在深学习工具箱必须:

除了这些步骤,您可以定义其他属性或方法,你需要处理和分析你的数据。

请注意

如果你是网络和训练trainingOptions指定“洗牌”作为“一次”“every-epoch”,那你还必须继承matlab.io.datastore.Shuffleable类。有关更多信息,请参见添加对洗金宝app牌的支持

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

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

提示

使用一个数据存储与多个网络输入层,使用结合变换函数来创建一个输出的数据存储单元阵列(numInputs+ 1)列,numInputs是网络输入的数量。在这种情况下,第一个numInputs列指定每个输入的预测和最后一列指定响应。输入的顺序的InputNames层的属性图

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

数据 格式的预测
二维图像

h——- - - - - -w——- - - - - -c数字数组,h,w,c高度,宽度,分别和通道图像的数量。

三维图像

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

向量序列

c——- - - - - -年代矩阵,c序列的特性和吗年代是序列长度。

一维图像序列

h——- - - - - -c——- - - - - -年代数组,hc对应于图像的高度和数量的渠道,分别年代是序列长度。

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

二维图像序列

h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c对应的高度、宽度和通道图像的数量,分别年代是序列长度。

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

三维图像序列

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代数组,h,w,d,c对应的高度、宽度、深度和通道图像的数量,分别年代是序列长度。

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

特性

c1列向量,c的数量特征。

表元素必须包含一个数字标量,数字行向量或1×1单元阵列包含一个数字数组。

trainNetwork函数不支持与多个序列网络输入层。金宝app

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

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

  • 标量

  • 数值向量

  • 三维数值数组代表一个图像

Sequence-to-sequence分类

1 -年代序列的分类标签,年代是相应的预测序列的序列长度。

Sequence-to-sequence回归

R——- - - - - -年代矩阵,R反应的数量和吗年代是相应的预测序列的序列长度。

表元素必须包含一个绝对标量,数字标量,数字行向量或1×1单元阵列包含一个数字数组。

这个例子展示了如何创建一个自定义mini-batch处理序列数据的数据存储。保存一个文件中的脚本调用MySequenceDatastore.m

步骤 实现

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

  2. 定义属性。

    • 重新定义MiniBatchSizeNumObservations属性。你可以选择可以附加的财产属性分配给属性。有关更多信息,请参见属性的属性

    • 您还可以定义属性定制mini-batch独有的数据存储。

  3. 定义方法。

    • 实现自定义mini-batch数据存储的构造函数。

    • 实现hasdata方法。

    • 实现方法,它必须返回数据表的第一列和响应预测第二列。

      序列数据的序列必须矩阵的大小c——- - - - - -年代,在那里c的特性和数量吗年代是序列长度。的价值年代mini-batches之间各不相同。

    • 实现重置方法。

    • 实现进步方法。

    • 您还可以定义定制mini-batch独有的数据存储方法。

  4. 结束classdef部分。

classdefMySequenceDatastore < matlab.io。数据存储和matlab.io.datastore.MiniBatchable属性数据存储标签NumClasses SequenceDimension MiniBatchSize结束属性NumObservations (SetAccess =保护)结束属性(访问=私人)从数据存储%这个属性是遗传的CurrentFileIndex结束方法函数ds = MySequenceDatastore(文件夹)%建立MySequenceDatastore对象%创建一个数据存储的文件。readSequence函数%定义在类定义。fds = fileDatastore(文件夹,“ReadFcn”@readSequence,“IncludeSubfolders”,真正的);ds。数据存储= fds;%从文件夹中读取标签的名字numObservations =元素个数(fds.Files);i = 1: numObservations文件= fds.Files {};filepath = fileparts(文件);[~,标签]= fileparts (filepath);标签{我1}=标签;结束ds。=分类标签(标签);ds。NumClasses =元素个数(独特(标签);%确定序列维度。当你定义LSTM%网络体系结构,您可以使用这个属性% sequenceInputLayer指定输入大小。X =预览(fds);ds。SequenceDimension =大小(X, 1);%初始化数据存储属性。ds。MiniBatchSize = 128;ds。NumObservations = NumObservations;ds。CurrentFileIndex = 1;结束函数tf = hasdata (ds)%返回true,如果更多的数据是可用的tf = ds。CurrentFileIndex + ds。MiniBatchSize - 1< = ds.NumObservations;结束函数(数据、信息)=阅读(ds)%读一mini-batch批数据miniBatchSize = ds.MiniBatchSize;信息=结构;i = 1: miniBatchSize预测{我1}=阅读(ds.Datastore);反应(1)我= ds.Labels (ds.CurrentFileIndex);ds。CurrentFileIndex = ds。CurrentFileIndex + 1;结束data = preprocessData (ds,预测反应);结束函数data = preprocessData (ds,预测反应)% = preprocessData数据预处理(ds,预测反应)%的数据预测和响应并返回表%的数据miniBatchSize = ds.MiniBatchSize;%垫数据长度最长序列。sequenceLengths = cellfun (@ (X)大小(X, 2),预测);maxSequenceLength = max (sequenceLengths);i = 1: miniBatchSize X =预测{};%用0填充序列。如果大小(X, 2) < maxSequenceLength X (:, maxSequenceLength) = 0;结束我预测{}= X;结束%返回数据表。data =表(预测、反应);结束函数重置(ds)%开始重置数据重置(ds.Datastore);ds。CurrentFileIndex = 1;结束结束方法(隐藏= true)函数压裂=进步(ds)%的比例确定数据读取数据存储压裂= (ds。CurrentFileIndex - 1) / ds.NumObservations;结束结束结束%结束类定义
读您的自定义数据存储方法的实现使用一个函数调用readSequence。您必须创建这个函数从MAT-file读取序列数据。
函数data = readSequence(文件名)% data = readSequence(文件名)读取序列X MAT-file%文件名S =负载(文件名);数据= S.X;结束

添加对洗金宝app牌的支持

要添加对洗牌的金宝app支持,首先按照说明实现MiniBatchable数据存储然后更新您的实现代码MySequenceDatastore.m:

这个示例代码添加洗牌支持金宝appMySequenceDatastore类。垂直椭圆表明你应该复制代码的地方MySequenceDatastore实现。

步骤 实现

  1. 更新也继承的类定义matlab.io.datastore.Shuffleable类。

  2. 添加的定义洗牌对现有方法部分。

classdefMySequenceDatastore < matlab.io。数据存储和matlab.io.datastore.MiniBatchable&matlab.io.datastore.Shuffleable%之前定义的属性方法%之前定义的方法函数dsNew = shuffle (ds)% dsNew = (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);结束结束结束

验证自定义Mini-Batch数据存储

如果你跟随本文提供的指令,然后定制mini-batch数据存储的实现完成。之前使用这个数据存储,使用提出的指导方针测试指南自定义数据存储

另请参阅

相关的例子

更多关于