深度学习的数据存储
MATLAB中的数据存储®是一种方便的方法,可以与一系列数据集合在一起,这些数据集太大而无法一次适合内存。由于深度学习通常需要大量数据,因此数据存储是MATLAB深度学习工作流程的重要组成部分。
选择数据存储
对于许多应用程序,最简单的方法是从内置数据存储开始。有关可用内置数据存储的更多信息,请参见选择文件格式或应用程序的数据存储。但是,只有某些类型的内置数据存储可以直接用作网络培训,验证和推理的输入。这些数据存储是:
数据存储 | 描述 | 需要其他工具箱 |
---|---|---|
成像 |
图像数据的数据存储 | 没有任何 |
增生模构达塔斯塔尔 |
用于调整和增强培训图像大小的数据存储 数据存储是无确定性的 |
没有任何 |
Pixellabeldatastore (计算机视觉工具箱) |
像素标签数据的数据存储 |
计算机视觉工具箱™ |
Pixellabelimagedatastore (计算机视觉工具箱) |
用于培训语义分割网络的数据存储 数据存储是无确定性的 |
计算机视觉工具箱 |
BoxLabeldatastore (计算机视觉工具箱) |
用于边界框标签数据的数据存储 |
计算机视觉工具箱 |
RandompatchExtractionDatastore (图像处理工具箱) |
用于从基于图像的数据中提取随机补丁的数据存储 数据存储是无确定性的 |
图像处理工具箱™ |
封锁的绘制 (图像处理工具箱) |
用于模块读取和处理图像数据的数据存储,包括不适合内存的大图像 | 图像处理工具箱 |
DeNoisingImagedAtatastore (图像处理工具箱) |
数据存储以训练图像降低深神经网络 数据存储是无确定性的 |
图像处理工具箱 |
其他内置数据存储器可以用作深度学习的输入,但是必须将这些数据存储的数据预处理成深度学习网络要求的格式。有关读取数据所需格式的更多信息,请参见输入数据存储用于培训,验证和推理。有关如何从数据存储中读取的预处理数据的更多信息,请参见转换并组合数据存储。
对于某些应用程序,可能没有内置数据存储类型适合您的数据。对于这些问题,您可以创建一个自定义数据存储。有关更多信息,请参阅开发自定义数据存储。只要读
自定义数据存储的函数以所需形式返回数据。
输入数据存储用于培训,验证和推理
数据存储是深度学习工具箱中的有效输入,用于培训,验证和推理。
培训和验证
您可以使用图像数据存储或其他类型的数据存储作为培训时的培训数据来源火车网
功能。要使用数据存储进行验证,请使用'
名称值对参数验证数据
'训练
。
为了成为培训或验证的有效输入,读
数据存储的功能必须返回数据作为单元格或表格(除非除外成像
可以输出数字数组和必须输出表的自定义迷你批次数据存储的对象。
对于具有单个输入的网络,数据存储返回的表或单元格数组必须具有两个列。数据的第一列表示网络的输入,第二列数据表示响应。每行数据都代表一个单独的观察结果。为了成像
只要,火车网
和训练
万博1manbetx支持数据作为整数数组和整数阵列的单列单元格返回。
要将数据存储用于具有多个输入层的网络,请使用结合
和转换
函数创建一个数据存储,该数据存储在使用(numInputs
+ 1)列,其中numInputs
是网络输入的数量。在这种情况下,第一个numInputs
列指定每个输入的预测指标,最后一列指定响应。输入的顺序由输入名
图层图的属性层
。
下表显示了调用的示例输出读
数据存储的功能DS
。
网络体系结构 | 数据存储输出 | 示例输出 |
---|---|---|
单个输入层 | 表或单元格数组,带有两列。 第一列和第二列分别指定了预测指标和响应。 表元素必须是标量,行向量或包含数字数组的1 by-1单元格数组。 自定义迷你批次数据存储必须输出表。 |
具有一个输入和一个输出的网络表: 数据=读(DS) 数据= 4×2表预测响应__________________ ________ {224×224×3 double} 2 {224×224×3 double} 7 {224×224×3 double} 9 {224×224×224×3 double} 9 |
一个输入和一个输出的网络阵列: 数据=读(DS) data = 4×2个小区阵列{224×224×3 double} {[2]} {224×224×3 double} {[7]} {[7]} {224×224×3 double} {[9]}×3 double} {[9]} |
||
多个输入层 | 带有的单元格数( 首先 输入的顺序由 |
具有两个输入和一个输出的网络的单元格数组。 数据=读(DS) 数据= 4×3个小区阵列{224×224×3 double} {128×128×3 double} {[2]} {[2]} {224×224×3 double} {128×128×128×3 double} double} {[2] {2]} {2]} {224×224×3 double} {128×128×3 double} {[9]} {224×224×3 double} {128×128×128×3 double} {[9]} |
预测变量的格式取决于数据的类型。
数据 | 预测指标的格式 |
---|---|
2-D图像 | H-经过-w-经过-C数字阵列,哪里H,,,,w, 和C分别是图像的高度,宽度和数量。 |
3-D图像 | H-经过-w-经过-d-经过-C数字阵列,哪里H,,,,w,,,,d, 和C分别是图像的高度,宽度,深度和数量。 |
矢量序列 | C-经过-s矩阵,哪里C是序列的功能数量s是序列长度。 |
1-D图像序列 | H-经过-C-经过-s数组,哪里H和C分别对应于图像的高度和数量,并且s是序列长度。 迷你批次中的每个序列都必须具有相同的序列长度。 |
2-D图像序列 | H-经过-w-经过-C-经过-s数组,哪里H,,,,w, 和C分别对应于图像的高度,宽度和数量,并且s是序列长度。 迷你批次中的每个序列都必须具有相同的序列长度。 |
3-D图像序列 | H-经过-w-经过-d-经过-C-经过-s数组,哪里H,,,,w,,,,d, 和C分别对应于图像的高度,宽度,深度和数量,并且s是序列长度。 迷你批次中的每个序列都必须具有相同的序列长度。 |
特征 | C-1列矢量,其中C是功能数量。 |
对于返回表中的预测变量,元素必须包含数字标量,数字行向量或包含数字数组的1 by-1单元格数组。
这火车网
函数不支持具有多个序列输入层的网络。万博1manbetx
响应的格式取决于任务的类型。
任务 | 响应格式 |
---|---|
分类 | 分类标量 |
回归 |
|
顺序到序列分类 | 1 bys分类标签的顺序,其中s是相应预测序列的序列长度。 |
顺序到序列回归 | r-经过-s矩阵,哪里r是响应次数和s是相应预测序列的序列长度。 |
对于在表中返回的响应,元素必须是分类标量,数字标量,数字行向量或包含数字数组的1 by-1单元格数组。
预言
用于推理预测
,,,,分类
, 和激活
,仅需要数据存储来产生与预测变量相对应的列。推理功能使用第一个numInputs
列并忽略了后续层,其中numInputs
是网络输入层的数量。
指定阅读尺寸和迷你批量大小
数据存储可以将每个调用的任何数量的行(观察值)返回读
。功能,例如火车网
,,,,预测
,,,,分类
, 和激活
接受数据存储和支持指定万博1manbetx“ MINIBATCHSIZE”
称呼读
形成完整的迷你数据所需的多次。当这些功能形成迷你批次时,它们在内存中使用内部队列存储读取数据。例如,如果数据存储始终返回每个呼叫的64行,则读
和MinibatchSize
是128
,然后形成每个小批量数据,需要两个调用读
。
为了获得最佳运行时性能,建议配置数据存储,以使观测值返回读
等于“ MINIBATCHSIZE”
。对于具有“读取尺寸”
属性,设置“读取尺寸”
要更改数据存储返回的观察值的数量读
。
转换并组合数据存储
深度学习经常要求数据进行预处理和增强,然后才能以适当的形式输入网络。这转换
和结合
数据存储的功能可用于准备要馈入网络的数据。
要将数据存储用于具有多个输入层的网络,请使用结合
和转换
函数创建一个数据存储,该数据存储在使用(numInputs
+ 1)列,其中numInputs
是网络输入的数量。在这种情况下,第一个numInputs
列指定每个输入的预测指标,最后一列指定响应。输入的顺序由输入名
图层图的属性层
。
变换数据存储
读取数据时,转换后的数据存储将特定的数据转换应用于基础数据存储。要创建转换的数据存储,请使用转换
功能并指定基础数据存储和转换。
提供的功能句柄转换
必须接受与该格式相同格式的输入数据读
基础数据存储的功能。
示例:将图像数据存储转换为训练数字分类网络
此示例使用转换
函数以创建训练集,其中将随机的90度旋转添加到图像数据存储中的每个图像中。通过结果变换的达塔斯托尔
至火车网
训练一个简单的数字分类网络。
创建一个包含数字图像的图像数据存储。
digitdatasetpath = fullfile(matlabroot,'工具箱',,,,'nnet',,,,...'nndemos',,,,'nndatasets',,,,“ digitdataset”);imds = imagedatastore(digitdatasetpeth,...“包括橡皮folders”,真的,...“ Labelsource”,,,,“折叠式”);
将迷你批量尺寸等于读取尺寸
图像数据存储。
MiniBatchSize = 128;imds.ReadSize = minibatchSize;
通过添加随机的90度旋转来转换图像数据存储中的图像。转换函数,预处理训练
在此示例的末尾定义。
dstrain = transform(imds,@preprocessfortraining,“ include innfo',真的)
dstrain =带有属性的转换Datastore:基础Datatastore:[1×1 matlab.io.datastore.imagedatastore]转换:{@preprocessfortraining} includeinfo:1 1
指定网络和培训选项的层,然后使用转换后的数据存储训练网络dstrain
作为数据源。
layers = [ImageInputlayer([28 28 1],,'正常化',,,,'没有任何')卷积2Dlayer(5,20)Relulayer MaxPooling2Dlayer(2,“大步”,2)完整连接的layer(10);SoftMaxlayer分类器];选项=训练('亚当',,,,...“绘图”,,,,“训练过程”,,,,...“ MINIBATCHSIZE”,minibatchSize);net = trainnetwork(dstrain,层,选项);
定义转换函数,预处理训练
。该函数的输入是一批数据,数据
,从基础数据存储中读取。此示例中的函数通过每个读取图像循环并执行随机旋转,然后将转换的图像和对应的标签返回作为单元格数,如预期火车网
。
功能[dataout,info] =预处理(数据,信息)numrows = size(data,1);dataout =单元格(numrows,2);为了idx = 1:numrows%随机90度旋转imgout = rot90(data {idx,1},randi(4)-1);%从信息结构返回标签作为数据输出中的第二列。dataout(idx,:) = {imgout,info.label(idx)};结尾结尾
组合数据存储
这结合
函数关联多个数据存储。在产生的组合的datastore
,例如重置数据存储,在所有基础数据存储中执行相同的操作。打电话读
组合数据存储的函数读取一批来自所有数据的数据n基础数据存储,必须返回相同数量的观测值。从组合数据存储中读取的返回水平串联结果n- 适用于训练和验证的列细胞阵列。改组合并的数据存储会导致基础数据存储中文件的相同随机排序。
例如,如果您正在训练图像到图像回归网络,则可以通过组合两个图像数据存储来创建训练数据集。该示例代码演示了组合两个名称的图像数据存储IMDSX
和imdsy
。组合的数据存储Imdsrain
返回数据作为两列单元阵列。
imdsx = imagedatastore(___);imdsy = imagedatastore(___);IMDSTRAIN = Combine(IMDSX,IMDSY)
imdstrain = compinedDatastore与属性:下林塔斯塔尔:{1×2个单元}
如果您有图像处理工具箱,则RandompatchExtractionDatastore
(图像处理工具箱)为关联基于图像的数据提供了替代解决方案成像
S,Pixellabeldatastore
沙变换的达塔斯托尔
s。一个RandompatchExtractionDatastore
与使用该数据相关的数据具有多个优势结合
功能。具体而言,随机补丁提取数据存储:
提供了一种从二-D和3-D数据中提取补丁的简便方法,而无需您使用自定义的裁剪操作
转换
和结合
提供了一种简单的方法来每次小批次每张图像生成多个补丁,而无需您使用自定义串联操作使用
转换
。万博1manbetx在应用图像转换为分类数据时,支持分类数据和数字数据之间的有效转换
万博1manbetx支持并行培训
通过缓存图像提高性能
使用数据存储进行并行培训和背景调度
用于并行培训或多GPU培训的数据存储必须分区。要确定数据存储是否可以分区,请使用该函数可以分配
。使用该指定平行或多GPU培训“执行环境”
名称值对参数训练
。并行培训或使用单个或多个GPU需要并行计算工具箱™。
许多内置数据存储已经可以分区,因为它们支持万博1manbetx分割
功能。使用转换
和结合
具有内置数据存储的功能经常维持对并行和多GPU培训的支持。万博1manbetx
如果您需要创建支持并行或多GPU培训的自定义数据存储,则您的数据存储必须实现万博1manbetxmatlab.io.datastore.partition
班级。
可分配数据存储使用背景调度支持阅读培训数据。万博1manbetx在GPU工作时,背景在内存中派遣队列数据。指定背景使用“派遣式环境”
名称值对参数训练
。背景调度需要并行计算工具箱。
并行培训时,数据存储不支持指定万博1manbetx“洗牌”
名称值对参数训练
作为'没有任何'
。