主要内容

参数设置与卷积神经网络训练

在定义神经网络的层之后指定卷积神经网络的层次,下一步是为网络设置培训选项。使用trainingOptions函数定义全局训练参数。要训练网络,使用返回的对象trainingOptions的输入参数trainNetwork函数。例如:

options = trainingOptions('adam');trainedNet = trainNetwork(数据,层,选项);

具有可学习参数的层也有调整学习参数的选项。有关更多信息,请参见在卷积和全连通层中设置参数

指定求解器和最大纪元数

trainNetwork可以使用不同变体的随机梯度下降来训练网络。方法指定优化算法solverName的观点trainingOptions.为了最小化损失,这些算法通过在损失函数负梯度的方向上进行小步来更新网络参数。

“亚当”(来自自适应力矩估计)求解器通常是一个很好的优化器,可以首先尝试。你也可以试试“rmsprop”(均方根传播)和“个”(带有动量的随机梯度下降)优化,看看这是否能提高训练。不同的解决方案对不同的问题更有效。有关不同求解器的更多信息,请参见随机梯度下降

求解器每一步使用数据的子集更新参数。这个子集叫做amini-batch.方法可以指定小批处理的大小“MiniBatchSize”的名值对参数trainingOptions.每次参数更新称为迭代.对整个数据集的完整传递称为时代.方法可以指定要训练的最大时间数“MaxEpochs”的名值对参数trainingOptions.默认值是30,但是对于小型网络或微调和迁移学习,您可以选择更少的epoch数,因为大多数学习已经完成。

默认情况下,该软件在训练前对数据进行一次洗牌。方法可以更改此设置“洗牌”名称-值对参数。

指定和修改学习率

参数可以指定全局学习率“InitialLearnRate”的名值对参数trainingOptions.默认情况下,trainNetwork在整个培训过程中使用此值。您可以选择通过将学习率与一个因子相乘来修改每一个特定次数的学习率。您可以在训练开始时选择较大的学习率,并在优化过程中逐渐降低该学习率,而不是在整个训练过程中使用较小的固定学习率。这样做可以缩短训练时间,同时在训练过程中实现更小的步骤以减少损失。

提示

如果训练过程中的小批量丢失,那么学习率就可能太高了。试着降低学习速率,例如降低3倍,并重新启动网络训练。

要逐步降低学习速率,请使用“LearnRateSchedule”、“分段”名称-值对参数。一旦你选择了这个选项,trainNetwork将初始学习率每10个周期乘以0.1倍。方法可以指定降低初始学习率和课时数的因素“LearnRateDropFactor”而且“LearnRateDropPeriod”名称-值对参数。

指定验证数据

方法指定验证数据以在培训期间执行网络验证“ValidationData”的名值对参数trainingOptions.默认情况下,trainNetwork通过预测验证数据的响应并计算验证损失和准确性(回归网络的均方根误差),每50次迭代验证网络。方法可以更改验证频率“ValidationFrequency”名称-值对参数。如果您的网络在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证精度可能高于训练(小批处理)精度。您还可以使用验证数据在验证损失停止减少时自动停止训练。若要启用自动验证停止,请使用“ValidationPatience”名称-值对参数。

在训练期间定期执行验证可以帮助您确定网络是否过度拟合训练数据。一个常见的问题是,网络只是简单地“记忆”训练数据,而不是学习使网络能够对新数据做出准确预测的一般特征。要检查网络是否过拟合,请将训练损失和准确性与相应的验证指标进行比较。如果训练损耗显著低于验证损耗,或者训练精度显著高于验证精度,那么网络就是过拟合的。

为了减少过拟合,可以尝试添加数据增强。使用一个augmentedImageDatastore对输入图像执行随机转换。这有助于防止网络记忆对象的准确位置和方向。你也可以试着增加L2的正则化“L2Regularization”名称-值对参数,在卷积层之后使用批处理归一化层,并添加退出层。

选择硬件资源

如果GPU可用,那么trainNetwork默认情况下,将其用于培训。否则,trainNetwork使用CPU。方法指定所需的执行环境“ExecutionEnvironment”名称-值对参数。你可以指定一个CPU (“cpu”)、单一图形处理器(“图形”)、多个图形处理器(“multi-gpu”)或本地并行池或计算集群(“平行”).除了“cpu”需要并行计算工具箱™。使用GPU进行培训需要支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU计算要求(并行计算工具箱)

保存检查点网络并恢复训练

深度学习工具箱™使您能够在培训期间将网络保存为.mat文件。当您拥有大型网络或大型数据集,并且训练需要很长时间时,这种定期节省尤其有用。如果训练因某种原因中断,您可以从最后保存的检查点网络恢复训练。如果你愿意trainNetwork方法来指定路径的名称,以保存检查点网络CheckpointPath选择trainingOptions.如果指定的路径不存在,则trainingOptions返回一个错误。

trainNetwork自动为检查点网络文件分配唯一的名称。在示例名称中,net_checkpoint__351__2018_04_12__18_09_52.mat, 351为迭代次数,2018年_04_12日期是,和18 _09_52是几点trainNetwork保存网络。您可以通过双击检查点网络文件或在命令行上使用load命令来加载它。例如:

负载net_checkpoint__351__2018_04_12__18_09_52.mat
然后,您可以通过使用网络的层作为输入参数来恢复训练trainNetwork.例如:

trainNetwork (XTrain TTrain、net.Layers选项)
您必须手动指定训练选项和输入数据,因为检查点网络不包含这些信息。示例请参见从检查点网络恢复培训

在卷积和全连通层中设置参数

可以将学习参数设置为不同于参数指定的全局值trainingOptions在具有可学习参数的层中,如卷积层和全连通层。例如,要调整偏差或权重的学习率,可以为BiasLearnRateFactorWeightLearnRateFactor层的属性,分别。的trainNetwork函数将指定的学习率乘以trainingOptions有了这些因素。类似地,您也可以指定L2的权值和偏差的正则化因子BiasL2Factor而且WeightL2Factor属性,分别。trainNetwork然后乘以L2指定的正则化因子trainingOptions有了这些因素。

卷积层和全连通层中的初始化权值

层权值是可学习的参数。方法可以直接指定权重的初始值权重层的属性。当你训练一个网络时,如果权重属性为非空,则trainNetwork使用权重属性作为初始值。如果权重那么,财产是空的trainNetwork类指定的初始化式WeightsInitializer层的属性。

训练你的人际网络

指定网络的层数和训练参数后,可以使用训练数据训练网络。的输入参数,包括数据、层和训练选项trainNetwork函数,如本例所示。

layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fulllyconnectedlayer (10) softmaxLayer classificationLayer];options = trainingOptions('adam');convnet = trainNetwork(数据,层,选项);

训练数据可以是数组、表或ImageDatastore对象。有关更多信息,请参见trainNetwork功能参考页面。

另请参阅

|||

相关的话题