数据存储深度学习
在MATLAB数据存储®是一个方便的工作方式和代表太大的数据集合的一次装入内存。因为深度学习通常需要大量的数据,数据存储是一个重要的部分深度学习MATLAB的工作流。
选择数据存储
对于许多应用程序来说,最简单的方法是首先一个内置的数据存储。更多可用的内置数据存储的信息,明白了选择数据存储文件格式或应用程序。然而,只有某些类型的内置数据存储可以直接使用网络培训作为输入,验证和推理。这些数据存储:
数据存储 | 描述 | 所需额外的工具箱 |
---|---|---|
ImageDatastore |
数据存储的图像数据 | 没有一个 |
AugmentedImageDatastore |
数据存储为调整和增加训练图像 数据存储是不确定的 |
没有一个 |
PixelLabelDatastore (计算机视觉工具箱) |
像素标签数据的数据存储 |
计算机视觉工具箱™ |
PixelLabelImageDatastore (计算机视觉工具箱) |
数据存储语义分割网络培训 数据存储是不确定的 |
计算机视觉的工具箱 |
boxLabelDatastore (计算机视觉工具箱) |
边界框标签数据的数据存储 |
计算机视觉的工具箱 |
RandomPatchExtractionDatastore (图像处理工具箱) |
数据存储从图像数据中提取随机的补丁 数据存储是不确定的 |
图像处理工具箱™ |
blockedImageDatastore (图像处理工具箱) |
数据存储块阅读和处理图像数据,包括大型图片不符合在内存中 | 图像处理工具箱 |
DenoisingImageDatastore (图像处理工具箱) |
数据存储训练神经网络图像去噪深 数据存储是不确定的 |
图像处理工具箱 |
其他内置数据存储可以用作输入深度学习,但必须预处理数据读取这些数据存储格式要求的深度学习网络。有关所需格式的读取数据的更多信息,见输入数据存储训练、验证和推理。为更多的信息关于如何预处理数据读取数据存储,明白了变换和组合数据存储。
对于某些应用程序,可能没有一个内置的数据存储类型适合你的数据。对于这些问题,可以创建一个定制的数据存储。有关更多信息,请参见开发自定义数据存储。所有自定义数据存储是有效输入只要深度学习接口读
自定义数据存储的函数返回数据所需的形式。
输入数据存储训练、验证和推理
数据存储在深度学习工具箱™是有效的输入训练、验证和推理。
培训和验证
您可以使用一个图像数据存储或其他类型的数据存储训练数据来源当训练使用trainNetwork
函数。使用一个数据存储进行验证,使用”
名称-值对的论点ValidationData
”trainingOptions
。
为培训或一个有效的输入验证读
数据存储的函数必须返回数据单元阵列或表(除了ImageDatastore
对象可以输出数值数组和自定义mini-batch数据存储必须输出表)。
网络的一个输入,返回的表或单元阵列数据存储必须有两列。第一列表示输入的数据网络和第二列的数据代表的反应。每一行代表一个单独的数据观察。为ImageDatastore
只有,trainNetwork
和trainingOptions
万博1manbetx支持数据作为整数数组和单列细胞返回整数数组的数组。
使用一个数据存储与多个网络输入层,使用结合
和变换
函数来创建一个输出的数据存储单元阵列(numInputs
+ 1)列,numInputs
是网络输入的数量。在这种情况下,第一个numInputs
列指定每个输入的预测和最后一列指定响应。输入的顺序的InputNames
层的属性图层
。
下面的表显示了调用的示例输出读
函数数据存储ds
。
网络体系结构 | 数据存储输出 | 示例输出 |
---|---|---|
单个输入层 | 表或单元阵列和两列。 第一和第二列指定预测和响应,分别。 表格元素必须标量、行向量或1×1细胞数组包含一个数字数组。 自定义mini-batch数据存储必须输出表。 |
表对网络有一个输入和一个输出: data =阅读(ds) data = 4×2表预测响应_____________ ________{224×224×3双}2{224×224×3双}7{224×224×3双}9{224×224×3双}9 |
单元阵列对网络有一个输入和一个输出: data =阅读(ds) data = 4×2单元阵列{224×224×3双}{[2]}{224×224×3双}{[7]}{224×224×3双}{[9]}{224×224×3双}{[9]} |
||
多个输入层 | 单元阵列( 第一个 输入的顺序的 |
单元阵列网络和两个输入和一个输出。 data =阅读(ds) data = 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]} |
预测的格式取决于类型的数据。
数据 | 格式的预测 |
---|---|
二维图像 | h——- - - - - -w——- - - - - -c数字数组,h,w,c高度,宽度,分别和通道图像的数量。 |
三维图像 | h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,h,w,d,c的高度、宽度、深度,分别和通道图像的数量。 |
向量序列 | c——- - - - - -年代矩阵,c序列的特性和吗年代是序列长度。 |
一维图像序列 | h——- - - - - -c——- - - - - -年代数组,h和c对应于图像的高度和数量的渠道,分别年代是序列长度。 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
函数不支持与多个序列网络输入层。万博1manbetx
响应的格式取决于任务的类型。
任务 | 格式的响应 |
---|---|
分类 | 绝对标量 |
回归 |
|
Sequence-to-sequence分类 | 1 -年代序列的分类标签,年代是相应的预测序列的序列长度。 |
Sequence-to-sequence回归 | R——- - - - - -年代矩阵,R反应的数量和吗年代是相应的预测序列的序列长度。 |
对于响应中返回的表,必须绝对标量元素,一个数字标量,数字行向量或1×1单元阵列包含一个数字数组。
预测
推理使用预测
,分类
,激活
,数据存储只需要产量列对应的预测指标。使用第一个推理功能NumInputs
列,而忽略了后续层,NumInputs
是网络输入层的数量。
指定阅读大小和Mini-Batch大小
数据存储可以返回任何的行数为每个调用(观察)读
。等功能trainNetwork
,预测
,分类
,激活
接受指定数据存储和支持万博1manbetx“MiniBatchSize”
调用读
多少次就形成完整的mini-batches数据是必要的。这些函数形式mini-batches,他们使用内部队列在内存中存储读取数据。例如,如果一个数据存储每个调用始终返回64行读
和MiniBatchSize
是128年
,然后形成每一个mini-batch数据需要两个调用读
。
最佳运行时性能,建议配置数据存储返回的数量的观察读
等于“MiniBatchSize”
。有一个的数据存储“ReadSize”
属性,设置“ReadSize”
改变观察的数量为每个调用返回的数据存储读
。
变换和组合数据存储
深度学习经常需要的数据预处理,增强数据是在一个适当的形式输入到网络。的变换
和结合
数据存储功能是有用的在准备数据送入网络。
使用一个数据存储与多个网络输入层,使用结合
和变换
函数来创建一个输出的数据存储单元阵列(numInputs
+ 1)列,numInputs
是网络输入的数量。在这种情况下,第一个numInputs
列指定每个输入的预测和最后一列指定响应。输入的顺序的InputNames
层的属性图层
。
变换数据存储
改变了数据存储特定的数据转换适用于底层数据存储时,读取数据。创建一个转换数据存储,使用变换
并指定底层数据存储和转换函数。
函数处理提供变换
必须接受输入数据返回的格式一样吗读
底层数据存储的函数。
例如:变换图像数据存储数字分类训练网络
下面的例子使用了变换
函数创建一个随机的90度旋转的训练集添加到每一个图像在一个图像数据存储。通过结果TransformedDatastore
来trainNetwork
训练一个简单数字分类网络。
创建一个包含了数字图像的图像数据存储。
digitDatasetPath = fullfile (matlabroot,“工具箱”,“nnet”,…“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”);
设置mini-batch大小相等ReadSize
图像的数据存储。
miniBatchSize = 128;洛桑国际管理发展学院。ReadSize = miniBatchSize;
通过添加随机变换图像在图像数据存储90度旋转。转换函数,preprocessForTraining
年底,定义这个例子。
@preprocessForTraining dsTrain =变换(imd,“IncludeInfo”,真正的)
dsTrain = TransformedDatastore属性:UnderlyingDatastore:(1×1 matlab.io.datastore。ImageDatastore]转换:{@preprocessForTraining} IncludeInfo: 1
指定网络层和训练选项,然后使用转换后的数据存储训练网络dsTrain
作为数据来源。
层= [imageInputLayer ([28 28 1],“归一化”,“没有”20)convolution2dLayer (5) reluLayer maxPooling2dLayer (2“步”,2)fullyConnectedLayer (10);softmaxLayer classificationLayer];选择= trainingOptions (“亚当”,…“阴谋”,“训练进步”,…“MiniBatchSize”,miniBatchSize);网= trainNetwork (dsTrain层,选项);
定义转换函数,preprocessForTraining
。函数的输入是一批数据,数据
从底层数据存储、读取。函数在这个例子中遍历每个读取图像并执行随机旋转,然后返回转换后的图像和相应的标签作为一个单元阵列的预期trainNetwork
。
函数[dataOut,信息]= preprocessForTraining(数据、信息)numRows =大小(数据,1);dataOut =细胞(numRows, 2);为idx = 1: numRows%随机90度旋转imgOut = rot90(数据{idx 1},兰迪(4)1);%返回从信息结构的标签%在dataOut第二列。dataOut (idx:) = {imgOut, info.Label (idx)};结束结束
结合数据存储
的结合
多个数据存储功能的同事。操作产生的CombinedDatastore
重置数据存储等执行相同操作的底层数据存储。调用读
数据存储的函数读取从所有的一批数据N底层数据存储,必须返回相同数量的观察。阅读从一个综合数据存储返回的横向连接的结果N列单元阵列适合训练和验证。洗牌结合数据存储的结果在一个相同的随机排序在底层数据存储的文件。
举个例子,如果你正在训练一个image-to-image回归网络,你就可以创建的训练数据集通过结合两个图像数据存储。这个示例代码演示了将两个图像数据存储imdsX
和imdsY
。合并后的数据存储imdsTrain
返回数据作为一个两列单元阵列。
imdsX = imageDatastore (___);imdsY = imageDatastore (___);imdsTrain =结合(imdsX imdsY)
imdsTrain = CombinedDatastore属性:UnderlyingDatastores:{1×2细胞}
如果你有图像处理工具箱,然后randomPatchExtractionDatastore
(图像处理工具箱)将基于图像的数据提供了另一种解决方案ImageDatastore
年代,PixelLabelDatastore
年代,TransformedDatastore
年代。randomPatchExtractionDatastore
有几个优势关联数据使用结合
函数。具体地说,一个随机的补丁提取数据存储:
提供了一种简便的方法来提取补丁从二维和三维数据而不需要实现一个自定义裁剪操作使用
变换
和结合
提供了一个简单的方法来生成多个补丁/图像/ mini-batch而不需要定义一个自定义连接操作使用
变换
。万博1manbetx支持高效的分类之间的转换和数字数据在应用图像变换分类数据
万博1manbetx支持并行训练
通过缓存图像而提高了性能
使用数据存储并行调度培训和背景
数据存储用于并行训练或multi-GPU培训必须分区。确定一个数据存储的分区,使用函数isPartitionable
。指定平行或multi-GPU训练使用“ExecutionEnvironment”
名称-值对的观点trainingOptions
。并行训练或使用单个或多个gpu需要并行计算工具箱™。
很多内置的数据存储已经可分区的,因为他们支持万博1manbetx分区
函数。使用变换
和结合
功能内置数据存储频繁维护支持并行和multi-GPU培训。万博1manbetx
如果您需要创建一个自定义数据存储,支持并行或multi-GPU训练,那么你的数据存储必须实现万博1manbetxmatlab.io.datastore.Partitionable
类。
可分区的使用背景数据存储支持阅读培训数据调度。万博1manbetx背景调度队列数据在内存中而GPU是有效的。指定背景调度使用“DispatchInBackground”
名称-值对的观点trainingOptions
。背景调度需要并行计算工具箱。
在并行训练时,数据存储不支持指定万博1manbetx“洗牌”
名称-值对的观点trainingOptions
作为“没有”
。
另请参阅
变换
|结合
|trainNetwork
|trainingOptions
|读