主要内容

指定培训选项自定义训练循环

对于大多数任务,您可以控制使用训练算法的细节trainingOptionstrainNetwork功能。如果trainingOptions功能不提供所需的选项你的任务(例如,一个定制的学习速率的时间表),然后你可以定义自己的自定义训练循环使用dlnetwork对象。一个dlnetwork对象允许您指定训练一个网络层图使用自动分化。

指定的选项trainingOptions使用这些示例作为指南:

解算器选项

指定解算器,使用adamupdate,rmspropupdate,sgdmupdate在你的训练循环功能更新步骤。实现自己的自定义解决,更新可学的参数使用dlupdate函数。

自适应估计时刻(亚当)

用亚当,更新您的网络参数使用adamupdate函数。指定渐变衰减和平方梯度衰减因素使用对应的输入参数。

均方根传播(RMSProp)

使用RMSProp更新你的网络参数,使用rmspropupdate函数。指定分母抵消(ε)使用对应的输入参数的值。

随机梯度下降法与动量(个)

使用个更新你的网络参数,使用sgdmupdate函数。使用相应的输入参数指定的势头。

学习速率

指定学习速率,使用输入参数的学习速率adamupdate,rmspropupdate,sgdmupdate功能。

轻松地调整学习速率或用它来定义学习时间表,设置初始学习速率在定制培训循环。

learnRate = 0.01;

分段学习产量表

自动放弃学习速度训练中使用分段学习进度,学习速率乘以一个给定下降因素后指定时间间隔。

很容易地指定一个分段学习产量表,创建变量learnRate,learnRateSchedule,learnRateDropFactor,learnRateDropPeriod,在那里learnRate最初的学习速率,learnRateSchedule包含两“分段”“没有”,learnRateDropFactor是一个标量在[0,1],指定学习速率的因素下降,然后呢learnRateDropPeriod是一个正整数,指定有多少下降学习速率之间的时代。

learnRate = 0.01;learnRateSchedule =“分段”learnRateDropPeriod = 10;learnRateDropFactor = 0.1;

内部培训循环,每个时代的结束时,下降时的学习速率learnRateSchedule选择是“分段”和当前时代数字的倍数learnRateDropPeriod。设置新的学习速率的乘积学习速度和学习速率下降的因素。

如果learnRateSchedule = =“分段”& &国防部(时代,learnRateDropPeriod) = = 0 learnRate = learnRate * learnRateDropFactor;结束

情节

情节训练精度损失和在训练,计算mini-batch损失和准确性或均方误差(RMSE)模型损失函数,并把它们使用TrainingProgressMonitor对象。

很容易地指定情节应该打开或关闭,设置可见财产的TrainingProgressMonitor对象。默认情况下,可见被设置为真正的。当可见被设置为日志的软件培训指标和信息,但不显示培训进度窗口。您可以显示培训通过改变后的培训进度窗口可见财产。情节也验证指标,使用相同的选项validationDatavalidationFrequency中描述的验证

validationData = {XValidation, YValidation};validationFrequency = 50;

在培训之前,初始化一个TrainingProgressMonitor对象。监视器自动跟踪对象的建设以来的运行时间。使用这个时间代表训练的时间,确保你创建TrainingProgressMonitor对象接近的开始训练循环。

分类任务,创建一个情节来追踪损失和训练和验证数据的准确性。也跟踪时代数量和培训进度百分比。

监控= trainingProgressMonitor;班长。指标= [“TrainingAccuracy”,“ValidationAccuracy”,“TrainingLoss”,“ValidationLoss”];groupSubPlot(监控,“准确性”,(“TrainingAccuracy”,“ValidationAccuracy”]);groupSubPlot(监控,“损失”,(“TrainingLoss”,“ValidationLoss”]);班长。信息=“时代”;班长。包含=“迭代”;班长。进步= 0;

对于回归任务,调整代码通过改变变量名和标签,以便它初始化块的培训和验证RMSE而不是训练和验证精度。

在训练循环,迭代结束时,使用recordMetricsupdateInfo功能包括适当的指标和信息培训循环。对于分类任务,添加点对应于mini-batch mini-batch准确性和损失。如果当前迭代1或多个验证频率的选择,然后还添加点验证数据。

recordMetrics(监控、迭代TrainingLoss = lossTrain,TrainingAccuracy = accuracyTrain);updateInfo(监视、时代=字符串(时代)+“的”+字符串(numEpochs));如果迭代1 = = | |国防部(迭代,validationFrequency) = = 0 recordMetrics(监控、迭代ValidationLoss = lossValidation,ValidationAccuracy = accuracyValidation);结束班长。进步= 100 *迭代/ numIterations;
在哪里accuracyTrainlossTrain对应于mini-batch精度损失函数和损失计算模型。对于回归任务,使用mini-batch RMSE损失而不是mini-batch精度。

你可以停止训练使用停止培训进度窗口按钮。当你点击停止,停止监视更改的属性1(真正的)。培训如果你停止循环退出时停止属性是1

numEpochs < maxEpochs & & ~ monitor.Stop%的定制培训循环代码。结束

关于策划的更多信息和记录指标在训练,明白了在训练监控定制培训循环进展

学习如何计算验证指标,明白了验证

详细输出

显示培训损失和准确性在训练一个详细的表,计算mini-batch损失和准确性(分类任务)或RMSE(回归任务)在模型中损失函数和显示使用disp函数。

很容易地指定详细的表应该打开或关闭,创建变量详细的verboseFrequency,在那里详细的真正的verbosefrequency指定打印详细输出之间进行了多少次迭代。显示验证指标,使用相同的选项validationDatavalidationFrequency中描述的验证

verbose = true verboseFrequency = 50;validationData = {XValidation, YValidation};validationFrequency = 50;

在培训之前,显示详细的输出表标题和初始化一个计时器使用抽搐函数。

disp (“| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |”)disp (“| | |时代迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习|”)disp (“| | | | (hh: mm: ss)精度精度| | | | |”损失损失)disp (“| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |”)开始=抽搐;

对于回归任务,调整代码使它显示的培训和验证RMSE而不是训练和验证的准确性。

在训练循环,一次迭代的末尾,打印时的详细输出详细的选择是真正的,这是第一次迭代或迭代数字的倍数verboseFrequency

如果详细的& &(迭代= = 1 | |国防部(迭代,verboseFrequency) = = 0 D =持续时间(0,0,toc(开始),“格式”,“hh: mm: ss”);如果isempty (validationData) | |国防部(迭代,validationFrequency) ~ = 0 accuracyValidation =”“;lossValidation =”“;结束disp (“|”+垫(时代7“左”)+“|”+垫(迭代,11日“左”)+“|”+垫(D, 14日“左”)+“|”+垫(accuracyTrain 12“左”)+“|”+垫(accuracyValidation 12“左”)+“|”+垫(lossTrain 12“左”)+“|”+垫(lossValidation 12“左”)+“|”+垫(learnRate 15“左”)+“|”)结束

对于回归任务,调整代码使它显示的培训和验证RMSE而不是训练和验证的准确性。

当训练完成后,打印的最后边界详细表。

disp (“| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |”)

学习如何计算验证指标,明白了验证

Mini-Batch大小

设置mini-batch大小取决于数据或使用的数据存储类型的格式。

容易地指定mini-batch大小,创建一个变量miniBatchSize

miniBatchSize = 128;

在一个图像数据存储的数据,在训练之前,设置ReadSize属性数据存储的mini-batch大小。

洛桑国际管理发展学院。ReadSize = miniBatchSize;

增强图像数据存储中的数据,在训练之前,设置MiniBatchSize属性数据存储的mini-batch大小。

augimds。MiniBatchSize = MiniBatchSize;

对于内存中的数据,在每个迭代的开始,在培训阅读观察直接从数组中。

idx =((迭代- 1)* miniBatchSize + 1):(迭代* miniBatchSize);X = XTrain (:,:,:, idx);

数量的时代

为培训指定时代的最大数量的外循环训练循环。

方便地指定的最大数量时代,创建变量maxEpochs包含时代的最大数量。

maxEpochs = 30;

外层循环的循环培训,指定循环范围1、2,…,maxEpochs

时代= 0;numEpochs < maxEpochs时代=时代+ 1;结束

验证

验证您的网络在训练,留出了验证集和评估网络性能数据。

很容易地指定验证选项,创建变量validationDatavalidationFrequency,在那里validationData包含了验证数据或为空validationFrequency指定验证网络之间进行了多少次迭代。

validationData = {XValidation, TValidation};validationFrequency = 50;

培训期间循环,更新网络参数,测试后的网络进行了验证设置使用预测函数。验证网络只有当指定验证数据,它是第一个迭代或当前迭代的倍数validationFrequency选择。

如果迭代1 = = | |国防部(迭代,validationFrequency) = = 0 YValidation =预测(网络,XValidation);lossValidation = crossentropy (YValidation TValidation);[~,idx] = max (YValidation);labelsPredValidation =一会(idx);accuracyValidation =意味着(labelsPredValidation = = labelsValidation);结束
在这里,TValidation是一个炎热的编码的标签一会。计算的准确性,转换TValidation一个数组的标签。

对于回归任务,调整代码,以便计算验证RMSE而不是验证精度。

为一个例子,演示如何计算和情节验证指标在训练,明白了在训练监控定制培训循环进展

早期停止

停止训练早期损失了验证时停止下降,用国旗来打破循环培训。

容易地指定验证耐心(的次数,验证损失之前可以大于或等于最小的损失在网络训练之前停止),创建一个变量validationPatience

validationPatience = 5;

在培训之前,初始化一个变量earlyStopvalidationLosses,在那里earlyStop是一个国旗停止训练早期和validationLosses包含的损失比较。初始化早期停止标志和数组的验证与损失

earlyStop = false;如果isfinite (validationPatience) validationLosses =正(1,validationPatience);结束

培训内部循环,在循环mini-batches,添加earlyStop国旗的循环条件。

hasdata (ds) & & ~ earlyStop结束

在验证步骤,添加新的验证数组损失validationLosses。如果数组的第一个元素是最小的,然后设置earlyStop旗帜真正的。否则,删除第一个元素。

如果isfinite (validationPatience) validationLosses = [validationLosses validationLoss);如果分钟(validationLosses) = = validationLosses earlyStop = true (1);其他的validationLosses (1) = [];结束结束

l2正则化

应用L2正规化的权重,使用dlupdate函数。

很容易地指定L2正则化因子,创建变量l2Regularization包含L2正则化因子。

l2Regularization = 0.0001;

在培训期间,损失计算模型和梯度后,对于每一个的重量参数,添加L的产物2正则化因子和权重计算梯度使用dlupdate函数。只更新重量参数,提取的参数名称“重量”

idx = net.Learnables。参数= =“重量”;梯度(idx:) = dlupdate (@ (g, w) g + l2Regularization * w梯度(idx:), net.Learnables (idx:));

在添加L之后2正则化参数的梯度,更新网络参数。

梯度剪裁

剪辑渐变,使用dlupdate函数。

容易地指定梯度剪切选项,创建变量gradientThresholdMethodgradientThreshold,在那里gradientThresholdMethod包含“global-l2norm”,“l2norm”,或“绝对值”,gradientThreshold是一个积极的标量包含阈值或

gradientThresholdMethod =“global-l2norm”;gradientThreshold = 2;

创建函数命名thresholdGlobalL2Norm,thresholdL2Norm,thresholdAbsoluteValue,应用“global-l2norm”,“l2norm”,“绝对值”阈值方法,分别。

“global-l2norm”选项,功能作用于所有模型的梯度。

函数gradientThreshold梯度= thresholdGlobalL2Norm(梯度)globalL2Norm = 0;i = 1:元素个数(梯度)globalL2Norm = globalL2Norm +总和(梯度{我}(:)。^ 2);结束globalL2Norm =√globalL2Norm);如果globalL2Norm > gradientThreshold normScale = gradientThreshold / globalL2Norm;i = 1:元素个数(梯度)梯度{我}=梯度{我}* normScale;结束结束结束

“l2norm”“绝对值”独立选择,每个梯度上的功能操作。

函数梯度= thresholdL2Norm渐变gradientThreshold gradientNorm =√(总和(梯度(:)^ 2));如果gradientNorm > gradientThreshold梯度=梯度* (gradientThreshold / gradientNorm);结束结束
函数gradientThreshold梯度= thresholdAbsoluteValue(梯度)梯度(梯度> gradientThreshold) = gradientThreshold;梯度(梯度< -gradientThreshold) = -gradientThreshold;结束

在培训期间,损失计算模型和梯度后,应用适当的梯度渐变使用剪切方法dlupdate函数。因为“global-l2norm”选择要求所有梯度值,应用thresholdGlobalL2Norm直接函数梯度。为“l2norm”“绝对值”选择,更新梯度独立使用dlupdate函数。

开关gradientThresholdMethod情况下“global-l2norm”梯度= thresholdGlobalL2Norm(梯度,gradientThreshold);情况下“l2norm”梯度= dlupdate (@ (g) thresholdL2Norm (g, gradientThreshold),渐变);情况下“绝对值”梯度= dlupdate (@ (g) thresholdAbsoluteValue (g, gradientThreshold),渐变);结束

应用梯度阈值操作后,更新网络参数。

单CPU或GPU培训

软件,默认情况下,只使用CPU执行计算。训练在一个GPU,转换数据gpuArray对象。使用GPU需要并行计算工具箱™许可和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)

容易地指定执行环境,创建变量executionEnvironment包含两“cpu”,“图形”,或“汽车”

executionEnvironment =“汽车”

培训期间,阅读mini-batch后,检查执行环境的选择和转换数据gpuArray如果有必要的话)。的canUseGPU函数检查可用的gpu。

如果(executionEnvironment = =“汽车”& & canUseGPU) | | executionEnvironment = =“图形”X = gpuArray (X);结束

检查点

拯救检查点网络在训练保存网络使用保存函数。

方便地指定检查点是否应该打开,创建变量checkpointPath检查点网络或包含的文件夹是空的。

checkpointPath = fullfile (tempdir,“检查点”);

如果检查点文件夹不存在,在训练之前,创建检查点文件夹。

如果~存在(checkpointPath“dir”mkdir (checkpointPath)结束

在培训期间,在一个时代的终结,在垫文件保存网络。指定一个文件名包含当前迭代数,日期和时间。

如果~ isempty (checkpointPath) D =字符串(datetime (“现在”格式=“yyyy_MM_dd__HH_mm_ss”));文件名=“net_checkpoint__”+迭代+“_”+ D +“.mat”;保存(文件名,“净”)结束
在哪里dlnetwork对象保存。

另请参阅

|||||||

相关的话题