参数设置与卷积神经网络训练
在定义神经网络的层之后,如指定卷积神经网络的层数,下一步是为网络设置培训选项。使用trainingOptions
函数定义全局训练参数。返回的对象可以训练一个网络trainingOptions
类的输入参数trainNetwork
函数。例如:
options = trainingOptions('adam');trainedNet = trainNetwork(数据,层,选项);
具有可学习参数的层也有调整学习参数的选项。有关更多信息,请参见在卷积层和全连接层中设置参数.
指定求解器和最大epoch数
trainNetwork
可以使用不同的随机梯度下降变体来训练网络。属性指定优化算法solverName
的观点trainingOptions
.为了使损失最小化,这些算法通过在损失函数的负梯度方向上采取小步骤来更新网络参数。
的“亚当”
(来自自适应矩估计)求解器通常是一个很好的优化器,可以先尝试。你也可以试试“rmsprop”
(均方根传播)和“个”
(随机梯度下降和动量)优化器,看看这是否能改善训练。不同的解决方法对不同的问题效果更好。有关不同求解器的更多信息,请参见随机梯度下降.
解算器每一步使用数据的子集更新参数。这个子集叫做amini-batch.方法指定小批处理的大小“MiniBatchSize”
的名称-值对参数trainingOptions
.每个参数更新称为迭代.对整个数据集的完整遍历称为时代.属性指定要训练的最大epoch数“MaxEpochs”
的名称-值对参数trainingOptions
.缺省值是30,但是对于小型网络或微调和迁移学习,您可以选择更少的epoch数,因为大多数学习都已经完成了。
默认情况下,该软件在训练前对数据进行一次洗牌。属性可以更改此设置“洗牌”
名称-值对参数。
指定和修改学习率
属性指定全局学习率“InitialLearnRate”
的名称-值对参数trainingOptions
.默认情况下,trainNetwork
在整个训练过程中使用这个值。您可以选择通过将学习率与一个因子相乘来每隔一定周期修改学习率。而不是在整个训练过程中使用一个小的固定的学习率,您可以在训练开始时选择一个较大的学习率,并在优化过程中逐渐降低这个值。这样做可以缩短训练时间,同时随着训练的进行,使更小的步骤达到最小损失。
提示
如果训练过程中的小批量丢失南
,那么学习率可能太高了。尝试降低学习率,例如降低3倍,并重新启动网络训练。
要逐步降低学习率,请使用“LearnRateSchedule”、“分段”
名称-值对参数。一旦你选择了这个选项,trainNetwork
每10个epoch将初始学习率乘以0.1。属性可以指定减少初始学习率和epoch数的因子“LearnRateDropFactor”
而且“LearnRateDropPeriod”
名称-值对参数。
指定验证数据
要在培训期间执行网络验证,请使用“ValidationData”
的名称-值对参数trainingOptions
.默认情况下,trainNetwork
通过预测验证数据的响应并计算验证损失和准确性(回归网络的均方根误差),每50次迭代验证一次网络。方法更改验证频率“ValidationFrequency”
名称-值对参数。如果你的网络在预测期间的行为与训练期间的行为不同(例如,退出层),那么验证精度可以高于训练(小批量)精度。您还可以使用验证数据在验证损失停止减少时自动停止训练。若要启用自动验证停止,请使用“ValidationPatience”
名称-值对参数。
在训练期间定期执行验证可以帮助您确定网络是否过度拟合训练数据。一个常见的问题是,网络只是简单地“记忆”训练数据,而不是学习使网络能够对新数据做出准确预测的一般特征。为了检查你的网络是否过度拟合,将训练损失和准确性与相应的验证指标进行比较。如果训练损失显著低于验证损失,或者训练精度显著高于验证精度,那么你的网络就是过拟合的。
为了减少过拟合,您可以尝试添加数据增强。使用一个augmentedImageDatastore
对输入图像执行随机转换。这有助于防止网络记住物体的确切位置和方向。你也可以试着增加L2正则化使用“L2Regularization”
名称-值对参数,在卷积层之后使用批归一化层,并添加退出层。
选择硬件资源
如果GPU可用,那么trainNetwork
默认情况下,使用它进行培训。否则,trainNetwork
使用CPU。方法指定所需的执行环境“ExecutionEnvironment”
名称-值对参数。您可以指定单个CPU (“cpu”
),单一GPU (“图形”
)、多个图形处理器(“multi-gpu”
),或本地并行池或计算集群(“平行”
).所有选项“cpu”
需要并行计算工具箱™。在GPU上进行训练需要支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱).
保存检查点网络并恢复培训
深度学习工具箱™使您能够在训练期间将网络保存为.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
在具有可学习参数的层中,例如卷积层和全连接层。例如,要调整偏差或权重的学习率,可以为BiasLearnRateFactor
或WeightLearnRateFactor
层的属性,分别。的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) fullyConnectedLayer(10) softmaxLayer classificationLayer];options = trainingOptions('adam');convnet = trainNetwork(数据,层,选项);
训练数据可以是数组、表或ImageDatastore
对象。有关更多信息,请参见trainNetwork
函数参考页面。
另请参阅
trainingOptions
|trainNetwork
|Convolution2dLayer
|FullyConnectedLayer