概述
Set Up Parameters and Train Convolutional Neural Network
- 指定优化器和最大轮次数Specify Solver and Maximum Number of Epochs
- 指定和修改学习率Specify and Modify Learning Rate
- 指定验证数据Specify Validation Data
- 选择硬件资源Select Hardware Resource
- 保存检查点网络并恢复训练Save Checkpoint Networks and Resume Training
- 在卷积和完全连接的层中设置参数Set Up Parameters in Convolutional and Fully Connected Layers
- 训练网络Train Your Network
本文是对MATLAB官网Set Up Parameters and Train Convolutional Neural Network的翻译,主要内容是设置参数并训练卷积神经网络的要点。
定义了卷积神经网络的指定层之后,下一步是设置网络的训练选项。使用trainingOptions函数设置全局训练参数。然后trainNetwork使用这些参数来执行训练。trainingOptions将这些参数作为TrainingOptionsSGDM对象返回,必须将其作为输入参数提供给trainNetwork。例如,
opts = trainingOptions('sgdm');
convnet = trainNetwork(data,layers,opts);
含有可学习参数的层还具有调整学习参数的选项。有关更多信息,请参见Set Up Parameters in Convolutional and Fully Connected Layers。
指定优化器和最大轮次数Specify Solver and Maximum Number of Epochs
trainNetwork可以使用随机梯度下降的不同变体来训练网络。 通过使用trainingOptions的solverName参数来指定优化算法。 为了使损失最小化,这些算法通过在损失函数的负梯度方向上采取小的步骤来更新网络参数。
“adam”(adaptive moment estimation)是比较常用的优化器,可以优先使用它进行网络优化。还可以使用“rmsprop”(root mean square propagation,均方根传播)和“sgdm”(stochastic gradient descent with momentum,具有动量的随机梯度下降)优化器,看是否可以改善训练效果。不同的优化器可以解决不同的问题,有关优化器的更多信息,参见随机梯度下降。
优化器在每一步中使用数据的子集更新参数。这个子集称为mini-batch(小批量)。可以使用trainingOptions的“MiniBatchSize”名称-值对参数指定mini-batch的大小。使用小批处理对参数的一次更新称为一个iteration(迭代)。遍历整个数据集的一次参数更新过程称为一个epoch(轮次)。运行训练的最大轮次数也是可以指定的参数,使用trainingOptions的“MaxEpochs”名称-值对参数进行设置。默认值是30,但是对于小型网络或者微调和转移学习的网络,可以选择较小的轮次,因为它们已经完成了大部分的学习。
默认情况下,matlab会在训练前对数据进行一次洗牌。可以使用“Shuffle”名称-值对参数更改此设置。
指定和修改学习率Specify and Modify Learning Rate
可以使用trainingOptions的“InitialLearnRate”名称-值对参数指定全局学习率。默认率是0.01,但是如果网络训练不收敛,可以选择一个更小的值。默认情况下,trainNetwork在整个训练过程中都会使用该学习率,除非选择在每个特定的时间段内通过乘以一个因子来更改这个值。可以在训练开始时选择一个较大的学习率,然后在优化过程中逐渐减小该值,而不必在整个训练过程中使用较小的固定学习率。这样做可以缩短培训时间,同时可以在训练过程中采取更小的步骤,将损失降到最低。
小建议:如果训练期间的小批量损失变为NaN,可能是因为学习率太高。尝试将学习率降低,如减小3倍,然后重新开始网络训练。
如果想逐步降低学习率,请使用“LearnRateSchedule”、“piecewise”名称-值对参数。一旦选择了该选项,trainNetwork默认情况下每10个轮次将初始学习率乘以0.1倍。但是,可以选择使用“LearnRateDropFactor”和“LearnRateDropPeriod”名称-值对参数分别指定降低初始学习率和轮次数的因子。
指定验证数据Specify Validation Data
要在训练期间执行网络验证,请使用trainingOptions的“ValidationData”名称-值对参数指定验证数据。默认情况下,trainNetwork每50次迭代通过预测验证数据的输出来验证网络效果并计算验证损失和精度(回归网络的均方根误差)。可以使用“ValidationFrequency”名称-值对参数更改验证频率。如果网络的层在验证期间的行为与在训练期间的行为不同(例如,dropout层在验证时不执行舍弃操作),那么验证的准确性可以高于训练(小批量处理)的准确性。当验证损失停止改进时,网络训练将自动停止。默认情况下,如果验证损失大于或等于之前连续5次最小的损失,则网络训练将停止。要更改在训练停止之前允许验证损失不减少的次数,请使用“ValidationPatience”名称-值对参数。
在训练期间定期执行验证可以帮助确定网络是否对训练数据进行了过度拟合。一个常见的问题是,该网络只是“记忆”训练数据,而不是学习使其能够准确预测新数据的一般特性。要检查网络是否过度拟合,将训练损失和准确性与相应的验证指标进行比较。如果训练损失显著低于验证损失,或者训练精度显著高于验证精度,那么网络就是过拟合。
为了减少过度拟合,可以尝试添加数据增强。使用augmentedImageSource对输入图像执行随机转换。这有助于防止网络记住对象的确切位置和方向。还可以尝试通过减少层数或卷积过滤器来减小网络大小,使用“L2Regularization”名称-值对参数增加L2正则化,在卷积层之后使用batch normalization layers(批处理归一化层),或者添加dropout层。
选择硬件资源Select Hardware Resource
如果有GPU,默认情况下,trainNetwork将其用于训练。 否则,trainNetwork使用CPU。或者可以使用“ ExecutionEnvironment”名称-值对参数指定所需的执行环境。可以指定单个CPU(‘cpu’),单个GPU(‘gpu’),多个GPU(‘multi-gpu’)或本地并行池或计算集群(‘parallel’)。除“ cpu”外,所有其他选项均需要Parallel Computing Toolbox™。 在GPU上进行培训需要具有CUDA®功能的GPU,且具有3.0或更高的计算能力。
保存检查点网络并恢复训练Save Checkpoint Networks and Resume Training
深度学习工具箱™允许在训练期间的每个轮次之后将网络另存为.mat文件。当训练大型网络或拥有大型数据集并且需要很长的训练时间时,这种定期保存特别有用。如果训练由于某种原因而中断,则可以从上次保存的检查点网络恢复训练。如果希望trainNetwork保存检查点网络,则必须使用trainingOptions的’CheckpointPath’名称-值对参数指定保存路径。如果指定的路径不存在,那么trainingOptions将返回错误。
trainNetwork自动为这些检查点网络文件分配唯一的名称。例如,convnet_checkpoint__351__2016_11_09__12_04_23。mat,其中351为迭代号,2016_11_09为日期,12_04_21为trainNetwork保存网络的时间。例如,可以通过双击或键入加载这些网络,
load convnet_checkpoint__351__2016_11_09__12_04_23.mat
然后,可以通过使用网络层作为trainNetwork的输入参数来恢复训练,例如:
trainNetwork(Xtrain,Ytrain,net.Layers,options)
必须手动指定训练选项和输入数据,因为检查点网络不包含此信息。有关示例,请参阅从Resume Training from Checkpoint Network。
在卷积和完全连接的层中设置参数Set Up Parameters in Convolutional and Fully Connected Layers
可以将学习参数设置为与trainingOptions在具有可学习参数的层(例如卷积层和完全连接层)中指定的全局值不同。例如,要调整偏差或权重的学习率,可以分别为层的BiasLearnRateFactor或WeightLearnRateFactor属性指定一个值。trainNetwork函数将trainingOptions中指定的学习率与这些因素相乘。同样,也可以通过指定BiasL2Factor和WeightL2Factor属性,为这些层中的权重和偏差指定L2正则化因子。然后,trainNetwork将使用trainingOptions指定的L2正则化因子与这些因子相乘。
初始化卷积和完全连接层中的权重
层的权重是可学习的参数。可以直接使用层的Weights属性指定权重的初始值。 训练网络时,如果层的Weights属性为非空,则trainNetwork使用Weights属性作为初始值。如果Weights属性为空,则trainNetwork使用该层的WeightsInitializer属性指定的初始化程序。
训练网络Train Your Network
在指定网络层和训练参数之后,可以使用训练数据来训练网络。 数据、层和训练选项都是trainNetwork函数的输入自变量,例如,
layers = [imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
options = trainingOptions('adam');
convnet = trainNetwork(data,layers,options);
训练数据可以是矩阵、表格或ImageDatastore对象。有关更多信息,请参见trainNetwork页面。
最后
以上就是落寞高跟鞋为你收集整理的MATLAB深度学习工具箱文档——Set Up Parameters and Train Convolutional Neural Network的全部内容,希望文章能够帮你解决MATLAB深度学习工具箱文档——Set Up Parameters and Train Convolutional Neural Network所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复