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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别写代码了!行吗?

全世界有3.14 % 的人已经关注了数据与算法之美01刚才等红绿灯的时候,天开始下雨了。这时候旁边的程序员首先开口说:“下雨了。”大概过了5秒钟,其他人:对哦,有点下雨了。其实,这说的是程序员头秃的故事。02…

dma接收双缓存 stm32_「STM32学习笔记」USART 新特性

之前的学习笔记“SPI不够用?USART来帮忙”一文中介绍了用如何把USART当做SPI来用的方法。此外,ST的USART还有很多新特性,没准有你不知道的。在此,我们整理出来以下串口新特性,供大家参考。支持RXD和TXD管脚互换很多时候…

为什么数学叫“数学”?

全世界有3.14 % 的人已经关注了数据与算法之美“数学”一词是来自希腊语,它意味着某种“已学会或被理解的东西”或“已获得的知识”,甚至意味着“可获的东西”;“可学会的东西”,即“通过学习可获得的知识”,数学名称的…

5月TIOBE编程榜,Java、PHP降级,C#再度上升!

TIOBE 5月编程语言榜单显示,Java数据下滑,排名降级了一位,被Python超越;PHP继续大幅下滑,排名降级到第9;而C#则是再度稳中求进,已经连续N个月上涨了。曾经Web开发三大语言,在2020年后…

捷达vs7测试_捷达VS7——品质硬核!

立冬,准备好“冬眠”了吗?一汽大众的子品牌-捷达(Jetta)在去年9月推出VS5和VA3之后,新型SUV,捷达VS7车型已在国内正式开始预售。这款新车基于大众MQB平台构建,将推出4款车型供消费者选择,定位为紧凑型SUV。…

一句 Task.Result 就死锁, 这代码还怎么写?

一:背景 1. 讲故事前些天把 .NET 高级调试 方面的文章索引到 https://github.com/ctripxchuang/dotnetfly 的过程中,发现了一个有意思的评论,截图如下:大概就是说在 Winform 的主线程下执行 Task.Result 会造成死锁,我…

ant 改变表格数据_表格技巧—Excel表格怎么替换数字

在编制报表时,如果把序列号中的某些数字改变,一个个更正,肯定是比重新录一遍还要慢的,如果只是想替换其中的数字,其实可以利用Excel表格自带的查找替换功能,一步到位解决。接下来小编教大家怎么样将一大批的…

程序员的鄙视链

全世界有3.14 % 的人已经关注了数据与算法之美最近这几年在世界各地突然吹起了一股全民写程序的风潮,连即将卸任的美国总统奥巴马都在写 JavaScript 了,但是身为一介靠写程序(以及在上班时间胡乱上网)来谋生的 developer&#xff…

基于 registry 搭建 Docker 私有镜像仓库

dockerhub: https://registry.hub.docker.com/_/registry安装命令docker run -p 5000:5000 -d -v /opt/registry:/opt/registry --restart always --name myregistry registry参数介绍:•-p 容器的端口映射,这里绑定 5000•-d 后台运行容器•-v 挂载主机…

BBSXP论坛手工得到用户md5密码的方法

07年发表在《***手册》的一篇文章。通过阅读本文,您将了解到:1、一种手工得到两个版本的BBSXP论坛的用户md5密码的方法。2、如何Cookie欺骗。大家都知道BBSXP论坛5.13,5.15版本的blog.asp文件存在注入漏洞,网上也有几种这个漏洞的…

2010C语言添加背景图片_2019级C语言大作业 - 火柴人试炼之地

C语言大作业 - 火柴人试炼之地https://www.zhihu.com/video/1200491618794606592分享19级同学大一上学期用C语言实现的火柴人试炼之地。分步骤代码、图片音乐素材、可执行程序可以从百度网盘下载:链接:https://pan.baidu.com/s/1XelHD8GVnXfR8coAYOAC9w …

基于单TCP连接的高吞吐模型设计

对于服务与服务之间往往需要高效的吞吐的信息交互,但在绝大部分服务应用中为了实现高吞吐交互都是基于连接池模式,即通过多个TCP连接来提高吞吐量,这种设计完全是通过增加IO的读写量来实现高效吞吐。如果能减少连数和降低IO量(合并…

程序员8大终极杀器,你get了几个?

全世界有3.14 % 的人已经关注了数据与算法之美经常有同学问:作为程序员,终极杀器是什么?其实有大佬早已回答过:持续学习,开阔视野才是程序员的终极杀器!基于此,给大家一个建议:不妨多…

winserver2016 401您无权使用所提供的凭据查看此目录或页面_不用找了,30分钟帮你搞定使用 Spring Cloud 和 Docker 轻松构建微服务架构!...

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]【编者的话】如何使用Spring Boot、Spring Cloud、Docker和Netflix的一些开源工具来构建一个微服务架构。本文通过使用Spring Boot、Spring Cloud和Docker构建的概念型应用示例,提供了了解常见的微服务架构模式…

女朋友掉水里,各类程序猿怎么救?

全世界有3.14 % 的人已经关注了数据与算法之美前天发了一篇有趣的文章《如果辅导员掉进水里,各个专业的学生将会如何解救?》那么,如果程序猿的女朋友落水了,他们会怎么救呢?不会像在校的计算机学院的学生那样“找跟网线…

联机分析的列式数据库 clickHouse

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。在传统的行式数据库系统中,数据按如下顺序存储:RowWatchIDJavaEnableTitleGoodEventEventTime#0893543506621Investor Relations12016-05-18 05:19:20#1903295099580Contact us12016-05-…

网管小王的工具包

我是一名网管,工作主要是维护单位的网络线路和电话线路,今天闲来没事,把工具包中的工具show一下吧。笔记本电脑打线器,用来维修模块和打线用的两根长短不同的网线和一根电话线螺丝刀,什么扁口,十字花&#…

.NET之生成数据库全流程

开篇语本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。本次示例环境:vs2019、net5、mysql创建项目本次事例代码是用过vs2019创建的ASP.NET Core Web API项目可以通过可视化界面创建或者通过命令行创建dotnet new webap…

进军人工智能,数学基础很重要?

随着科技的快速发展,人工智能的重要性日渐显现。对于大多数新手来说,弄清楚入门人工智能需要哪些数学基础、需要熟悉什么框架等,都至关重要。机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正、可解释性、易…

修改正文中参考文献标注_论文写作中怎样正确插入参考文献,引用文献如何标注?...

论文写作中怎样正确插入引文文献,引用文献如何标注?不管是大学毕业生还是期刊/评职称的我们在面对撰写论文时,参考文献的引用是必不可少的。参考文献的引用可以给论文增添很多的光彩。正确的在论文中引用参考问下你会在论文编写的同时省去很大…