博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ML.NET 示例:将ML.NET模型导出到ONNX
阅读量:3524 次
发布时间:2019-05-20

本文共 1649 字,大约阅读时间需要 5 分钟。

 

目录


在这个示例中,您将看到如何使用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 modelScore      19.60645Score      18.673796Score      5.9175444Score      4.8969507Score      19.108932Predicted Scores with ONNX modelScore      19.60645Score      18.673796Score      5.9175444Score      4.8969507Score      19.108932

性能

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

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

转载地址:http://emwhj.baihongyu.com/

你可能感兴趣的文章
Java标准库定义的常用异常,自定义异常 2020-2-15
查看>>
Java问题百度/Google记录 2020-2-16
查看>>
【PADS9.5】9,对比ECO核心板,Router移动元件后布线消失,Router找不到自动布线策略文件丢失或损坏
查看>>
【STM32+w5500汇总】23,HTTP_Client 连接到ONENET上传了一段数据之后会断开,数据上传格式的设置
查看>>
【STM32+W5500+MQTT】24,所有功能都可以通过API函数的调用来实现;HTTP接入ONENET,API开发手册和打包函数,串口软件HTTP连接服务器上传数据,2018年12月28日
查看>>
【STM32+W5500+HTTPClient】25,路由器DHCP租赁IP时间为2h,NetBios可以很好的解决IP变化的问题,DNS,2018年12月25日
查看>>
【STM32+MQTT+ONENET】26,MQTT协议接入OneNET
查看>>
【STM32+W5500+MQTT+ONENET】27,MQTT协议接入OneNET实际编程操作 2018年12月27日
查看>>
【STM32Cube+FreeRTOS 】28,KEIL5的F12不起作用;***JLink Error: Can not read register x while CPU is running
查看>>
【STM32CubeMX+FreeRTOS 】29,prtinf卡死;4任务只运行了3个;W5500联网失败(堆栈不能太大或者太小)
查看>>
【STM32+FreeRTOS +W5500移植要点】30,RTOS中断;从TIM2,主TIM3;RTOS主要用在LCD中;RT-Thread;标志重定义问题 2019年01月22日
查看>>
【STM32+FPGA+FSMC】31,FSMC熟练掌握;KEIL5生成bin文件;SDRAM的使用;IAP检验码 2019年04月10日
查看>>
【IC1】【转 非常好】运算放大器使用的六个经验
查看>>
【IC-ADC 3】ADC的选型
查看>>
2019年03月18日 查看数据手册的注意点,极限参数、电气参数、推荐参数
查看>>
HiKey960/970用户手册;HiKey960 Development Board User Manual
查看>>
【IC8】作为一名硬件工程师,需要哪些知识?
查看>>
【书籍推荐】FPGA,xilinx
查看>>
N9-SQL注入(union注入)
查看>>
N10-sql注入(information_schema注入)
查看>>