ml.net例子筆記7-ml.net與OMNX
在整個模型生成過程中,模型位于內存中,并且可以在整個應用程序生命周期中訪問。 但是,一旦應用程序停止運行,而模型未在本地或遠程的某個位置保存,則無法再訪問該模型。
通常情況下,在其他應用程序中訓練模型之后,某些時候會使用模型進行推理或重新訓練。 因此,存儲模型很重要。
詳細信息參考:
https://learn.microsoft.com/zh-cn/dotnet/machine-learning/how-to-guides/save-load-machine-learning-models-ml-net
1 模型保存
// Train model
ITransformer trainedModel = pipelineEstimator.Fit(data);
// Save model
mlContext.Model.Save(trainedModel, data.Schema, "model.zip");
保存模型時,需要以下兩項:
- 模型的 ITransformer。
- ITransformer 預期輸入的 DataViewSchema。
保存為OMNX格式
需要使用這個Microsoft.ML.OnnxConverter 包
https://www.nuget.org/packages/Microsoft.ML.OnnxConverter#versions-body-tab
using FileStream stream = File.Create("./onnx_model.onnx");
mlContext.Model.ConvertToOnnx(trainedModel, data, stream);
但是,并非所有訓練器和轉換器都可導出到 ONNX。 有關完整列表,請訪問轉換和如何選擇 ML.NET 算法指南。
【 https://learn.microsoft.com/zh-cn/dotnet/machine-learning/how-to-choose-an-ml-net-algorithm 】
2 模型加載
//Define DataViewSchema for data preparation pipeline and trained model
DataViewSchema modelSchema;
// Load trained model
ITransformer trainedModel = mlContext.Model.Load("model.zip", out modelSchema);
加載OMNX格式
需要使用Microsoft.ML.OnnxTransformer包
https://www.nuget.org/packages/Microsoft.ML.OnnxTransformer
OnnxScoringEstimator estimator = mlContext.Transforms.ApplyOnnxModel("./onnx_model.onnx");
OMNX的使用也可以參考這個
在 .NET 中使用 AutoML ONNX 模型進行預測
https://learn.microsoft.com/zh-cn/azure/machine-learning/how-to-use-automl-onnx-model-dotnet?view=azureml-api-2
3 ONNX
ONNX 是 AI 模型的開源格式。 ONNX 支持框架之間的互操作性。 這意味著你可在眾多常見的機器學習框架(如 PyTorch)中訓練模型,將其轉換為 ONNX 格式,并在 ML.NET 等不同框架中使用 ONNX 模型。 有關詳細信息,請參閱 ONNX 網站。
https://onnx.ai/supported-tools.html#buildModel
ONNX 模型存儲庫
ONNX 模型存儲庫托管多個預先訓練的 ONNX 模型,這些模型可用于各種任務中的推理。
使用 ML.NET,可以采用這些預先訓練的 ONNX 模型,并將其用于在 .NET 應用程序內進行推理。
https://github.com/onnx/models
Netron
https://github.com/lutzroeder/netron
Netron is a viewer for neural network, deep learning and machine learning models.
Netron supports ONNX, TensorFlow Lite, Core ML, Keras, Caffe, Darknet, MXNet, PaddlePaddle, ncnn, MNN and TensorFlow.js.
Netron has experimental support for PyTorch, TorchScript, TensorFlow, OpenVINO, RKNN, MediaPipe, ML.NET and scikit-learn.

Omnx使用
https://github.com/onnx/tutorials
4 深度學習
https://learn.microsoft.com/zh-cn/dotnet/machine-learning/deep-learning-overview
深度學習是使用“深度”神經網絡的機器學習技術的總稱。 如今,深度學習是機器學習最顯著的領域之一,因為它在計算機視覺、自然語言處理等領域以及應用于強化學習、游戲玩法、決策制定和模擬等場景方面都取得了成功。
深度學習成功的關鍵因素是數據、計算、軟件框架和運行時的可用性,它們有助于創建神經網絡模型及其推理的執行。 此類框架的示例包括 Tensorflow、(Py) Torch 和 ONNX。
ML.NET 提供對其中一些框架的訪問權限。 因此,ML.NET 用戶無需從頭開始即可利用深度學習模型。
深度學習與機器學習?
深度學習依賴于神經網絡算法。 這與傳統或經典機器學習技術形成對比,后者使用更廣泛的算法,例如通用線性模型、決策樹或支持向量機(SVM)。 這種差異最直接、最實際的影響是深度學習方法可能更適合某種數據。 在一些情況下,傳統的機器學習技術(例如梯度提升樹 (XGBoost、LightGBM 和 CatBoost) )似乎在表格數據方面具有優勢。
對于結構化程度較低的數據(例如文本和圖像),神經網絡往往表現得更好。
最佳方法是始終試驗特定數據源和用例,從而確定哪些技術最適合你的問題。
**對于經典機器學習任務,ML.NET 通過自動化機器學習(AutoML)簡化了此試驗過程。 **
神經網絡體系結構
深度學習的主要區別特征之一是使用人工神經網絡算法。
概括而言,可以將神經網絡視為“處理單元”的配置,其中每個單元的輸出構成另一個單元的輸入。 其中每個單元都可以接受一個或多個輸入,并實質上執行其輸入的加權總和,應用偏移(或“偏差”),然后應用非線性轉換函數(稱為“激活”)。 這些組件的不同排列方式用于描述分類、回歸函數和其他機器學習任務核心結構中的決策邊界。

在過去的十年里,深度學習的案例、應用和技術都有所增長。 這種增長的部分原因是可納入神經網絡的操作種類不斷增加,這些操作可以配置在更豐富的安排中,并且改進了對這些改進的計算支持。 通常,神經網絡體系結構可以分為以下類別:
- 前饋神經網絡
- 卷積神經網絡
- 遞歸神經網絡
- 生成對抗網絡
- Transformers
深度學習的用途是什么?
深度學習體系結構在涉及圖像、音頻和自由格式文本等“非結構化數據”的任務中表現良好。 因此,深度學習已用于解決如下問題:
- 圖像分類
- 音頻分類
- 翻譯
- 文本生成
- 文本分類
ML.NET 中的深度學習
從頭開始訓練深度學習模型需要設置多個參數、大量已標記的訓練數據和海量計算資源(數百個 GPU 小時)。 ML.NET 使你能夠使用預先訓練的模型和知識轉移技術(例如遷移學習和微調)來縮短此過程。
ML.NET 還使你能夠導入在其他框架中訓練的模型,并將其用于 .NET 應用程序。
根據具體場景,可以使用本地 GPU 和 Azure GPU 計算資源來訓練和使用深度學習模型。
5 深度學習模型庫
Hugging Face
Hugging Face是一個開源的深度學習模型庫,它提供了許多預訓練的模型供用戶使用和探索。這些模型涵蓋了各種領域和任務,包括自然語言處理、計算機視覺、語音識別等。
雖然Hugging Face主要關注深度學習模型,但它并不是所有模型都是深度學習模型。在Hugging Face的庫中,也包括一些傳統的機器學習算法和模型,例如線性回歸、邏輯回歸、支持向量機等。
https://huggingface.co/ https://aifasthub.com/
OMNX模型庫
https://github.com/onnx/models
阿里ModelScope
https://www.modelscope.cn/
ModelScope旨在打造下一代開源的模型即服務共享平臺,為泛AI開發者提供靈活、易用、低成本的一站式模型服務產品,讓模型應用更簡單!
通義的一些開源模型和社數據集也可以在這找到。
百度飛槳
https://aistudio.baidu.com/modelsoverview?lang=zh_CN#
百度飛槳、文心模型等倉庫
計算機視覺、自然語言處理、智能語音、文心大模型、科學計算、量子計算等任務方向算法,覆蓋智慧金融、智慧安防、智慧工業/能源、智慧城市、智慧交通等多行業場景范例