在这个示例中,您将看到如何使用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之外的所有图形输出,可以提高推理性能。

ML.NET 示例:将ML.NET模型导出到ONNX相关推荐

  1. 【yolov5】pytorch模型导出为onnx模型

    博主想拿官网的yolov5训练好pt模型,然后转换成rknn模型,然后在瑞芯微开发板上调用模型检测.但是官网的版本对npu不友好,所以采用改进结构的版本: 将Focus层改成Conv层 将Swish激 ...

  2. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!

    点击左上方蓝字关注我们 16年前的电影<功夫>可以说是家喻户晓,并将武侠片推向了一个新的高潮.在电影中,街头小混混阿星偶然间被打通了任督二脉,因善开悟,再有"如来神掌" ...

  3. java调用onnx模型_开源一年多的模型交换格式ONNX,已经一统框架江湖了?

    原标题:开源一年多的模型交换格式ONNX,已经一统框架江湖了? 机器之心原创 作者:思源 近日,微软亚洲研究院和华为举办了 ONNX 合作伙伴研讨会,这是 ONNX 开源社区成立以来首次在中国举办的活 ...

  4. ML.NET 示例:对象检测-ASP.NET Core Web和WPF桌面示例

    ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 v1.5.0 动态API 最新 端到端应用 图像文件 对象检测 深度学习 ONNX: Tiny YOLOv2 ...

  5. ML.NET 1.1 发布,模型构建器升级和新的异常检测算法

    https://www.toutiao.com/a6703297861997560328/ 2019-06-17 08:59:15 ML.NET 1.1 已发布.ML.NET 是一个跨平台的机器学习框 ...

  6. ML.NET 示例:搜索引擎结果排名

    ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn/edit/master/samples/csharp/ ...

  7. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略

    ML之Validation:机器学习中模型验证方法的简介.代码实现.案例应用之详细攻略 目录 模型验证方法的简介 1.Hold-out验证 2.K-折交叉验证 3.自助重采样 模型验证方法的代码实现 ...

  8. ML之Xgboost:利用Xgboost模型(7f-CrVa+网格搜索调参)对数据集(比马印第安人糖尿病)进行二分类预测

    ML之Xgboost:利用Xgboost模型(7f-CrVa+网格搜索调参)对数据集(比马印第安人糖尿病)进行二分类预测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 grid_s ...

  9. ML之Xgboost:利用Xgboost模型对数据集(比马印第安人糖尿病)进行二分类预测(5年内是否患糖尿病)

    ML之Xgboost:利用Xgboost模型对数据集(比马印第安人糖尿病)进行二分类预测(5年内是否患糖尿病) 目录 输出结果 设计思路 核心代码 输出结果 X_train内容: [[ 3. 102. ...

最新文章

  1. expect to check grammarly intime
  2. 2Ubuntu/RedHat下nfs服务器搭建,Linux多台电脑共享目录
  3. C# 中如何一次 catch 多个异常?
  4. java线程初始方法三种_Java 多线程 三种实现方式
  5. HTML学习笔记4之第五章第六章
  6. termux php 出错,android上的终端——termux
  7. Java多线程学习三十一:ThreadLocal 是用来解决共享资源的多线程访问的问题吗?
  8. Given a singly linked list where elements are sorted in ascending order, convert it to a height bala
  9. 快速确定HIve表中数据是否重复
  10. java day26【数据库的基本概念、MySQL数据库软件、SQL数据库的基本概念】
  11. java 发送支持超链接的邮件
  12. java poi excel模板变量_Java Web之POI操作Excel2016模板
  13. 计算机网络实验指导书 pdf,计算机网络实验指导书(新版).pdf
  14. matlab 灰度转伪彩色,matlab将灰度图像伪彩色图像处理(自己编写的color function)...
  15. Leetcode no. 347
  16. 计算机中插入背景图片怎样操作,如何将图片设置为Word页面背景?
  17. 《少年pi》:每个人心中都有一只孟…
  18. 《蔡康永的201堂情商课(完结)》学习
  19. 徐工汉云解析中小企业如何设备上云?
  20. Echarts之饼图内外圆重叠且图例不统一

热门文章

  1. request获取mac地址_【Go】获取用户真实的ip地址
  2. 第三课 Makefile文件的制作(上)
  3. . SQL多条件查询存储过程
  4. selenium3 + python - page_source页面源码
  5. 腾讯的一笔画游戏--巧妙解法
  6. 汇编试验五:编写、调试具有多个段的程序
  7. gRPC编码初探(java)
  8. Ajax入门(创建 XMLHttpRequest 对象)
  9. C#编程中的66个好习惯,你有多少个?(转)
  10. 全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?