在 本教程的上一阶段,我们讨论了创建自己的 Windows 机器学习模型和应用的先决条件,并下载了要使用的映像集。 在此阶段,我们将了解如何使用 ML.NET 模型生成器将图像集转换为图像分类模型。
创建项目
- 打开 Visual Studio,然后选择“创建新项目”。
- 在搜索栏中,键入 .NET,选择 C# 作为语言和控制台作为平台,然后选择 C# 控制台应用 (.NET Core) 项目模板。
- 在配置窗口中:
- 为项目命名。 在这里,我们称之为 MLNETTraining。
- 选择项目的位置。
- 请确保
Place solution and project in the same directory
未选中。 - 按键
create
创建项目。
设置模型生成器
现在,你将向项目添加模型生成器。
- 右键单击解决方案资源管理器中的 MLNETTraining 项目,然后选择
Add > Machine Learning
。
这样,即可在 Visual Studio 的新停靠工具窗口中打开 ML.NET 模型生成器。 模型生成器将指导你完成构建机器学习模型的过程。
第一步是选择相关方案。 并非所有方案都支持 ONNX 格式。
如果训练环境为 Azure 云,则生成的模型采用 ONNX 格式,Windows ML 应用无需转换即可轻松使用。 但是,如果你决定在计算机上本地训练机器学习模型,则生成的模型将采用 ML.NET 格式。
- 除对象检测之外的所有方案都支持本地 CPU 训练。
- 图像分类支持本地 GPU 训练。
- Azure 训练支持图像分类和对象检测。
在本教程中,你将在 Azure 训练环境中训练图像分类模型。 输出模型采用 ONNX 格式。 完成培训需要 Azure 帐户。
选择图像分类方案。
选择“设置工作区”以设置 Azure 培训环境。
在右上角,登录到与 Azure 订阅关联的帐户。 在下面的菜单中:
- 选择相关的订阅。
- 选择并创建新的机器学习工作区。
- 选择或创建新的计算资源。
- 为工作区命名 – ImageClassificationMLNET。
重要
如果无法从模型生成器创建机器学习工作区,请按照以下步骤从 Azure 门户手动创建工作区。 否则,可以跳到步骤 4。
在 Azure 帐户中,选择“创建资源”
在搜索栏中,查找机器学习。
按“创建”创建新的机器学习工作区。
若要创建新工作区,需要提供订阅名称、选择或创建新资源组、为工作区命名并定义所有必需的参数,例如区域、存储帐户等。
在 ML.NET 中建立工作区并创建新的培训环境后,可以转到下一步。
等待机器学习服务的部署完成。
下一步是将数据添加到 Model Builder。
- 导航到图像数据集的位置,并选择具有相关食品类别的训练文件夹。 在本教程中,你将训练模型来识别沙漠、汤和水果,因此只需要数据集文件夹中的这些类别。
现在,你已准备好进入训练阶段!
训练模型
模型生成器会评估许多具有不同算法和设置的模型,以便提供性能最佳的模型。
- 选择“下一步”,然后选择“开始训练”以启动训练过程。 ML.Net 模型生成器首先将数据上传到 Azure,准备工作区,然后启动训练过程。
训练完成后,你将看到训练结果的摘要。
最佳准确性 - 显示模型生成器找到的最佳模型的准确性。 更高的准确度意味着模型在测试数据上预测得更正确。 在本例中,模型可以使用 95.42% 置信度预测正确的结果。
评估结果
进入下一步以评估训练结果。
从数据集的评估文件夹中选择图像并浏览预测。
将模型添加到解决方案
ML.NET 模型生成器可以自动将机器学习模型和用于训练和使用模型的项目添加到解决方案。
- 导航到培训过程中的使用部分,选择“添加到解决方案”。 这会将生成的模型添加到解决方案文件夹。
在解决方案资源管理器中,应会看到模型生成器生成的代码文件,包括模型 - ONNX 格式的 bestModel.onnx。
在 Azure 云环境中训练的模型,因此生成的模型采用 ONNX 格式。
探索模型
右键单击 bestModel.onnx,然后选择“打开包含文件夹”。
使用 Netron 程序打开模型文件。
单击 input1 节点以打开模型属性。
正如你所看到的,模型需要 32 位浮点张量(多维数组)对象作为输入,并将 Tensor 浮点数作为输出返回。 生成模型的方式,它不返回预测标签的字符串值,而是一个由三个数字构成的数组,每个数字表示食品类型的相关标签。 需要提取这些值才能使用 Windows ML 应用显示正确的预测。
标签 1 | 标签 2 | 标签 3 |
---|---|---|
0 | 1 | 2 |
甜点 | 汤 | Vegetable-Fruit |
后续步骤
训练机器学习模型后,即可 使用 Windows 机器学习在 UWP 应用中部署它