點擊上方藍字
關注我們
(本文閱讀時間:5分鐘)
ML.NET是一款面向.NET開發人員的開源,跨平臺機器學習框架,可以將自定義機器學習集成到.NET應用中。我們很開心地向您介紹我們在過去幾個月中所做的工作。
ML.NET:
https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet?ocid=AID3045631
AutoML更新?
自動化機器學習(AutoML)通過更容易地為您適合的場景和數據集找到最佳算法,從而使該過程自動化。AutoML是支持模型生成器和ML.NET CLI訓練經驗的后端。去年,我們宣布在我們的模型生成器和基于神經網絡智能 (NNI) 的 ML.NET CLI 工具以及 Microsoft Research 的快速輕量級 AutoML (FLAML) 技術中對 AutoML 實施進行了更新。與之前的解決方案相比,這些更新提供了一些好處和改進,包括:
探索的模型數量增加。
提高了超時錯誤率。
改進的性能指標(例如,準確性和r平方)。
直到最近,您還只能在我們的工具中利用這些AutoML改進。
我們很興奮地宣布,我們已經將AutoML的NNI / FLAML實現集成到ML.NET框架中,這樣你就可以從代碼優先的體驗中使用它們。
要開始使用AutoML API,請使用ML.NET daily feed安裝Microsoft.ML和Microsoft.ML.Auto NuGet包的微軟最新的預發布版本。
神經網絡智能 (NNI):
https://github.com/Microsoft/nni
快速輕量級 AutoML (FLAML):
https://github.com/Microsoft/flaml
實驗的API?
實驗是訓練或試驗的集合。每次試驗都會產生關于自身的信息,例如:
評估指標:用于評估模型的預測能力的指標。
流水線:用于訓練模型的算法和超參數。
實驗API為AutoML提供了一組默認值,使您更容易將其添加到訓練管道中。
// 配置AutoML管道
var experimentPipeline = dataPrepPipeline.Append(mlContext.Auto().Regression(labelColumnName: "fare_amount"));
// 配置實驗
var experiment = mlContext.Auto().CreateExperiment().SetPipeline(experimentPipeline).SetTrainingTimeInSeconds(50).SetDataset(trainTestSplit.TrainSet, validateTestSplit.TrainSet).SetEvaluateMetric(RegressionMetric.RSquared, "fare_amount", "Score");
// 運行實驗
var result = await experiment.Run();
在這個代碼片段中,dataprepipeline是一系列轉換,用于將數據轉換為適合訓練的格式。訓練回歸模型的AutoML組件被附加到該管道上。同樣的概念也適用于其他受支持的場景,比如分類。
當您使用已定義的訓練管道創建實驗時,您可以自定義的設置包括訓練時間、訓練和驗證集以及優化的評估指標。
定義了管道和實驗之后,調用Run方法開始訓練。
▌搜索空間和可清除估計器
如果需要對超參數搜索空間有更多的控制,可以定義搜索空間,并使用可清除的估計器將其添加到訓練管道中。
// 配置搜索空間
var searchSpace = new SearchSpace<LgbmOption>();// 初始化估計器管道
var sweepingEstimatorPipeline =dataPrepPipeline.Append(mlContext.Auto().CreateSweepableEstimator((context, param) =>{var option = new LightGbmRegressionTrainer.Options(){NumberOfLeaves = param.NumberOfLeaves,NumberOfIterations = param.NumberOfTrees,MinimumExampleCountPerLeaf = param.MinimumExampleCountPerLeaf,LearningRate = param.LearningRate,LabelColumnName = "fare_amount",FeatureColumnName = "Features",HandleMissingValue = true};return context.Regression.Trainers.LightGbm(option);}, searchSpace));
搜索空間定義了用于搜索的超參數范圍。
可清理評估器使您能夠像使用其他評估器一樣使用ML.NET管道中的搜索空間。
要創建和運行實驗,您需要使用CreateExperiment和run方法的相同過程。
模型生成器和ML.NET CLI更新
我們已經對模型生成器和ML.NET CLI做了幾個更新。其中我想強調的兩個是:
時間序列預測場景的模型生成器
.NET CLI的新版本
▌時間序列預測場景(預覽)
時間序列預測是在與時間相關的觀測中確定模式,并對未來幾個時期作出預測的過程。現實世界的用例有:
預測產品需求
能源消費預測
在ML.NET中,選擇時間序列預測的訓練師并不太難,因為你只有一個選擇,ForecastBySsa。困難的部分在于找到參數,如分析的時間窗口和預測未來的距離。找到正確的參數是一個實驗過程,這是AutoML的一項出色工作。對我們的AutoML實現的更新使通過超參數進行智能搜索成為可能,從而簡化了訓練時間序列預測模型的過程。
作為這些努力的結果,我們很高興地與大家分享,您現在可以在模型生成器中訓練時間序列預測模型。
下載或更新到模型生成器的最新版本,開始訓練您的時間序列預測模型。
▌ML.NET CLI的新版本
ML.NET CLI是我們的跨平臺.NET全局工具,它利用AutoML在運行Windows、MacOS和Linux的x64和ARM64設備上訓練機器學習模型。幾個月前,我們發布了ML.NET CLI的新版本,它帶來了:
.NET 6 支持
支持 ARM64 架構
新場景
圖像分類(針對 x64 架構)
建議
預測
安裝 ML.NET CLI 并從命令行開始訓練模型。
ForecastBySsa:
https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.ml.timeseriescatalog.forecastbyssa?view=ml-dotnet?ocid=AID3045631
下載或更新到模型生成器的最新版本:
https://docs.microsoft.com/zh-cn/dotnet/machine-learning/how-to-guides/install-model-builder?tabs=visual-studio-2019?ocid=AID3045631
安裝 ML.NET CLI:
https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/install-ml-net-cli?tabs=windows?ocid=AID3045631
Notebooks的鍵盤快捷鍵?
Interactive Notebooks廣泛應用于數據科學和機器學習。它們對于數據探索和準備、實驗、模型解釋和教育都很有用。
去年10月,我們發布了基于.NET Interactive的Visual Studio Notebook Editor擴展。在過去的幾個月里,我們一直在改進性能和穩定性。
在我們的最新版本中,我們通過啟用鍵盤快捷鍵讓您無需離開鍵盤就能更輕松地工作。如果你以前使用過notebooks,你應該對其中的許多快捷方式很熟悉。
鍵 | 指令 |
K | 向上移動焦點 |
J | 向下移動焦點 |
A | 在上面插入單元格 |
B | 在下面插入單元格 |
DD | 刪除單元格 |
Ctrl?+?Z | 撤銷 |
Ctrl?+?S | 保存 |
Ctrl?+?C | 復制單元格 |
Ctrl?+?X | 剪切單元格 |
Ctrl?+?V | 粘貼單元格 |
L | 切換行號 |
O | 開關輸出 |
II | 取消單元格執行 |
00 | 啟動內核 |
Ctrl?+?Shift?+?- | 分割單元格 |
Ctrl+?Enter | 執行/運行單元格 |
Shift?+?Enter | 執行/運行單元格,并將焦點向下移動 |
表中的鍵是大寫的,但大寫不是必需的。
安裝最新版本的Notebook編輯器,并開始在Visual Studio中創建Notebook。
.NET Interactive:
https://github.com/dotnet/interactive
Visual Studio Notebook Editor擴展:
https://devblogs.microsoft.com/dotnet/ml-net-and-model-builder-october-updates/#notebook-editor-in-visual-studio?ocid=AID3045631
Notebook編輯器:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
ML.NET的下一個目標是什么??
我們正積極朝著路線圖中所概述的領域努力。
▌深度學習
幾個月前,我們分享了深度學習的計劃。該計劃的很大一部分圍繞著改善ONNX的消費體驗,并通過TorchSharp(一個提供對驅動PyTorch的庫的訪問的.NET庫)實現新的場景。我們在實現這一計劃方面取得的一些進展包括:
為ONNX推斷啟用全局GPU標志。在此更新之前,當你想使用GPU對ONNX模型進行推斷時,ApplyOnnxModel轉換中的FallbackToCpu和GpuDeviceId標志沒有被保存為管道的一部分。因此,每次都必須安裝管道。我們已經使這些標志可作為MLContext的一部分訪問,因此您可以將它們保存為模型的一部分。
TorchSharp 面向 .NET 標準。TorchSharp最初的目標是.NET 5。作為我們將TorchSharp集成到ML.NET的工作的一部分,我們更新為TorchSharp面向.NET標準。
在接下來的幾周里,我們很高興與大家分享我們在TorchSharp與ML.NET集成方面取得的進展。
路線圖:
https://github.com/dotnet/machinelearning/blob/main/ROADMAP.md
深度學習的計劃:
https://github.com/dotnet/machinelearning/issues/5918
TorchSharp:
https://github.com/dotnet/TorchSharp
.NET DataFrame?
清晰且具有代表性的數據有助于提高模型的性能。因此,理解、清理和準備訓練數據的過程是機器學習工作流中的關鍵步驟。幾年前,我們在.NET中引入了DataFrame類型,作為Microsoft.Data.Analysis NuGet包的預覽。DataFrame仍處于預覽階段。我們理解使用工具來執行數據清理和處理任務是多么重要,并且已經開始組織和優先考慮反饋,因此我們解決了現有的穩定性和開發人員經驗痛點。這些反饋被組織成GitHub問題的一部分。
我們創建這個跟蹤問題是為了跟蹤和組織反饋。如果您有任何想要與我們分享的反饋,請在描述中為個別問題投票或在跟蹤問題中直接評論。
Microsoft.Data.Analysis:
https://www.nuget.org/packages/Microsoft.Data.Analysis/
跟蹤問題:
https://github.com/dotnet/machinelearning/issues/6144
https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json
MLOps?
機器學習操作(MLOps)就像機器學習生命周期的DevOps。這包括模型部署和管理以及數據跟蹤,這有助于機器學習模型的產品化。我們一直在評估用ML.NET改善這種體驗的方法。
最近我們發表了一篇博客文章,指導你完成設置Azure機器學習數據集、使用ML.NET CLI訓練ML.NET模型以及使用Azure Devops配置再訓練管道的過程。要了解更多細節,請參閱《在Azure ML中訓練ML.NET模型》一文。
《在Azure ML中訓練ML.NET模型》:
https://devblogs.microsoft.com/dotnet/training-a-ml-dotnet-model-with-azure-ml/?ocid=AID3045631
入門和資源
在微軟文檔中詳細了解 ML.NET、模型生成器和 ML.NET CLI。
如果您遇到任何問題,功能請求或反饋,請在GitHub上的ML.NET回購或ML.NET工具(Model Builder & ML.NET CLI)回購中提交問題。
微軟文檔:
https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/install-ml-net-cli?tabs=windows?ocid=AID3045631
ML.NET回購或ML.NET工具(Model Builder & ML.NET CLI)回購:
https://github.com/dotnet/machinelearning-modelbuilder
謝謝你讀完了本文~相信你一定有一些感想、觀點、問題想要表達。歡迎在評論區暢所欲言,期待聽到你的“聲音”哦!
同時,喜歡的內容也不要忘記轉發給你的小伙伴們,謝謝你的支持!
長按識別二維碼
關注微軟中國MSDN
點擊「閱讀原文」了解更多ML.NET信息~