赞
踩
由于我是个机器学习菜狗,所以许多基础概念还未了解过,文中涉及到时,我会临时学习,以相对白话的方式介绍(当然存在不严谨之处不可避免,后期会慢慢修正)。
机器学习(Machine Learning),一般简称ML。本文后面也用ML缩写。
使用Windows ML可以在Windows应用程序中实现机器学习——这是一个高性能、可靠的API,用于在Windows设备上部署硬件加速的ML推理。
啥是ML推理?
在机器学习中,推理(inference)是指利用训练好的模型对新数据进行预测或分类的过程。在推理阶段,模型已经通过大量样本数据进行了训练,学习到了数据之间的潜在规律和关联。当有新的输入数据时,模型会根据这些已学习到的规律来预测结果或进行相应分类。简言之,推理就是让训练好的模型应用在实际问题中,为新数据提供预测和分类。
什么是又是训练好的模型呢?
在机器学习中,训练好的模型实际上是一个数学函数或一组算法,它能够从输入数据中提取规律并对未知数据进行预测或分类。
Windows ML内置于Windows 10和Windows Server 2019的最新版本中,并且还可以作为NuGet包用于向下兼容至Windows 8.1。Windows ML为开发者提供了以下优势:
这几点优势很好,但是对于初次接触ML的菜狗来讲意义不大。我现在就想尽快用它,看ML的应用表现怎么样。
一个机器学习模型是一个经过训练以识别某些类型模式的文件。您可以通过一组数据对模型进行训练,提供一种算法供其在这些数据上进行推理和学习。
一旦你训练了该模型,你就可以用它来推理之前没有见过的数据,并对这些数据做预测。比如,你想构建一个应用程序,根据用户的面部表情识别用户的情绪。您可以通过为模型提供带有某种情感标签的面部图像来训练模型,然后您可以在一个应用程序中使用该模型来识别任何用户的情感。
Windows ML使用开放神经网络交换 (Open Neural Network Exchange,ONNX) 格式作为其模型。您可以下载一个预先训练好的模型,也可以训练自己的模型。
上小节已经简单介绍了机器学习模型是一个经过训练以识别某些特定类型模式的文件。作为整个机器学习中极为重要的一环,有必要进一步学习。
模型是通过训练得到的。机器学习中的训练是指使用大量数据来训练一个算法或模型,从而使其能够学习到数据中包含的规律和模式。
对训练完的模型要进行评估。
评估是指使用一组未在训练过程中使用过的数据(称为测试数据集或验证数据集)来衡量训练好的模型的性能。
好的机器学习场景通常具有以下共同特点:
有多种方法可以在应用程序中使用Windows ML。你暂时只需要知道以下几个核心步骤。
In-Box 是指 Windows ML 的机器学习功能和相关组件已经集成在 Windows 操作系统中,用户无需单独安装或配置任何其他软件包。
NuGet 意味着开发者可以通过 NuGet 包管理器下载和安装适用于他们项目的特定版本的 Windows ML 组件。这样可以更灵活地进行版本管理和功能更新。
下表突出显示了 In-Box 和 NuGet 包在 Windows ML 中的可用性、分发、语言支持、服务以及前向兼容性方面的特点。
特点 | In-Box | NuGet |
---|---|---|
适用 | Win10 1809及更高版本 | Windows 8.1及更高版本 |
分发 | 集成在 Windows SDK 中 | 作为应用程序的一部分打包和分发 |
服务 | 由 Microsoft 驱动(客户自动受益) | 开发者驱动 |
前向兼容性 | 随新功能自动更新 | 由开发者更新 |
当您的应用程序运行在 In-box 方案中时,Windows ML 运行时(包含 ONNX 模型推理引擎)会在 Windows 10 设备上(或针对服务器部署时的 Windows Server 2019)对训练好的模型进行评估。Windows ML 负责硬件抽象,允许开发者针对多种芯片类型进行开发,包括 CPU、GPU,以及未来的 AI 加速器。Windows ML 硬件加速基于 DirectML 构建,DirectML 是一个高性能、低级别的运行 ML 推理的 API,属于 DirectX 家族。
对于 NuGet 包,这些层以图示中的二进制文件形式出现。Windows ML 内置于 Microsoft.ai.machinelearning.dll 中。它不包含嵌入式的 ONNX 运行时,而是将 ONNX 运行时内置于文件:onnxruntime.dll 中。包含在 WindowsAI NuGet 软件包中的版本包含一个嵌入式的 DirectML EP。最后一个二进制文件,DirectML.dll,实际上是 DirectML 的平台代码,它基于内置于 Windows 中的 Direct 3D 和计算驱动程序构建。所有这三个二进制文件都包含在 NuGet 发布中,供您与应用程序一起分发。
直接访问 onnxruntime.dll 还允许您针对跨平台场景,同时获得跨所有 Windows 设备的硬件无关加速。
Windows ML支持ONNX格式的模型。ONNX是一个开放的ML模型格式,允许你在各种ML框架和工具之间交换模型。
您可以通过以下几种方式获取 ONNX 格式的模型:
重要提示
并非所有 ONNX 版本都受 Windows ML 支持。为了了解您的应用程序目标 Windows 版本中哪些 ONNX 版本被官方支持,请查看 ONNX versions and Windows builds
一旦您拥有一个 ONNX 模型,您将把该模型集成到应用程序的代码中,然后您就可以在 Windows 应用程序和设备中使用机器学习了。
在本节中,我们将使用 Visual Studio Tools for AI ,这是一个用于构建、测试和部署深度学习和 AI 解决方案的开发扩展,来训练一个模型。
Microsoft Visual Studio Tools for AI支持的VS版本
不过很遗憾,
它只支持VS 2017 和 VS 2015 。
我们将使用 Microsoft Cognitive Toolkit(CNTK)框架和 MNIST 数据集来训练模型,MNIST 数据集包含 60,000 个训练样本和 10,000 个手写数字测试样本。然后,我们将使用开放神经网络交换(ONNX)格式保存模型以便与 Windows ML 一起使用。
首先需要安装 VS。之后,打开VS,激活 Visual Studio Tools for AI 扩展项:
重启后,该扩展项会被激活。
虽然不太负责,但文章写到这里,就该结束了。因为我发现了两个比较严重的问题:
VS2017和VS2015以外的版本目前不支持VS Tools for AI,而且该工具的安装数只有五万多,且上次更新还是在2018年9月。
前一篇文中的ML Model文件其实是另一套开发流程,不是这边介绍的Windows ML,而是ML .NET。
我理解为这是一个微软夭折的作品(这并不少见),或者因为发现了它的不足,所以后续版本推出了改良版。所以我决定转而去学另一套,即上面提到的 ML .NET 了。从命名上也可以看出来,带.NET后缀了,微软正式把它作为一个官方开发工具了。
本文的内容其实是通用知识,与具体工具无关,况且我们还没开始用呢。
走了一段弯路,后面我将新开专题学习ML .NET。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。