FAQ(常见问题解答)

本页包含社区中最常见问题的解答。

如何知道我的 ONNX 模型是否可与 Windows ML 一起运行?

检查你的 ONNX 模型是否可与 Windows ML 一起运行的最简单方式是使用 WinML Model Runner 工具。 另外,你可以检查 ONNX 版本和 Windows 版本来了解给定 Windows 发行版支持的所有 ONNX 版本的详细信息。

如何将不同格式的模型转换为 ONNX?

可以使用 WinMLTools 将几种不同格式(例如 Apple CoreML 和 scikit-learn)的模型转换为 ONNX。

尝试将我的模型导出并/或转换为 ONNX 时出现错误,指出我的模型具有“不受支持的运算符”。   应采取何种操作?

某一 ONNX 版本当前可能不支持本机训练框架中的某些运算符。 首先,我们建议你检查你的目标 Windows 版本支持的 ONNX 版本,并尝试将你的模型转换为受支持的最高版本。 与早期版本相比,后来的 ONNX 版本支持更多的一组运算符。

如果你继续遇到问题,建议与你的数据科学团队合作,尽量避免使用不受支持的运算符。 我们建议使用的方法之一是在源框架中更改模型的体系结构,并尝试将模型转换/导出为目标 ONNX 版本。 请注意,你还不需要重新训练模型—你可以尝试转换体系结构,如果成功,则你可以继续完全重新训练你的模型。

为何无法加载模型?

有很多原因可能会导致加载模型时遇到问题,但在 UWP 上开发时最常见的一个原因是文件访问限制。 默认情况下,UWP 应用程序只能访问文件系统的某些部分,并且需要用户权限或额外功能才能访问其他位置。 有关详细信息,请参阅文件访问权限

我应当使用哪个版本的 WinMLTools?

我们始终建议你下载并安装最新版本的 winmltools 程序包。 这将确保你可以创建以最新 Windows 版本为应用目标的 ONNX 模型。

是否可以使用 onnxmltools 而非 winmltools?

是的,可以,但你需要确保安装正确版本的 onnxmltools 才能将 ONNX v1.2.2(这是 Windows ML 支持的最低 ONNX 版本)作为应用目标。 如果你不确定要安装哪个版本,建议你改为安装最新版本的 winmltools。 这将确保你能够将 Windows 支持的 ONNX 版本作为应用目标。

要获得自动代码生成 (mlgen) 功能,应当使用哪个版本的 Visual Studio?

建议使用的支持 mlgen 的最低 Visual Studio 版本是 15.8.7。 在 Windows 10 版本 1903 和更高版本中,mlgen 不再包括在 SDK 中,因此你将需要下载并安装此扩展。 有一个适用于 Visual Studio 2017 的扩展和一个适用于 Visual Studio 2019 的扩展。

尝试运行 mlgen 时收到错误消息并且未生成代码。 可能发生了什么?

尝试执行 mlgen 时最常见的两个错误是:

  • 缺少必需属性“consumed_inputs”:如果遇到此错误消息,则很可能是因为你试图使用早于 17763 的 Windows 10 SDK 版本运行 ONNX v1.2 模型;我们建议你检查 SDK 版本并将其更新为版本 17763 或更高版本。
  • 类型错误“节点 (ZipMap) 的输出参数 (loss) 的类型 (map(string,tensor(float))) 与预期的类型不匹配…”:如果遇到此错误,则很可能是因为你的 ONNX 模型的版本低于 WinML 接受的版本(最低版本为 17763)。 我们建议你将转换器程序包更新为最新可用版本,并将你的模型重新转换为 1.2 版的 ONNX。

WinML 默认情况下在哪里运行?

如果未使用 LearningModelDeviceKind 指定要用来运行它的设备,或者使用了 LearningModelDeviceKind.Default,则系统将决定哪个设备将对模型进行评估。 这通常是 CPU。 若要使 WinML 在 GPU 上运行,请在创建 LearningModelDevice 时指定下列值之一:

  • LearningModelDeviceKind.DirectX
  • LearningModelDeviceKind.DirectXHighPerformance
  • LearningModelDeviceKind.DirectXMinPower

注意

使用以下资源可获取有关 Windows ML 的帮助:

  • 若要提出或回答有关 Windows ML 的技术问题,请在 Stack Overflow 上使用 windows-machine-learning 标记。
  • 若要报告 bug,请在 GitHub 上提交问题。