主要内容

卷积神经网络参数的建立与训练

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

选择= trainingOptions(“亚当”);trainedNet = trainNetwork(数据、层选项);

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

指定求解器和最大纪元数

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

“亚当”(衍生自自适应估计时刻求解器通常是一个好的优化器,可以先尝试。你也可以试试“rmsprop”(均方根传播)和“个”(带动量的随机梯度下降)优化器,看看这是否改善了训练。不同的解决方案可以更好地解决不同的问题。有关不同求解器的更多信息,请参见随机梯度下降

求解器在每一步使用数据的子集更新参数。这个子集叫做amini-batch.控件可以指定小批处理的大小“MiniBatchSize”名称 - 值对参数培训选项.每个参数更新都称为迭代.对整个数据集进行一次完整的遍历称为时代.您可以使用使用的培训最大单位数“MaxEpochs”名称 - 值对参数培训选项.默认值是30,但您可以为小型网络或微调和迁移学习选择更少的纪元数量,其中大多数学习已经完成。

默认情况下,软件会在训练前对数据进行一次洗牌。属性可以更改此设置“洗牌”名称-值对的论点。

指定和修改学习率

属性指定全局学习率“InitialLearnRate”名称 - 值对参数培训选项.默认情况下,trainNetwork在整个培训过程中使用这个价值。您可以选择每隔一定时间修改学习率,方法是将学习率乘以一个因子。你可以在训练开始时选择一个较大的学习率,并在优化过程中逐步降低这个值,而不是在整个训练过程中使用一个较小的固定学习率。这样做可以缩短培训时间,同时随着培训的进行,可以采取更小的步骤,使损失最小化。

提示

如果培训期间的迷你批量损失变为,那么学习率可能太高了。试着降低学习率,例如将学习率降低到原来的3倍,然后重新开始网络训练。

要逐渐降低学习速度,就要使用“LearnRateSchedule”、“分段”名称-值对的论点。一旦你选择了这个选项,trainNetwork每10个纪元将初始学习率乘以0.1。可以通过使用。指定减少初始学习率和周期数的因子“LearnRateDropFactor”“LearnRateDropPeriod”名称-值对参数。

指定验证数据

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

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

为了减少过拟合,可以尝试添加数据增强。使用一个augmentedImageDatastore在输入图像上执行随机转换。这有助于防止网络存储对象的确切位置和方向。你也可以尝试增加l2正则化使用“L2Regularization”名称值对参数,使用批量阵列层后卷积层,并添加丢弃层。

选择硬件资源

如果有可用的GPU,则trainNetwork默认情况下,将其用于培训。除此以外,trainNetwork使用一个CPU。或者,您可以使用“ExecutionEnvironment”名称-值对的论点。您可以指定单个CPU(“cpu”),单个GPU ('GPU')、多个gpu (“multi-gpu”),或本地并行池或计算集群(“平行”).除了“cpu”需要并行计算工具箱™。在GPU上进行培训需要支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱)

保存检查点网络和恢复培训

深度学习工具箱™使您可以在训练期间的每个纪元后将网络保存为。mat文件。当您拥有一个大型网络或大型数据集,并且训练需要很长时间时,这种定期保存特别有用。如果训练因某种原因中断,您可以从上次保存的检查点网络恢复训练。如果你想要trainNetwork要保存检查点网络,那么您必须使用使用方法指定路径的名称“CheckpointPath”名称 - 值对参数培训选项.如果指定的路径不存在,则培训选项返回一个错误。

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

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

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

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

您可以将学习参数设置为与指定的全局值不同培训选项在具有学习参数的层中,例如卷积和完全连接的层。例如,要调整偏差或权重的学习率,您可以指定值的值BiasLearnRateFactor或者WeightLearnRateFactor属性层,分别。的trainNetwork函数乘以您通过使用指定的学习速率培训选项与这些因素。同样,您还可以指定L2正则化因素的权重和偏差在这些层中指定BiasL2FactorWeightL2Factor属性,分别。trainNetwork然后乘以l2使用指定的正则化因子培训选项与这些因素。

在卷积和全连接层中初始化权值

层权值是可学习的参数。属性可以直接指定权重的初始值权重属性的层。当你训练一个网络,如果权重属性为非空,则trainNetwork使用权重属性作为初始值。如果权重属性为空trainNetwork使用指定的初始化程序WeightsInitializer属性的层。

训练你的网络

在指定网络的层次和训练参数之后,可以使用训练数据对网络进行训练。的数据、层和训练选项都是输入参数trainNetwork函数,如本例所示。

layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fulllyconnectedlayer (10) softmaxLayer classificationLayer];选择= trainingOptions(“亚当”);事先= trainNetwork(数据、层选项);

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

另请参阅

|||

相关话题