ML.NET 示例:将ML.NET模型导出到ONNX

 

目录

问题

数据集

解决方案

NuGet包

转换和训练器

代码

性能


在这个示例中,您将看到如何使用ML.NET来训练回归模型,然后将该模型转换为ONNX格式。

问题

开放式神经网络交换即ONNX是一种表示深度学习模型的开放格式。使用ONNX,开发人员可以在最先进的工具之间移动模型,并选择最适合他们的组合。ONNX是由一个合作伙伴社区开发和支持的。

有时您可能希望使用ML.NET训练模型,然后转换为ONNX,例如,如果您希望使用WinML使用模型以利用Windows应用程序中的GPU推断。

不是所有的ML.NET模型都可以转换成ONNX;它依赖于训练器和训练管道中的变换。有关支持的训练器列表,请参见ML.NETAlgorithms Doc中的表格,有关支持的转换的列表请查看Data transforms Doc。

数据集

本示例使用NYC出租车票价数据集。

解决方案

控制台应用程序项目ONNXExport 用于训练一个ML.NET模型,该模型根据行驶距离和乘客数量等特征预测出租车票价,将该模型导出到ONNX,然后使用ONNX模型进行预测。

NuGet包

要将ML.NET模型导出到ONNX,必须在项目中安装以下NuGet包:

  • Microsoft.ML.OnnxConverter

您还必须安装:

  • Microsoft.ML, 用于训练ML.NET模型

  • Microsoft.ML.ONNXRuntime和Microsoft.ML.OnnxTransformer,用于为ONNX模型评分

转换和训练器

此管道包含以下转换和训练器,它们都是ONNX可导出的:

  • OneHotEncoding 转换

  • Concatenate 转换

  • Light GBM 训练器

代码

训练ML.NET模型后,可以使用以下代码转换为ONNX:

using (var stream = File.Create("taxi-fare-model.onnx"))
   mlContext.Model.ConvertToOnnx(model, trainingDataView, stream);

您需要一个转换器和输入数据来将ML.NET模型转换为ONNX模型。默认情况下,ONNX转换将生成具有最新OpSet版本的ONNX文件

转换为ONNX后,可以使用以下代码使用ONNX模型:

var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxModelPath);

using var onnxTransformer = onnxEstimator.Fit(trainingDataView);

var onnxOutput = onnxTransformer.Transform(testDataView);

在同一个示例输入上比较ML.NET模型和ONNX模型时,应该会得到相同的结果。如果运行项目,则应在控制台中获得类似于以下输出的结果:

Predicted Scores with ML.NET model
Score      19.60645
Score      18.673796
Score      5.9175444
Score      4.8969507
Score      19.108932
Predicted Scores with ONNX model
Score      19.60645
Score      18.673796
Score      5.9175444
Score      4.8969507
Score      19.108932

性能

默认的ONNX到ML.NET的转换不是最佳的,并且会产生ML.NET使用不需要的额外图形输出。ONNX运行时执行反向深度优先搜索,这会导致大量从ONNX运行时到ML.NET的本机内存到托管内存的转换操作,并执行超过必要内核的操作。

如果只指定必要的图形输出,它将只执行图形的一个子集。因此,通过消除除Score之外的所有图形输出,可以提高推理性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值