日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2023/12/4 asp.net 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ML.NET 示例:将ML.NET模型导出到ONNX 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在這個(gè)示例中,您將看到如何使用ML.NET來(lái)訓(xùn)練回歸模型,然后將該模型轉(zhuǎn)換為ONNX格式。

問(wèn)題

開(kāi)放式神經(jīng)網(wǎng)絡(luò)交換即ONNX是一種表示深度學(xué)習(xí)模型的開(kāi)放格式。使用ONNX,開(kāi)發(fā)人員可以在最先進(jìn)的工具之間移動(dòng)模型,并選擇最適合他們的組合。ONNX是由一個(gè)合作伙伴社區(qū)開(kāi)發(fā)和支持的。

有時(shí)您可能希望使用ML.NET訓(xùn)練模型,然后轉(zhuǎn)換為ONNX,例如,如果您希望使用WinML使用模型以利用Windows應(yīng)用程序中的GPU推斷。

不是所有的ML.NET模型都可以轉(zhuǎn)換成ONNX;它依賴(lài)于訓(xùn)練器和訓(xùn)練管道中的變換。有關(guān)支持的訓(xùn)練器列表,請(qǐng)參見(jiàn)ML.NETAlgorithms Doc中的表格,有關(guān)支持的轉(zhuǎn)換的列表請(qǐng)查看Data transforms Doc。

數(shù)據(jù)集

本示例使用NYC出租車(chē)票價(jià)數(shù)據(jù)集。

解決方案

控制臺(tái)應(yīng)用程序項(xiàng)目ONNXExport 用于訓(xùn)練一個(gè)ML.NET模型,該模型根據(jù)行駛距離和乘客數(shù)量等特征預(yù)測(cè)出租車(chē)票價(jià),將該模型導(dǎo)出到ONNX,然后使用ONNX模型進(jìn)行預(yù)測(cè)。

NuGet包

要將ML.NET模型導(dǎo)出到ONNX,必須在項(xiàng)目中安裝以下NuGet包:

  • Microsoft.ML.OnnxConverter

您還必須安裝:

  • Microsoft.ML, 用于訓(xùn)練ML.NET模型

  • Microsoft.ML.ONNXRuntime和Microsoft.ML.OnnxTransformer,用于為ONNX模型評(píng)分

轉(zhuǎn)換和訓(xùn)練器

此管道包含以下轉(zhuǎn)換和訓(xùn)練器,它們都是ONNX可導(dǎo)出的:

  • OneHotEncoding 轉(zhuǎn)換

  • Concatenate 轉(zhuǎn)換

  • Light GBM 訓(xùn)練器

代碼

訓(xùn)練ML.NET模型后,可以使用以下代碼轉(zhuǎn)換為ONNX:

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

您需要一個(gè)轉(zhuǎn)換器和輸入數(shù)據(jù)來(lái)將ML.NET模型轉(zhuǎn)換為ONNX模型。默認(rèn)情況下,ONNX轉(zhuǎn)換將生成具有最新OpSet版本的ONNX文件

轉(zhuǎn)換為ONNX后,可以使用以下代碼使用ONNX模型:

var?onnxEstimator?=?mlContext.Transforms.ApplyOnnxModel(onnxModelPath);using?var?onnxTransformer?=?onnxEstimator.Fit(trainingDataView);var?onnxOutput?=?onnxTransformer.Transform(testDataView);

在同一個(gè)示例輸入上比較ML.NET模型和ONNX模型時(shí),應(yīng)該會(huì)得到相同的結(jié)果。如果運(yùn)行項(xiàng)目,則應(yīng)在控制臺(tái)中獲得類(lèi)似于以下輸出的結(jié)果:

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

性能

默認(rèn)的ONNX到ML.NET的轉(zhuǎn)換不是最佳的,并且會(huì)產(chǎn)生ML.NET使用不需要的額外圖形輸出。ONNX運(yùn)行時(shí)執(zhí)行反向深度優(yōu)先搜索,這會(huì)導(dǎo)致大量從ONNX運(yùn)行時(shí)到ML.NET的本機(jī)內(nèi)存到托管內(nèi)存的轉(zhuǎn)換操作,并執(zhí)行超過(guò)必要內(nèi)核的操作。

如果只指定必要的圖形輸出,它將只執(zhí)行圖形的一個(gè)子集。因此,通過(guò)消除除Score之外的所有圖形輸出,可以提高推理性能。

總結(jié)

以上是生活随笔為你收集整理的ML.NET 示例:将ML.NET模型导出到ONNX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。