主要内容

深入学习的数据购物

Matlab的数据购物®是一种方便的方式,使用和代表一个太大而无法在一次内存中适应内存的数据的集合。由于深度学习往往需要大量数据,因此数据存储是Matlab中深入学习工作流程的重要组成部分。

选择数据存储

对于许多应用程序,最简单的方法是从内置数据存储开始。有关可用内置数据存储的详细信息,请参阅选择文件格式或应用程序的数据存储。但是,只有某些类型的内置数据存储可以直接用作网络培训,验证和推理的输入。这些数据存储是:

数据存储 描述 需要其他工具箱
imageageAtastore. 图像数据的数据存储 没有任何
AugmentedimageGedataStore.

用于调整和增强培训图像的数据存储

数据存储是非确定性的

没有任何
PixellabeldAtastore.(电脑视觉工具箱)

像素标签数据的数据存储

计算机Vision Toolbox™

PixellabelimagedAtastore.(电脑视觉工具箱)

用于训练语义分割网络的数据存储

数据存储是非确定性的

电脑视觉工具箱

boxlabeldatastore.(电脑视觉工具箱)

用于边界框标记数据的数据存储

电脑视觉工具箱

RandompatchExtractionDatastore.(图像处理工具箱)

用于从基于图像的数据中提取随机补丁的数据存储

数据存储是非确定性的

图像处理工具箱™

bigimagedatastore.(图像处理工具箱) 数据存储来管理不适合内存的单个大图像块 图像处理工具箱
denoisingimageageataTastore.(图像处理工具箱)

数据存储训练了一个越来越深神经网络的图像

数据存储是非确定性的

图像处理工具箱

其他内置数据存储可以用作深度学习的输入,但必须将这些数据存储读取的数据必须预处理深度学习网络所需的格式。有关读取数据所需格式的更多信息,请参阅用于培训,验证和推理的输入数据存储。有关如何预处理数据存储的更多信息,请参阅转换并组合数据存储

对于某些应用程序,可能没有符合您数据的内置数据存储类型。对于这些问题,您可以创建自定义数据存储。有关更多信息,请参阅开发自定义数据存储。所有自定义数据存储都是深度学习接口的有效输入,只要自定义数据存储的功能以所需的形式返回数据。

用于培训,验证和推理的输入数据存储

数据存储是深度学习工具箱™的有效输入,用于培训,验证和推理。

培训和验证

要将图像数据存储源作为培训数据来源,请使用IMDS.争论Trainnetwork.。要将所有其他类型的数据存储作为培训数据来源,请使用DS.争论Trainnetwork.。要使用数据存储验证,请使用'验证数据'名称 - 值对参数培训选项

是培训或验证的有效输入,数据存储的函数必须将数据返回为单元格数组或表格(除了imageageAtastore.可以输出数字阵列和必须输出表的自定义迷你批量数据存储的对象)。

对于具有单个输入的网络,数据存储返回的表或单元数组必须具有两列。第一列数据表示对网络的输入,第二列数据代表响应。每行数据代表一个单独的观察。为了imageageAtastore.只要,Trainnetwork.培训选项金宝app支持数据返回为整数阵列和整数阵列的单列单元格数组。

要使用具有多个输入图层的网络的数据存储,请使用结合转换函数创建输出单元数组的数据存储(numinputs.+ 1)列,在哪里numinputs.是网络输入的数量。在这种情况下,第一个numinputs.列为每个输入指定预测器,最后一列指定响应。输入的顺序由输入名称层图的属性层数

下表显示了调用的示例输出数据存储函数DS.

网络架构 数据存储输出 示例输出
单个输入层

具有两列的表或单元格数组。

第一列和第二列分别指定预测器和响应。

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

自定义迷你批处理数据存储必须输出表。

数据=读取(DS)
数据= 4×2表预测响应__________________ ________ {224×224×3 double} 2 {224×224×3双} 7 {224×224×3双} 9 {224×224×3双} 9
数据=读取(DS)
数据= 4×2单元阵列{224×224×3双} {[2]} {224×224×3双} {[7]} {224×224×3双} {[9]} {224×224×3双} {[9]}
多个输入层

细胞阵列与(numinputs.+ 1)列,在哪里numinputs.是网络输入的数量。

首先numinputs.列为每个输入指定预测器,最后一列指定响应。

输入的顺序由输入名称层图的属性层数

数据=读取(DS)
数据= 4×3单元阵列{224×224×3双} {128×128×3双} {[2]} {224×224×3双} {128×128×3双} {[2]} {224×224×3双} {128×128×3双} {[9]} {224×224×3双} {128×128×3双} {[9]}

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

数据 预测器的格式
2-D图像

H-经过-W.-经过-C数字数组,其中HW., 和C是图像的高度,宽度和数量。

3-D图像

H-经过-W.-经过-D.-经过-C数字数组,其中HW.D., 和C是图像的高度,宽度,深度和图像的通道数。

矢量序列

C-经过-S.矩阵,其中C是序列的特征数量S.是序列长度。

2-D图像序列

H-经过-W.-经过-C-经过-S.阵列,其中HW., 和C对应于图像的高度,宽度和数量,并且S.是序列长度。

迷你批处理中的每个序列必须具有相同的序列长度。

3-D图像序列

H-经过-W.-经过-D.-经过-C-经过-S.阵列,其中HW.D., 和C对应于图像的高度,宽度,深度和数量的图像,以及S.是序列长度。

迷你批处理中的每个序列必须具有相同的序列长度。

特征

C-1栏载体,在哪里C是功能的数量。

对于在表中返回的预测器,元素必须包含数字标量,数字行向量或包含数字阵列的1×1个单元格数组。

Trainnetwork.功能不支持具有多个序列输入图层的网络金宝app。

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

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

  • 标量子

  • 数字矢量

  • 表示图像的3-D数字数组

序列到序列分类

1-by-S.分类标签序列,在哪里S.是相应的预测器序列的序列长度。

序列到序列回归

R.-经过-S.矩阵,其中R.是响应的数量和S.是相应的预测器序列的序列长度。

对于在表中返回的响应,元素必须是分类标量,数字标量,数字行,数字行向量或包含数字数组的1×1个单元格数组。

预言

出推使用预测分类, 和激活,只需要一个数据存储来产生与预测器对应的列。推理功能使用第一个numinputs.列并忽略后续的图层,在哪里numinputs.是网络输入图层的数量。

指定读取大小和迷你批量大小

数据存储可能会返回每个呼叫的任何行数(观察)。函数如Trainnetwork.预测分类, 和激活接受数据存储和支持指定金宝app'minibatchsize'称呼适用于形成完整的迷你批次的数据所必需的时间。由于这些功能表单批量批处理,它们在内存中使用内部队列来存储读取数据。例如,如果数据存储始终返回每次调用64行小匹匹匹匹配128.,然后形成每个迷你批次数据需要两个呼叫

有关最佳运行时性能,建议配置数据存储,以便返回的观察数等于'minibatchsize'。对于具有的数据存储'阅读'财产,设置'阅读'要更改数据存储返回的观测数量,每个呼叫

转换并组合数据存储

深度学习经常要求将数据预处理和增强在数据以适当的表单中输入到网络之前。这转换结合数据存储的函数对于准备要进入网络的数据很有用。

要使用具有多个输入图层的网络的数据存储,请使用结合转换函数创建输出单元数组的数据存储(numinputs.+ 1)列,在哪里numinputs.是网络输入的数量。在这种情况下,第一个numinputs.列为每个输入指定预测器,最后一列指定响应。输入的顺序由输入名称层图的属性层数

转换数据存储

转换后的数据存储在读取数据时将特定数据转换应用于底层数据存储。要创建转换的数据存储,请使用转换函数并指定底层数据存储和转换。

  • 对于涉及若干预处理操作的复杂转换,请在您自己的函数中定义完整的转换集。然后,将句柄指定为您的函数@fcn.争论转换。有关更多信息,请参阅在文件中创建函数

  • 对于可以在一行代码中表达的简单转换,您可以将句柄指定为匿名函数@fcn.争论转换。有关更多信息,请参阅匿名功能

提供的功能手柄提供给转换必须以与返回的相同格式接受输入数据底层数据存储的功能。

示例:将图像数据存储转换为培训数字分类网络

这个例子使用了转换创建一个训练集的功能,其中随机90度旋转被添加到图像数据存储区内的每个图像。通过结果变换adatastore.Trainnetwork.培训一个简单的数字分类网络。

创建包含数字图像的图像数据存储。

digitdatasetpath = fullfile(matlabroot,'工具箱''nnet'......'nndemos''nndatasets''digitdataset');imds2 = imageageataStore(DigitDataSetPath,......'insertumbfolders',错误的,......'labelsource''foldernames');

将迷你批量尺寸设置为等于阅读图像数据存储。

minibatchsize = 128;imds.readsize = minibatchsize;

通过添加随机90度旋转来在图像数据存储中转换图像。转换功能,预处理性景观,在该示例的末尾定义。

dstrain =变换(IMDS,@预处理,'inclordinfo',真的)
dstrain = transformeddataStore的属性:底层atakastore:[1×1 matlab.io.datastore.imagedataStore]变换:{@preprocessfortring} includeinfo:1

指定网络和培训选项的图层,然后使用转换的数据存储训练网络Dstrain.作为数据来源。

图层= [imageInputLayer([28 28 1],'正常化''没有任何')卷积2dlayer(5,20)rululayer maxpooling2dlayer(2,'走吧',2)全康统计(10);softmaxlayer分类层];选项=培训选项('亚当'......'plots''培训 - 进步'......'minibatchsize',小匹匹匹匹配);net = trainnetwork(dstrain,图层,选项);

定义执行数据的所需变换的函数,数据,从底层数据存储读取。函数循环通过每个读取图像循环并执行随机旋转,然后按照预期的方式将变换的图像和相应的标签返回为单元阵列Trainnetwork.

功能[Dataout,Info] =预处理令(数据,信息)NumRows =大小(数据,1);dataout = cell(numrows,2);为了Idx = 1:numrows%随机90度旋转imgout = rot90(数据{idx,1},randi(4)-1);%将标签从Info Struct返回为数据排序中的%第二列。dataout(idx,:) = {Imgout,Info.Label(IDX)};结尾结尾

结合数据存储

结合函数关联多个数据存储。在得到的结果上运作ConventDatastore.(例如重置数据存储)对所有底层数据存储执行相同的操作。打电话给组合数据存储的函数从所有的所有内容读取一批数据N.底层数据存储,必须返回相同数量的观察。从组合数据存储读取返回水平连接的结果N.-Column单元阵列,适用于培训和验证。随着底层数据存储中的文件的相同随机排序,Shuffling Synaffling将导致相同的随机排序。

例如,如果您正在训练图像到图像回归网络,则可以通过组合两个图像数据存储来创建培训数据集。此示例代码演示了组合名为的两个图像数据存储IMDSX.IMDSY.。组合数据存储Imdstrain.将数据返回为双列单元格数组。

imdsx = imagedataStore(___);IMDSY = IMAGEDATASTORE(___);IMDStrain =组合(IMDSX,IMDSY)
IMDStrain =具有属性的组合日常运输:底层通用股指数:{1×2 Cell}

如果您有图像处理工具箱,那么RandompatchExtractionDatastore.(图像处理工具箱)提供备用解决方案,以将基于图像的数据相关联imageageAtastore.S,PixellabeldAtastore.变换adatastore.s。一种RandompatchExtractionDatastore.与使用该数据相关联的几个优点结合功能。具体来说,一个随机补丁提取数据存储:

  • 提供一种简单的方法,可以从2-D和3-D数据中提取补丁,而无需您使用自定义裁剪操作转换结合

  • 提供每次映像生成多个修补程序的简单方法,而无需您使用定义自定义串联操作转换

  • 金宝app在将图像转换应用于分类数据时,支持分类和数字数据之间有效转换

  • 金宝app支持并行培训

  • 通过缓存图像来提高性能

使用数据存储进行并行培训和背景调度

用于并行培训或多GPU培训的数据存储必须是分区的。要确定数据存储是分区的,请使用该功能是可分派的。使用该方法指定并行或多GPU培训'execultenvironment.'名称 - 值对参数培训选项。并行或使用单个或多个GPU的培训需要并行计算工具箱™。

许多内置数据存储已经分配,​​因为它们支持金宝app划分功能。使用转换结合具有内置数据存储的功能经常维护对并行和多GPU培训的支持。金宝app

如果需要创建支持并行或多GPU培训的自定义数据存储,则您的数据存储必须实现金宝appmatlab.io.datastore.partitionable.班级。

分区数据存储支持使用背景调度读取培训数据。金宝app背景在GPU工作时调度队列中的内存中的数据。使用备份指定要调度的背景调度'DisparctinBackground.'名称 - 值对参数培训选项。后台调度需要并行计算工具箱。

在并行培训时,数据存储不支持指定金宝app'洗牌'名称 - 值对参数培训选项作为'没有任何'

也可以看看

||||

相关例子

更多关于