当前位置:   article > 正文

Windows AI学习_2.Windows机器学习_介绍_windows machine learning code generation

windows machine learning code generation


一、前言

由于我是个机器学习菜狗,所以许多基础概念还未了解过,文中涉及到时,我会临时学习,以相对白话的方式介绍(当然存在不严谨之处不可避免,后期会慢慢修正)。


二、Windows机器学习

机器学习(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为开发者提供了以下优势:

  • 开发便捷:Windows ML内置于Windows 10和Windows Server 2019的最新版本中,您只需要Visual Studio和一个训练好的ONNX模型,就可以将这个模型与Windows应用程序一起分发。此外,如果您需要将基于AI的功能推送到较旧版本的Windows(向下兼容至8.1),Windows ML还可以作为一个NuGet包与您的应用程序一起分发。
  • 广泛的硬件支持:Windows ML允许您编写一次ML工作负载,自动获得跨不同硬件供应商和硅片类型(如CPU、GPU和AI加速器)的高度优化性能。此外,Windows ML确保在支持的硬件范围内具有一致的行为表现。
  • 低延迟、实时结果:使用Windows设备的处理功能,可以评估ML模型,实现对大量数据(如图像和视频)的本地、实时分析。对于性能密集型工作负载(如游戏引擎)或后台任务(如搜索索引),结果可以快速、高效地使用。
  • 增强灵活性:在Windows设备上本地评估ML模型的选项使您能够应对更广泛的场景。例如,在设备离线或面临间歇性连接时,可以运行ML模型评估。此外,这还可以应对由于隐私或数据主权问题而无法将所有数据发送到云端的场景。
  • 降低运营成本:在云端训练ML模型,然后在Windows设备上本地评估它们,可以显著节省带宽成本,仅需要将极少量数据发送到云端,以实现ML模型的持续改进。此外,在服务器场景中部署ML模型时,开发人员可以利用Windows ML硬件加速来加速模型服务,从而减少处理工作负载所需的机器数量。

这几点优势很好,但是对于初次接触ML的菜狗来讲意义不大。我现在就想尽快用它,看ML的应用表现怎么样。

机器学习模型

一个机器学习模型是一个经过训练以识别某些类型模式的文件。您可以通过一组数据对模型进行训练,提供一种算法供其在这些数据上进行推理和学习。

一旦你训练了该模型,你就可以用它来推理之前没有见过的数据,并对这些数据做预测。比如,你想构建一个应用程序,根据用户的面部表情识别用户的情绪。您可以通过为模型提供带有某种情感标签的面部图像来训练模型,然后您可以在一个应用程序中使用该模型来识别任何用户的情感。

Windows ML使用开放神经网络交换 (Open Neural Network Exchange,ONNX) 格式作为其模型。您可以下载一个预先训练好的模型,也可以训练自己的模型。


三、什么是机器学习模型?

上小节已经简单介绍了机器学习模型是一个经过训练以识别某些特定类型模式的文件。作为整个机器学习中极为重要的一环,有必要进一步学习。

模型是通过训练得到的。机器学习中的训练是指使用大量数据来训练一个算法或模型,从而使其能够学习到数据中包含的规律和模式。

机器学习训练步骤

机器学习训练步骤

在这里插入图片描述
对训练完的模型要进行评估。
评估是指使用一组未在训练过程中使用过的数据(称为测试数据集或验证数据集)来衡量训练好的模型的性能。

评估

在这里插入图片描述

⭐什么时候用到机器学习?

好的机器学习场景通常具有以下共同特点:

  1. 它们涉及需要自动化并保持结果一致性的重复决策或评估。
  2. 对于决策背后的解决方案或标准来说,很难或者不可能用简单的语言描述。
  3. 你手头有已经标注过的数据,或者你能描述已有的实例情况,并将其与正确结果关联起来。

四、准备使用Windows ML

有多种方法可以在应用程序中使用Windows ML。你暂时只需要知道以下几个核心步骤。

  1. 获取一个训练过的ONNX模型,或使用ONNX ML Tools将其他ML框架中训练过的模型转换为ONNX。
  2. 将ONNX模型文件添加到应用程序中,或者以其他方式使它在目标设备上可用。
  3. 将模型集成到应用程序代码中,然后构建和部署应用程序。

在这里插入图片描述

In-Box与NuGet WinML方式对比

In-Box 是指 Windows ML 的机器学习功能和相关组件已经集成在 Windows 操作系统中,用户无需单独安装或配置任何其他软件包。

NuGet 意味着开发者可以通过 NuGet 包管理器下载和安装适用于他们项目的特定版本的 Windows ML 组件。这样可以更灵活地进行版本管理和功能更新。

下表突出显示了 In-Box 和 NuGet 包在 Windows ML 中的可用性、分发、语言支持、服务以及前向兼容性方面的特点。

特点In-BoxNuGet
适用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 设备的硬件无关加速。
在这里插入图片描述


五、ONNX模型

ONNX模型

Windows ML支持ONNX格式的模型。ONNX是一个开放的ML模型格式,允许你在各种ML框架和工具之间交换模型。

您可以通过以下几种方式获取 ONNX 格式的模型:

  • ONNX模型库:包含针对不同类型任务的几个预训练 ONNX 模型。下载一个受 Windows ML 支持的版本,然后就可以开始使用了!
  • 从 ML 训练框架中原生导出:几个训练框架(如 Chainer、Caffe2 和 PyTorch)支持原生导出功能到 ONNX,允许您将训练好的模型保存为特定版本的 ONNX 格式。此外,Azure 机器学习和 Azure Custom Vision 等服务也提供原生 ONNX 导出。
  • 使用 ONNXMLTools 转换现有模型:此 Python 软件包允许将模型从几个训练框架格式转换为 ONNX。作为开发人员,您可以指定要将模型转换为哪个 ONNX 版本,具体取决于您的应用程序针对哪些 Windows 版本。如果您不熟悉 Python,可以使用 Windows ML’s UI-based Dashboard只需几次点击即可转换您的模型。

重要提示

并非所有 ONNX 版本都受 Windows ML 支持。为了了解您的应用程序目标 Windows 版本中哪些 ONNX 版本被官方支持,请查看 ONNX versions and Windows builds

一旦您拥有一个 ONNX 模型,您将把该模型集成到应用程序的代码中,然后您就可以在 Windows 应用程序和设备中使用机器学习了。

使用CNTK训练一个模型

在本节中,我们将使用 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 一起使用。

准备

安装Visual Studio Tools for AI

首先需要安装 VS。之后,打开VS,激活 Visual Studio Tools for AI 扩展项:

  1. 单击VS中的 扩展与更新
  2. 单击 联机 并选中 Visual Studio Marketplace
  3. 在搜索框输入 Visual Studio Tools for AI
  4. 之后安装,重启VS。

重启后,该扩展项会被激活。

六、戛然而止

虽然不太负责,但文章写到这里,就该结束了。因为我发现了两个比较严重的问题:

  1. VS2017和VS2015以外的版本目前不支持VS Tools for AI,而且该工具的安装数只有五万多,且上次更新还是在2018年9月。
    在这里插入图片描述
    在这里插入图片描述

  2. 前一篇文中的ML Model文件其实是另一套开发流程,不是这边介绍的Windows ML,而是ML .NET。
    在这里插入图片描述

我理解为这是一个微软夭折的作品(这并不少见),或者因为发现了它的不足,所以后续版本推出了改良版。所以我决定转而去学另一套,即上面提到的 ML .NET 了。从命名上也可以看出来,带.NET后缀了,微软正式把它作为一个官方开发工具了。

本文的内容其实是通用知识,与具体工具无关,况且我们还没开始用呢。

走了一段弯路,后面我将新开专题学习ML .NET。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/600240
推荐阅读
相关标签
  

闽ICP备14008679号