minibatchqueue
创建mini-batches深度学习
描述
使用一个minibatchqueue
对象的创建、数据的预处理和管理mini-batches培训使用自定义循环。
一个minibatchqueue
对象遍历数据存储在一个合适的格式提供数据训练使用自定义训练循环。的对象准备队列mini-batches预处理的需求。使用一个minibatchqueue
自动将数据转换为对象dlarray
或gpuArray
,将数据转换成不同的精度,或应用自定义函数对数据进行预处理。你可以准备你的数据在后台并行。
在培训期间,您可以使用管理你的数据minibatchqueue
对象。可以调整数据的每个时代使用培训洗牌
功能和收集数据从队列中为每个迭代使用培训下一个
函数。你可以检查任何数据队列中使用hasdata
功能,重置
队列是空的。
创建
描述
创建一个兆贝可
= minibatchqueue (ds
,numOutputs
)minibatchqueue
从输入数据存储对象ds
在每个mini-batch并设置变量的数量。当你使用使用这个语法MiniBatchFcn
指定一个mini-batch预处理功能有不同数量的输出比输入数据存储的变量的数量ds
。
使用名称-值选项设置一个或多个属性。例如,兆贝可
= minibatchqueue (___、名称、值)minibatchqueue (ds,“MiniBatchSize ", 64年,“PartialMiniBatches”、“丢弃”)
返回mini-batches的大小设置为64,丢弃任何mini-batches只有不到64年的观察。
输入参数
ds
- - - - - -输入数据存储
数据存储|自定义数据存储
输入数据存储,指定为一个MATLAB®数据存储或自定义数据存储。
有关数据存储深度学习的更多信息,请参阅数据存储深度学习。
numOutputs
- - - - - -mini-batch变量的数量
正整数
mini-batch变量的数量,指定为一个正整数。默认情况下,mini-batch变量的数量等于输入数据存储的变量的数量。
您可以确定变量的数量输入数据存储的输出通过检查阅读(ds)
。如果你的数据存储返回一个表,表的变量是变量的数量。如果你的数据存储返回一个单元阵列,变量的数量大小的细胞的二维数组。
如果你使用MiniBatchFcn
名称-值参数来指定一个mini-batch预处理函数,它返回一个不同的数字比输入数据存储的变量,你必须设置numOutputs
匹配函数的输出的数量。
例子:2
属性
MiniBatchSize
- - - - - -mini-batches大小
128年
(默认)|正整数
PartialMiniBatch
- - - - - -或丢弃不完整mini-batches返回
“回归”
(默认)|“丢弃”
返回或丢弃不完整mini-batches,指定为“回归”
或“丢弃”
。
如果观测的总数不整除MiniBatchSize
,最后mini-batch返回的下一个
函数可以有不足MiniBatchSize
观察。这个属性指定任何部分mini-batches如何治疗,使用以下选项:
“回归”
——mini-batch可以包含少于MiniBatchSize
观察。返回所有数据。“丢弃”
——所有mini-batches必须包含准确MiniBatchSize
观察。一些数据可以从队列中被丢弃如果没有足够完成mini-batch。
集PartialMiniBatch
来“丢弃”
如果你要求所有mini-batches是相同的大小。
例子:“丢弃”
数据类型:字符
|字符串
MiniBatchFcn
- - - - - -Mini-batch预处理功能
“整理”
(默认)|函数处理
这个属性是只读的。
Mini-batch预处理功能,指定为“整理”
或一个函数处理。
的默认值MiniBatchFcn
是“整理”
。这个函数将mini-batch变量连接到阵列。
使用一个函数处理自定义函数来进行预处理mini-batches定制培训。这样做是推荐一个炎热的编码分类标签,填充序列数据,计算平均图像,等等。您必须指定一个自定义函数如果你的数据由细胞数组包含数组大小不同的。
如果您指定一个自定义mini-batch预处理功能,输出变量的函数必须连接每一批预处理后并返回数组每个变量作为一个单独的函数输出。函数必须接受至少尽可能多的输入变量的数量的底层数据存储。输入自定义函数的传递N1细胞阵列,Nmini-batch是观测的数量。函数可以返回需要尽可能多的变量。如果指定的函数MiniBatchFcn
返回一个不同数量的输出比输入指定numOutputs
作为函数的输出的数量。
下列行为不推荐在自定义函数。繁殖所需的行为,相反,当你创建设置相应的属性minibatchqueue
对象。
行动 | 推荐的属性 |
---|---|
把变量不同的数据类型。 | OutputCast |
移动数据GPU。 | OutputEnvironment |
将数据转换成dlarray 。 |
OutputAsDlarray |
应用数据格式dlarray 变量。 |
MiniBatchFormat |
例子:@myCustomFunction
数据类型:字符
|字符串
|function_handle
DispatchInBackground
- - - - - -在后台进行预处理mini-batches平行的池中
假
或0
(默认)|真正的
或1
在后台进行预处理mini-batches平行池,指定为一个数字或逻辑1
(真正的
)或0
(假
)。
使用这个选项需要并行计算工具箱™。输入数据存储ds
必须subsettable或分区。使用这个选项,自定义数据存储应该实现matlab.io.datastore.Subsettable
类。
使用这个选项,当你mini-batches需要沉重的预处理。这个选项使用并行池在后台准备mini-batches当你使用mini-batches在训练。
工人在池过程mini-batches通过应用指定的函数MiniBatchFcn
。进一步的处理,包括应用的影响OutputCast
,OutputEnvironment
,OutputAsDlarray
,MiniBatchFormat
,不发生在工人。
当DispatchInBackground
被设置为真正的
,软件打开一个本地平行池使用当前设置,如果当地游泳池不是当前打开的。不支持非本地池。万博1manbetx池打开你第一次电话下一个
。
例子:真正的
数据类型:逻辑
OutputCast
- - - - - -每个mini-batch变量的数据类型
“单一”
(默认)|“双”
|“int8”
|“int16”
|“int32”
|“int64”
|“uint8”
|“uint16”
|“uint32”
|“uint64”
|“逻辑”
|“字符”
|单元阵列
这个属性是只读的。
每个mini-batch变量的数据类型,指定为“单一”
,“双”
,“int8”
,“int16”
,“int32”
,“int64”
,“uint8”
,“uint16”
,“uint32”
,“uint64”
,“逻辑”
,或“字符”
、细胞数组的值或一个空向量。
如果您指定OutputCast
作为一个空向量,每个mini-batch变量的数据类型不变。为每个mini-batch变量指定一个不同的数据类型,指定一个单元阵列为每个mini-batch变量包含一个条目。这个单元格数组的元素的顺序必须匹配的顺序返回mini-batch变量。这个顺序是相同的顺序返回的变量指定的函数MiniBatchFcn
。如果你不指定一个自定义函数MiniBatchFcn
,它是相同的顺序返回的变量是底层的数据存储。
你必须确保的价值OutputCast
不冲突的价值观OutputAsDlarray
或OutputEnvironment
属性。如果您指定OutputAsDlarray
作为真正的
或1
检查指定的数据类型OutputCast
支持万博1manbetxdlarray
。如果您指定OutputEnvironment
作为“图形”
或“汽车”
和一个支持G万博1manbetxPU是可用的,检查指定的数据类型OutputCast
支持万博1manbetxgpuArray
(并行计算工具箱)。
例子:{‘单身’,‘单身’,‘逻辑’}
数据类型:字符
|字符串
OutputAsDlarray
- - - - - -mini-batch变量转换为国旗dlarray
真正的
或1
(默认)|假
或0
|向量的逻辑值
这个属性是只读的。
mini-batch变量转换为国旗dlarray
指定为一个数字或逻辑1
(真正的
)或0
(假
)或一个向量的数字或逻辑值。
为每个输出指定一个不同的值,指定一个向量为每个mini-batch变量包含一个条目。这个向量的元素的顺序必须匹配的顺序返回mini-batch变量。这个顺序是相同的顺序返回的变量指定的函数MiniBatchFcn
。如果你不指定一个自定义函数MiniBatchFcn
,它是相同的顺序返回的变量是底层的数据存储。
转换成变量dlarray
底层数据类型指定的吗OutputCast
财产。
例子:(1 1 0)
数据类型:逻辑
MiniBatchFormat
- - - - - -mini-batch变量的数据格式
”
(默认)|特征向量|单元阵列
这个属性是只读的。
mini-batch变量的数据格式,指定为一个字符特征向量的向量或一个单元阵列。
mini-batch格式应用于dlarray
变量。非dlarray
必须有一个mini-batch变量MiniBatchFormat
的”
。
为了避免当你的一个错误dlarray
和非dlarray
为每个输出变量,您必须指定一个值通过提供一个单元阵列为每个mini-batch变量包含一个条目。这个单元格数组的元素的顺序必须匹配的顺序返回mini-batch变量。这是相同的顺序返回的变量指定的函数MiniBatchFcn
。如果你不指定一个自定义函数MiniBatchFcn
,它是相同的顺序返回的变量是底层的数据存储。
例子:{‘SSCB’,”}
数据类型:字符
|字符串
OutputEnvironment
- - - - - -硬件资源mini-batch变量
“汽车”
(默认)|“图形”
|“cpu”
|单元阵列
硬件资源mini-batch变量返回使用下一个
函数,指定为以下值之一:
“汽车”
——返回mini-batch变量在GPU上如果有一个可用。否则,返回mini-batch变量在CPU上。“图形”
——返回mini-batch变量在GPU上。“cpu”
——返回mini-batch变量在CPU上
只返回特定变量的GPU,指定OutputEnvironment
作为一个单元阵列为每个mini-batch变量包含一个条目。这个单元格数组的元素的顺序必须匹配的顺序返回mini-batch变量。这个顺序是相同的顺序返回的变量指定的函数MiniBatchFcn
。如果你不指定一个自定义的MiniBatchFcn
,它是相同的顺序返回的变量是底层的数据存储。
使用GPU需要并行计算工具箱。使用GPU深度学习,你也必须有一个支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)。如果你选择“图形”
选择和并行计算工具箱或合适的GPU不可用,那么软件返回一个错误。
例子:{gpu, cpu的}
数据类型:字符
|字符串
对象的功能
例子
定制培训准备Mini-Batches循环
使用一个minibatchqueue
对象自动mini-batches图像和分类标签准备培训在一个定制的循环。
创建一个数据存储。调用读
在auimds
生成一个表有两个变量:输入
,包含图像数据响应
,包含相应的分类标签。
auimds = augmentedImageDatastore ([100 - 100], digitDatastore);=阅读(auimds);头(2)
ans =输入响应售予________ {100×100 uint8} {100×100 uint8} 0
创建一个minibatchqueue
对象从auimds
。设置MiniBatchSize
财产256年
。
的minibatchqueue
对象有两个输出变量:图像和分类的标签输入
和响应
的变量auimds
,分别。设置minibatchqueue
作为格式化对象返回图像dlarray
在GPU上。单通道图像的黑白图像。添加一个单通道尺寸通过应用格式“SSBC”
批处理。作为一个非返回标签dlarray
在CPU上。
兆贝可= minibatchqueue (auimds,…“MiniBatchSize”,256,…“OutputAsDlarray”(1,0),…“MiniBatchFormat”,{“SSBC”,”},…“OutputEnvironment”,{“图形”,“cpu”})
使用下一个
函数获取mini-batches兆贝可
。
(X, Y) =下一个(兆贝可);
使用自定义创建Mini-Batches预处理功能和后台调度
预处理数据使用minibatchqueue
与一个定制mini-batch预处理功能。自定义函数重新调节传入的图像数据在0和1之间,并计算平均图像。
解压缩数据和创建一个数据存储。
解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,…IncludeSubfolders = true,…LabelSource =“foldernames”);
创建一个minibatchqueue。
设置输出的数量
2
,以匹配函数的输出。设置mini-batch大小。
预处理数据使用自定义函数
preprocessMiniBatch
定义在这个例子。自定义函数将图像数据连接到一个数值数组,0和1之间的重新调节图像,计算图像的批量的平均值。函数返回的新批图像和平均图像。应用预处理功能在后台使用并行池通过设置
DispatchInBackground
财产真正的
。设置DispatchInBackground
来真正的
需要并行计算工具箱™。不将mini-batch输出变量转换成
dlarray
。
兆贝可= minibatchqueue (imd 2…MiniBatchSize = 16,…MiniBatchFcn = @preprocessMiniBatch,…DispatchInBackground = true,…OutputAsDlarray = false)
兆贝可= minibatchqueue 2输出和属性:Mini-batch创造:MiniBatchSize: 16 PartialMiniBatch:“返回”MiniBatchFcn: @preprocessMiniBatch DispatchInBackground: 1输出:OutputCast:{“单”“单身”}OutputAsDlarray: [0 0] MiniBatchFormat: {"} OutputEnvironment:{'汽车' '汽车'}
如果您使用的是DispatchInBackground
和一个平行池不是已经打开,当地平行池将自动从mini-batch队列读取数据时开放。如果你的预处理功能是支持一个线程环境,开放并行线程池减少内存使用,更万博1manbetx快的调度,降低数据传输成本。有关更多信息,请参见在线程之间进行选择和基于流程的环境(并行计算工具箱)。
parpool (“线程”);
开始平行池(parpool)使用“线程”概要文件…连接到平行池(工人数量:4)。
获得一个mini-batch和显示图像的平均mini-batch。一线工人应用预处理功能。
[X, averageImage] =下一个(兆贝可);imshow (averageImage)
函数[X, averageImage] = preprocessMiniBatch(伊势亚)X =猫(4,伊势亚{:});X =重新调节(X, InputMin = 0, InputMax = 255);averageImage =意味着(X, 4);结束
使用minibatchqueue
在定制培训循环
训练一个网络使用minibatchqueue
管理mini-batches的处理。
负荷训练数据
加载数字训练数据,并将数据存储在数据存储中。创建一个数据存储的图像,一个用于标签使用arrayDatastore
。然后,结合生产数据存储一个数据存储使用minibatchqueue
。
[XTrain, YTrain] = digitTrain4DArrayData;dsX = arrayDatastore (XTrain IterationDimension = 4);dsY = arrayDatastore (YTrain);dsTrain =结合(dsX dsY);
确定独特的类标签的数据的数量。
类=类别(YTrain);numClasses =元素个数(类);
定义网络
定义网络和使用指定图像的平均价值的意思是
选择在图像输入层。
28层= [imageInputLayer([28 1],意思= (XTrain 4) convolution2dLayer (5、20) reluLayer convolution2dLayer(3、20、填充= 1)reluLayer convolution2dLayer(3、20、填充= 1)reluLayer fullyConnectedLayer (numClasses) softmaxLayer];lgraph = layerGraph(层);
创建一个dlnetwork
对象的层图。
网= dlnetwork (lgraph);
定义模型损失函数
创建一个helper函数modelLoss
最后,列出的例子。该函数作为输入dlnetwork
对象净
和mini-batch输入数据X
与相应的标签Y
,并返回损失和损失的梯度对可学的参数净
。
指定培训选项
培训期间指定要使用的选项。
numEpochs = 10;miniBatchSize = 128;
可视化培训进展阴谋。
情节=“训练进步”;
创建minibatchqueue
使用minibatchqueue
处理和管理mini-batches图像。为每个mini-batch:
丢弃部分mini-batches。
使用自定义mini-batch预处理功能
preprocessMiniBatch
(在这个例子中定义)一个炎热的编码类标签。格式的图像数据维度标签
“SSCB”
(空间、空间、通道、批)。默认情况下,minibatchqueue
把数据转换为对象dlarray
与底层数据对象类型单
。不格式添加到类的标签。火车在GPU如果一个是可用的。默认情况下,
minibatchqueue
将每个输出转换为对象gpuArray
如果一个GPU是可用的。使用GPU需要并行计算工具箱™和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)。
兆贝可= minibatchqueue (dsTrain,…MiniBatchSize = MiniBatchSize,…PartialMiniBatch =“丢弃”,…MiniBatchFcn = @preprocessMiniBatch,…MiniBatchFormat = [“SSCB”,”“]);
列车网络的
火车模型使用自定义训练循环。对于每一个时代,洗牌数据和遍历mini-batches数据仍然是可用的minibatchqueue
。更新网络参数使用adamupdate
函数。在每个时代,显示培训进展。
初始化平均梯度和的平方平均梯度。
averageGrad = [];averageSqGrad = [];
计算迭代的总数的培训进度监控。
numObservationsTrain =元素个数(YTrain);numIterationsPerEpoch =装天花板(numObservationsTrain / miniBatchSize);numIterations = numEpochs * numIterationsPerEpoch;
初始化TrainingProgressMonitor
对象。因为计时器开始创建监视器对象时,确保你创建对象接近的训练循环。
如果情节= =“训练进步”监控= = trainingProgressMonitor(指标“损失”信息=“时代”包含=“迭代”);结束
培训网络。
迭代= 0;时代= 0;而时代< numEpochs & & ~班长。停止时代=时代+ 1;%洗牌数据。洗牌(兆贝可);而hasdata(兆贝可)& & ~班长。停止迭代=迭代+ 1;% mini-batch读取的数据。(X, Y) =下一个(兆贝可);%计算模型和梯度使用dlfeval损失% modelLoss helper函数。(损失、研究生)= dlfeval (@modelLoss净,X, Y);%更新使用亚当优化网络参数。[净,averageGrad averageSqGrad] = adamupdate(网络,毕业生,averageGrad averageSqGrad,迭代);%更新培训进度监控。如果情节= =“训练进步”recordMetrics(监控、迭代损失=损失);updateInfo(监视、时代=时代+“的”+ numEpochs);班长。进步= 100 *迭代/ numIterations;结束结束结束
损失函数模型
的modelLoss
辅助函数作为输入dlnetwork
对象净
和mini-batch输入数据X
与相应的标签Y
,并返回损失和损失的梯度对可学的参数净
。自动计算梯度,使用dlgradient
函数。
函数(损失,梯度)= modelLoss(净,X, Y) YPred =向前(净,X);损失= crossentropy (YPred Y);梯度= dlgradient(损失、net.Learnables);结束
Mini-Batch预处理功能
的preprocessMiniBatch
使用以下步骤:预处理数据函数
从传入的单元阵列中提取图像数据和将数据连接到一个数字数组。连接图像数据在四维空间增加了一个三维图像,作为单通道尺寸。
从传入单元阵列提取标签数据和连接第二个维度分类数组。
一个炎热的分类标签编码成数字数组。编码的第一个维度产生一个相匹配的形状编码阵列网络输出。
函数(X, Y) = preprocessMiniBatch(伊势亚YCell)%从细胞中提取图像数据阵列和连接在第四%维度添加第三单维度,通道%的维度。猫(X = 4,伊势亚{:});%从细胞中提取标签数据和连接。Y =猫(2,YCell {:});%一个炎热的编码标签。Y, Y = onehotencode (1);结束
版本历史
介绍了R2020b
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。