设置参数并训练卷积神经网络
要为 trainnet
函数指定训练选项,请使用 trainingOptions
函数。将结果选项对象传递给 trainnet
函数。
例如,要创建指定以下内容的训练选项对象:
使用自适应矩估计 (Adam) 求解器进行训练。
最多进行四轮训练。
在图中监控训练进度并监控准确度度量。
禁用详尽输出。
用法:
options = trainingOptions("adam", ... MaxEpochs=4, ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
要使用这些训练选项训练网络,请使用:
net = trainnet(data,layers,lossFcn,options);
注意
本主题概述一些常用的训练选项。此处列出的选项只是一部分。有关完整列表,请参阅 trainingOptions
。
求解器
求解器是训练函数用于优化可学习参数的算法。使用 trainingOptions
函数的第一个参量指定求解器。例如,要使用 Adam 优化器的默认设置创建训练选项对象,请使用:
options = trainingOptions("adam");
有关详细信息,请参阅 trainingOptions
。
提示
不同的任务最好采用不同的求解器。Adam 求解器通常适合作为首先尝试的优化器。
监控选项
为了监控训练进度,您可以在图中显示训练度量。例如,要在图中监控准确度并禁用详尽输出,请使用:
options = trainingOptions("adam", ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
有关详细信息,请参阅 trainingOptions
。
数据格式选项
大多数深度学习网络和函数以不同方式对输入数据的不同维度进行操作。
例如,LSTM 运算在输入数据的时间维度上进行迭代,而批量归一化运算在输入数据的批量维度上进行归一化。
在大多数情况下,您可以将训练数据直接传递给网络。如果数据的布局与网络预期的布局不同,您可以使用数据格式指定数据的布局。
数据格式是一个字符串,其中每个字符描述对应数据的维度的类型。
这些字符是:
"S"
- 空间"C"
- 通道"B"
- 批量"T"
- 时间"U"
- 未指定
例如,假设有一个包含一批序列的数组,其中第一个、第二个和第三个维度分别对应于通道、观测值和时间步。您可以指定此数组的格式为 "CBT"
(通道、批量、时间)。
如果数据的布局与网络预期的布局不同,则提供数据格式信息通常要比重构和预处理数据更容易。例如,要指定您具有序列数据,其中第一个、第二个和第三个维度分别对应于通道、观测值和时间步,请使用以下格式指定输入数据的格式为 "CBT"
(通道、批量、时间):
options = trainingOptions("adam", ... InputDataFormats="CBT");
有关详细信息,请参阅 trainingOptions
。
随机求解器选项
随机求解器通过迭代小批量数据并更新神经网络可学习参数来训练神经网络。您可以指定随机求解器选项,这些选项用于控制小批量、轮(对训练数据的一次完整遍历)数、学习率和其他求解器特定设置,例如带动量的随机梯度下降 (SGDM) 求解器的动量。例如,要指定小批量为 16,初始学习率为 0.01,请使用:
options = trainingOptions("adam", ... MiniBatchSiize=16, ... InitialLearnRate=0.01);
有关详细信息,请参阅 trainingOptions
。
提示
如果训练期间的小批量损失变为 NaN
,则学习率可能过高。请尝试降低学习率,例如降低为三分之一,然后重新开始网络训练。
L-BFGS 求解器选项
有限内存的 Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) 求解器是一个全批量求解器,这意味着它可以在单次迭代中处理整个训练集。您可以指定控制迭代(训练数据的一次完整遍历)、线搜索和其他求解器特定设置的 L-BFGS 求解器选项。例如,要指定使用 L-BFGS 训练 2000 次迭代,并找到满足强 Wolfe 条件的学习率,请使用:
options = trainingOptions("lbfgs", ... MaxIterations=2000, ... LineSearchMethod="strong-wolfe");
有关详细信息,请参阅 trainingOptions
。
验证选项
您可以使用保留的验证数据集来监控训练进度。在训练期间以固定间隔执行验证有助于确定您的网络是否在对训练数据进行过拟合。要检查您的网络是否正在过拟合,请将训练度量与对应的验证度量进行比较。如果训练度量明显好于验证度量,则网络可能过拟合。例如,要指定验证数据集并每 100 次迭代验证一次网络,请使用:
options = trainingOptions("adam", ... ValidationData={XValidation,TValidation}, ... ValidationFrequency=100);
如果您的网络中的层在预测过程中的行为不同于在训练过程中的行为(例如,丢弃层),则验证度量可能优于训练度量。
有关详细信息,请参阅 trainingOptions
。
正则化和归一化选项
您可以使用正则化和归一化来防止过拟合并改进收敛。正则化可以通过向损失函数添加罚分项来帮助防止过拟合。归一化可以通过将输入数据缩放到标准范围来改进收敛性和稳定性。例如,要将 L2 正则化因子指定为 0.0002,请使用:
options = trainingOptions("adam", ... L2Regularization=0.0002);
有关详细信息,请参阅 trainingOptions
。
梯度裁剪选项
为了防止大梯度在训练过程中引入错误,您可以限制梯度的幅值。例如,要缩放梯度以使幅值等于 2,请使用
options = trainingOptions("adam", ... GradientThresholdMethod="absolute-value", ... GradientThreshold=2);
有关详细信息,请参阅 trainingOptions
。
序列选项
训练神经网络通常需要固定大小的数据,例如,具有相同数量的通道和时间步的序列。要变换序列批量以使序列具有相同的长度,您可以指定填充和截断选项。例如,要左填充小批量以使每个小批量中的序列具有相同的长度,请使用:
options = trainingOptions("adam", ... SequencePaddingDirection="left");
有关详细信息,请参阅 trainingOptions
。
硬件和加速选项
默认情况下,该软件使用支持的 GPU(如果有)进行训练。使用 GPU 需要 Parallel Computing Toolbox™ 许可证。有关受支持设备的信息,请参阅GPU Computing Requirements (Parallel Computing Toolbox)。您可以指定其他硬件和加速选项。例如,要指定在一台计算机上使用多个 GPU,根据您的默认集群配置文件使用本地并行池,请使用:
options = trainingOptions("adam", ... ExecutionEnvironment="multi-gpu");
有关详细信息,请参阅 trainingOptions
。
检查点选项
对于大型网络和大型数据集,运行训练可能需要很长时间。要在训练期间定期保存网络,您可以保存检查点网络。例如,要在名为 "checkpoints"
的文件夹中每隔 5 轮训练保存一个检查点网络,请使用
options = trainingOptions("adam", ... CheckpointPath="checkpoints", ... CheckpointFrequency=5);
如果训练因某种原因中断,您可以从上次保存的检查点神经网络继续训练。
有关详细信息,请参阅 trainingOptions
。
另请参阅
trainnet
| trainingOptions
| dlnetwork