深度学习分类

算子列表 ↓

本章所述的工作流程和算子已过时,仅为向后兼容性而保留。 新应用程序应使用 深度学习 / 分类 中描述的工作流程和算子。

本章阐述了如何基于深度学习进行分类,涵盖训练阶段与推理阶段的应用。

一般工作流程

本节描述了使用过时工作流程进行深度学习分类的主要步骤和工作流程。

准备网络和数据

本部分内容涉及如何准备和预处理您的数据。

  1. 首先,必须读取预训练网络使用算子

    当您需要读取自己训练好的网络时,也会使用此算子,前提是您已使用 write_dl_classifierwrite_dl_classifierWriteDlClassifierWriteDlClassifierWriteDlClassifierwrite_dl_classifier 将其保存。

  2. 读取深度学习分类训练的数据,以下函数

    • read_dl_classifier_data_set

    是可用的。通过此函数,您可以获取图像文件路径及其对应标签(即真实标签)的列表,同时还能获得唯一类别列表——这些类别至少包含列表中的一张图像。

  3. 该网络将对图像提出若干要求,包括图像尺寸和灰度值范围。默认值在 read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifierread_dl_classifier 中列出,这些是网络预训练时使用的参数。网络架构允许设置不同图像尺寸,可通过 set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParamset_dl_classifier_param 调整,但根据具体网络类型,更改参数可能需要重新训练。实际设置的参数值可通过以下算子获取

    函数 preprocess_dl_classifier_images 为实现此类预处理阶段提供了极佳的指导。我们建议在开始分类器训练前,对所有用于训练的图像进行预处理并存储,因为这能显著加快训练速度。

  4. 接下来,我们建议将数据集拆分为三个独立的数据集,分别用于训练、验证和测试,详见 深度学习 一章中的“数据”部分。可通过以下函数实现

    • split_dl_classifier_data_set

  5. 您需要指定要通过分类器进行区分的 'classes'"classes""classes""classes""classes""classes"(这些类需通过先前调用 read_dl_classifier_data_set 确定)。为此,算子

    是可用的。

    该算子也可用于设置训练过程中至关重要的超参数,例如 'batch_size'"batch_size""batch_size""batch_size""batch_size""batch_size"'learning_rate'"learning_rate""learning_rate""learning_rate""learning_rate""learning_rate"。详细说明请参阅 深度学习 一章及 set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParamset_dl_classifier_param 的文档。

训练网络并评估训练进度

当您的网络配置完成且数据准备就绪后,就该为您的特定任务训练分类器了。

  1. 设置用于训练的超参数使用算子

    有关可能的超参数概述,请参阅 set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParamset_dl_classifier_param 的文档。更多说明可参见 深度学习 一章。

  2. 为了训练分类器,算子

    是可用的。中间训练结果存储在输出句柄中。

    正如 train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatchtrain_dl_classifier_batch 名称所示,该算子可一次性处理一批数据(图像及其对应的真实标签)。我们通过循环遍历训练数据,利用 train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatchtrain_dl_classifier_batch 对分类器进行连续训练。该过程可重复执行多次,并循环进行多个训练 epoch(周期),直至训练结果达到预期效果。

  3. 为评估分类器学习新任务的效果,函数

    • plot_dl_classifier_training_progress

    已提供。通过该函数可绘制训练过程中的分类误差曲线。为计算可视化所需的输入数据,以下函数

    • select_percentage_dl_classifier_data

    • apply_dl_classifier_batchwise

    • evaluate_dl_classifier

    是可用的。借助这些工具,您可以减少用于分类验证的图像数量,将分类器应用于选定数据,并计算例如前 1 个错误。

应用并评估最终分类器

我们的分类器已针对您的任务完成训练,随时可投入使用。但在实际环境中部署之前,您应基于测试数据评估该分类器的性能表现。

  1. 要在包含任意数量图像的集合上应用分类器,请使用算子

    该算子的运行时间取决于给定图像集所需的批次数量。

    结果将通过句柄返回。

    要检索预测的类别和置信度,请使用算子

  2. 现在是评估这些结果的时候了。分类器的性能可通过与训练时相同的 evaluate_dl_classifier 函数进行评估。

    为可视化并分析分类器的质量,混淆矩阵是一个有用的工具(详见下文说明)。为此,您可以使用以下函数

    • gen_confusion_matrix

    • gen_interactive_confusion_matrix

    交互式函数允许您选择特定类别的示例,但无法处理导出的代码。

    此外,在对数据集应用分类器后,可使用

    • get_dl_classifier_image_results

    函数根据特定条件(例如错误分类的图像)显示并返回图像。随后,您可将此输入作为参数传入函数

    • dev_display_dl_classifier_heatmap

    以生成输入图像的热图。通过该热图可分析图像中哪些区域对分类结果具有影响。

推理阶段

当分类器训练完成且您对其性能满意时,即可使用它对新图像进行分类。为此,您只需根据网络要求对图像进行预处理(即与训练分类器时对数据集所做的处理相同),然后应用分类器使用函数

分类数据

我们将用于训练的数据与用于推理的数据区分开来。后者仅包含原始图像。但对于前者,您已知晓图像所属类别,并通过对应标签提供此信息。

训练数据用于针对特定任务训练分类器。借助这些数据,分类器能够学习需要区分的类别及其代表样本的特征。在分类过程中,图像会被整体进行分类。因此训练数据包含图像及其对应的真实标签(即您所指认的图像所属类别)。请注意图像应尽可能具有代表性。真实标签的存储与检索方式存在多种可能性,read_dl_classifier_data_set 函数支持以下图像真实标签来源:

在训练分类器时,我们采用一种称为迁移学习的技术(参见 深度学习 一章)。此方法所需资源较少,但仍需准备合适的数据集,通常每类数据量需达数百至数千条。虽然通常而言,基于更大数据集训练的网络更可靠,但所需训练数据量也取决于任务的复杂程度。同时需确保训练数据充足,以便将其划分为三个子集——这些子集应尽可能相互独立且服从相同分布(详见 深度学习 一章中的“数据”部分)。

无论应用场景如何,网络对图像均有尺寸、灰度值范围及类型等要求。具体数值取决于网络本身,可通过 get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParamget_dl_classifier_param 函数查询。关于如何实现此类预处理阶段,可参考 preprocess_dl_classifier_images 函数获取指导。


算子列表

apply_dl_classifierApplyDlClassifierapply_dl_classifierApplyDlClassifierapply_dl_classifier应用深度学习分类器
使用基于深度学习的分类器推理一组图像的类关系。
clear_dl_classifierClearDlClassifierclear_dl_classifierClearDlClassifierclear_dl_classifier清除深度学习分类器
清除基于深度学习的分类器。
clear_dl_classifier_resultClearDlClassifierResultclear_dl_classifier_resultClearDlClassifierResultclear_dl_classifier_result清除深度学习分类器结果
清除包含基于深度学习的分类结果的句柄。
clear_dl_classifier_train_resultClearDlClassifierTrainResultclear_dl_classifier_train_resultClearDlClassifierTrainResultclear_dl_classifier_train_result清除深度学习训练结果
清除基于深度学习的分类器训练结果的句柄。
deserialize_dl_classifierDeserializeDlClassifierdeserialize_dl_classifierDeserializeDlClassifierdeserialize_dl_classifier反序列化深度学习分类器
反序列化基于深度学习的分类器。
get_dl_classifier_paramGetDlClassifierParamget_dl_classifier_paramGetDlClassifierParamget_dl_classifier_param获取深度学习分类器参数
返回基于深度学习的分类器的参数。
get_dl_classifier_resultGetDlClassifierResultget_dl_classifier_resultGetDlClassifierResultget_dl_classifier_result获取深度学习分类器结果
检索基于深度学习的分类器推理的分类结果。
get_dl_classifier_train_resultGetDlClassifierTrainResultget_dl_classifier_train_resultGetDlClassifierTrainResultget_dl_classifier_train_result获取深度学习分类器训练结果
返回基于深度学习的分类器的单个训练步骤的结果。
read_dl_classifierReadDlClassifierread_dl_classifierReadDlClassifierread_dl_classifier读取深度学习分类器
从文件中读取基于深度学习的分类器。
serialize_dl_classifierSerializeDlClassifierserialize_dl_classifierSerializeDlClassifierserialize_dl_classifier序列化深度学习分类器
序列化基于深度学习的分类器。
set_dl_classifier_paramSetDlClassifierParamset_dl_classifier_paramSetDlClassifierParamset_dl_classifier_param设置深度学习类分类器参数
设置基于深度学习的分类器的参数。
train_dl_classifier_batchTrainDlClassifierBatchtrain_dl_classifier_batchTrainDlClassifierBatchtrain_dl_classifier_batch训练深度学习分类器批次
对一批图像执行基于深度学习的分类器的训练步骤。
write_dl_classifierWriteDlClassifierwrite_dl_classifierWriteDlClassifierwrite_dl_classifier写入深度学习分类器
在文件中写入一个基于深度学习的分类器。