.NET機器學習 ML.NET 1.4預覽版和模型生成器更新

ML.NET 是面向.NET開發人員的開源和跨平臺機器學習框架。 ML.NET  還包括Model Builder  (一個簡單的UI工具)和  CLI  ,使用自動機器學習(AutoML)構建自定義機器學習(ML)模型變得很是容易。ios

.NET 開發人員使用  ML.NET,能夠利用他們現有的工具和技能,爲情感分析價格預測,銷售預測預測圖像分類等常見場景建立自定義機器學習模型,定製機器學習並注入其應用程序!微軟在官方博客(https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-4-preview-and-model-builder-updates-machine-learning-for-net/)宣佈了 ML.NET 1.4預覽版模型生成器  和  CLI的更新。git

此次更新有以下亮點:github

ML.NET更新

ML.NET 1.4 Preview是一個向後兼容的版本,沒有重大更改。除了此處:https://github.com/dotnet/machinelearning/blob/master/docs/release-notes/1.3.1/release-1.3.1.md#bug-fixes 描述的錯誤修復以外,在ML.NET 1.4預覽版中,咱們還發布了一些使人興奮的新功能數據庫

數據庫加載器(預覽)

image

這項功能引入了數據庫加載器,能夠直接針對關係數據庫數據進行訓練。這個裝載器支持 .NET Core 或.NET框架下System.Data 支持的任何關係型數據庫,這意味着你可使用任何關係數據庫,例如SQL Server,SQL Azure Server,Oracle,SQLite的和PostgreSQL,MySQL和IBM DB2等。api

在以前的ML.NET版本中,從ML.NET 1.0發佈就支持經過IEnumerable使用LoadFromEnumerable()API 從關係數據庫提供數據來訓練,其中數據可能來自關係數據庫或任何其餘源,可是,在使用該方法時,做爲開發人員的你負責從關係數據庫中讀取數據(例如使用Entity Framework或任何其餘方法),這些代碼須要正確實現,以便在訓練ML模型時傳輸數據。可是,這個新的數據庫加載器爲您提供了一個更簡單的代碼實現,由於它是從數據庫中讀取數據並經過IDataView提供數據,這是ML.NET框架提供的,因此您只須要指定數據庫鏈接字符串,數據集列的SQL語句是什麼以及加載數據時要使用的數據類是什麼。網絡

下面是示例代碼,你能夠感覺到如今能夠輕鬆配置代碼以便將數據直接從關係數據庫加載到IDataView中,之後將在訓練模型時使用。架構

//Lines of code for loading data from a database into an IDataView for a later model training併發

string connectionString = @"Data Source=YOUR_SERVER;Initial Catalog= YOUR_DATABASE;Integrated Security=True";app

string commandText = "SELECT * from SentimentDataset";框架

DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader();

DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, commandText);

IDataView trainingDataView = loader.Load(dbSource);

// ML.NET model training code using the training IDataView

//...

public class SentimentData

{

public string FeedbackText;

public string Label;

}

這個功能目前仍是預覽,可經過v0.16-Preview nuget軟件包  Microsoft.ML.Experimental進行訪問。

 

深度神經網絡遷移學習的圖像分類(預覽)

這一新功能支持使用ML.NET進行原生DNN遷移學習,咱們把圖像分類做爲第一個高級場景。

例如,經過此功能,您可使用 ML.NET API 本地訓練TensorFlow模型來使用本身的圖像進行訓練,從而建立本身的自定義圖像分類器模型。

圖像分類器場景 - 使用ML.NET訓練您本身的自定義深度學習模型

爲了使用TensorFlow,ML.NET內部依賴於Tensorflow.NET庫。Tensorflow.NET庫是一個開源和低級API庫,爲TensorFlow提供.NET標準綁定。該庫是SciSharp堆棧庫的一部分。

Microsoft(ML.NET團隊)與TensorFlow.NET庫團隊密切合做,不只爲ML.NET中的用戶提供更高級別的API (例如咱們的新ImageClassification API),並且還幫助改進和發展開源項目Tensorflow.NET庫。

下面的堆棧圖顯示了ML.NET如何實現這些新的DNN訓練功能。雖然咱們目前僅支持訓練TensorFlow模型,但PyTorch支持在路線圖中。

做爲高級API的第一個主要場景,目前專一於圖像分類。這些新的高級API的目標是爲DNN訓練場景提供功能強大且易於使用的界面,如圖像分類對象檢測文本分類

下面的API代碼示例顯示了您能夠輕鬆地培訓新的TensorFlow模型,該模型的基礎是來自選定架構(預訓練模型)的遷移學習,例如Inception v3Resnet

var pipeline = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "LabelAsKey", inputColumnName: "Label")

.Append(mlContext.Model.ImageClassification("ImagePath", "LabelAsKey",

arch: ImageClassificationEstimator.Architecture.InceptionV3)); //Can also use ResnetV2101

// Train the model

ITransformer trainedModel = pipeline.Fit(trainDataView);

上面代碼中的重要一行是使用mlContext.Model.ImageClassification分類器訓練器,你能夠看到它是一個高級API,你只須要選擇基礎預訓練模型來導出,在本例中是Inception v3,但你也能夠選擇其餘預先訓練的模型,如Resnet v2101。初始v3是在ImageNet數據集上訓練的普遍使用的圖像識別模型。那些通過預先訓練的模型或架構是多年來由多位研究人員開發的許多想法的頂點,您如今能夠輕鬆利用它。

 

針對.NET Core 3.0進行了加強

 

ML.NET如今正在使用 .NET Core 3.0構建。這意味着ML.NET能夠在.NET Core 3.0應用程序中運行時利用.NET Core 3.0新功能。使用的第一個新功能是新的硬件內在功能,它容許.NET代碼經過使用特定於處理器的指令來加速數學運算。

固然,您仍然能夠在舊版本上運行ML.NET,可是當在.NET Framework或.NET Core 2.2及更低版本上運行時,ML.NET使用硬編碼爲基於x86的SSE指令的C ++代碼。SSE指令容許在單個指令中處理四個32位浮點數。現代的基於x86的處理器還支持AVX指令,容許在一條指令中處理8個32位浮點數。ML.NET的C#硬件內在函數代碼支持AVX和SSE指令,並將使用最好的指令。這意味着在現代處理器ML.NET上進行培訓 如今將訓練更快,由於它能夠執行更多的併發浮點操做,而不是隻支持SSE指令的現有C ++代碼。

C#硬件內在函數代碼帶來的另外一個優勢是,當處理器既不支持SSE也不支持AVX時,例如在ARM芯片上,ML.NET將回退到一次一個數字運算。這意味着核心ML.NET組件如今支持更多的處理器體系結構。(注意:仍然有一些組件在ARM處理器上不起做用,例如FastTree,LightGBM和OnnxTransformer。這些組件是用C ++代碼編寫的,目前沒有爲ARM處理器編譯。)

有關ML.NET如何在.NET Core 3.0中使用新硬件內在函數API的更多信息,請查看Brian Lui的博客文章使用.NET硬件內在函數API來加速機器學習場景

 

VS和CLI中的模型生成器已更新爲最新的GA版本

Visual Studio中的模型構建器工具和ML.NET CLI(均在預覽中)已更新爲使用最新的ML.NET GA版本(1.3)並解決了大量客戶反饋。在此處詳細瞭解更改。

Model Builder已更新至最新的ML.NET GA版本

Model Builder使用ML.NET(1.3)的最新GA版本,所以生成的C#代碼也引用了ML.NET 1.3。

改進了對其餘OS 本地化的支持

這解決了許多常常報告的問題,開發人員但願使用他們本身的本地化操做系統設置來訓練模型生成器中的模型。請閱讀此問題以獲取更多詳細信息。

針對模型構建器的客戶反饋

此版本中修復了許多問題。在發行說明中瞭解更多信息  。

新的示例應用

與此新版本一致,咱們還宣佈了涵蓋其餘方案的新的有趣示例應用程序:


基於時間序列SSA(單譜分析)的銷售預測方案


基於異常檢測PCA的信用卡欺詐檢測場景


搜索引擎根據排名任務排序結果場景


模型可解釋性和特徵重要性


數據庫加載器(關係數據庫的本機數據庫加載器)


深度學習培訓:圖像分類DNN從新培訓(遷移學習)

image
ASP.NET Core Razor Web應用程序(C#)上的可擴展ML.NET模型


Azure函數(C#)上的可擴展ML.NET模型

YouTube上的新ML.NET視頻播放列表

咱們在.NET基礎頻道建立了一個ML.NET Youtube播放列表,其中包含一個由選定視頻組成的列表,每一個視頻都集中在一個特定的ML.NET特性上,所以很是適合學習目的。

在這裏訪問ML.NET Youtube播放列表

相關文章
相關標籤/搜索