这个例子展示了如何训练一个用自定义学习率计划来分类手写数字的网络。
如果trainingOptions
不提供您需要的选项(例如,自定义学习率时间表),那么您可以使用自动区分定义自己的自定义培训循环。
这个例子训练一个网络用基于时间的衰减学习率计划:对于每个迭代,求解器使用学习率给定
, 在哪里t是迭代次数,
是初始学习率,和k是衰减的。
负荷训练数据
使用使用的图像数据存储将数字数据加载imageDatastore
函数并指定包含图像数据的文件夹。
将数据分区为培训和验证集。使用该数据留出10%的数据进行验证splitEachLabel
函数。
本例中使用的网络需要输入大小为28 × 28 × 1的图像。若要自动调整训练图像的大小,请使用增强图像数据存储。指定对训练图像执行的附加增强操作:在水平和垂直轴上随机平移图像,最多5个像素。数据增强有助于防止网络过拟合和记忆训练图像的准确细节。
要自动调整验证图像的大小而不执行进一步的数据增强,请使用增强图像数据存储,而无需指定任何其他预处理操作。
确定训练数据中的课程数量。
定义网络
定义网络分类网络。
创建一个dlnetwork.
来自图层图的对象。
[11×2 table] Learnables: [14×3 table] State: [6×3 table] InputNames: {'input'} OutputNames: {'softmax'}
定义模型梯度函数
创建函数modelGradients
,并在示例的最后列出dlnetwork.
对象,一个带有相应标签的小批输入数据,返回损耗相对于网络中可学习参数的梯度和相应的损耗。
指定培训选项
用128个小批量训练10个阶段。
指定SGDM优化的选项。指定初始学习速率为0.01,衰减为0.01,动量为0.9。
火车模型
创建一个minibatchqueue
对象,该对象在训练期间处理和管理小批图像。为每个mini-batch:
使用自定义小批量预处理功能preprocessMiniBatch
(在本例末尾定义)将标签转换为一个热编码变量。
使用尺寸标签格式化图像数据'SSCB'
(空间、空间、通道、批处理)。默认情况下,minibatchqueue
对象将数据转换为dlarray
具有基础类型的对象单
.不要在类标签中添加格式。
在GPU上培训如果有一个可用的。默认情况下,minibatchqueue
对象将每个输出转换为GPUArray.
图形处理器是否可用。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU通金宝app过发布支持(并行计算工具箱).
初始化培训进度图。
初始化SGDM求解器的速度参数。
使用自定义训练循环训练网络。对于每个epoch,将数据和循环扫描迷你批次数据。为每个mini-batch:
测试模型
将验证集上的预测结果与真实标签进行比较,验证模型的分类精度。
训练后,对新数据进行预测不需要标签。创建minibatchqueue
对象,只包含测试数据的预测器:
循环遍历小批和分类图像使用模特预分规
函数,在示例的末尾列出。
评估分类的准确性。
模型梯度函数
的modelGradients
功能需要A.dlnetwork.
对象dlnet
,迷你批次输入数据dlX
与相应的标签Y
并返回到学习参数的损失梯度dlnet
、网络状态和丢失。若要自动计算梯度,请使用dlgradient
函数。
模型的预测函数
的模特预分规
功能需要A.dlnetwork.
对象dlnet
,一个minibatchqueue
输入数据兆贝可
和网络类,并通过迭代所有数据计算模型预测minibatchqueue
对象。函数使用onehotdecode
函数查找预测的得分最高的类。
迷你批处理预处理功能
的preprocessMiniBatch
功能预处理使用以下步骤的迷你预测器和标签:
方法对图像进行预处理PreprocessminibatchPredictors.
函数。
从传入单元格数组中提取标签数据并沿着第二维地连接到分类阵列中。
一次性将分类标签编码为数字数组。编码到第一个维度将生成一个与网络输出形状匹配的编码数组。
小批预测器预处理功能
的PreprocessminibatchPredictors.
功能预处理通过从输入单元阵列中提取图像数据并连接到数字阵列中的图像数据来预处理迷你批量预测器。对于灰度输入,在第四维上连接到每个图像的第三维度,用作单例通道维度。