ML.NET 是一個面向 .NET 開發人員的開源和跨平台機器學習框架,它包括 Model Builder 和 CLI(命令行介面),讓使用自動機器學習(AutoML)構建自定義機器學習模型變得更容易。1.4 版本已經發布了,以下是本次更新的一些亮點:
在 .NET 中實現完整的 DNN 模型重新訓練和傳輸學習。例如,你可以通過使用自己的圖像從 ML.NET API 中本地培訓 TensorFlow 模型來創建自己的自定義圖像分類模型。ML.NET 的優點是使用了一個非常簡單的高級 API,只需使用幾行 C# 代碼就可以定義和訓練圖像分類模型。而在使用低級別 Tensorflow.NET 庫時,相同的操作則需要數百行代碼。
Tensorflow.NET 庫是一個開源的低級別 API 庫,該庫是開源 SciSharp 堆棧庫的一部分,它為 TensorFlow 提供 .NET 標準綁定。下面的堆棧圖顯示了 ML.NET 是如何在 DNN 培訓中實現這些新特性的:
圖像分類功能最初是在 v1.4 預覽版中引入的,在 GA 版本中添加了一下新功能:
下面的 API 代碼示例展示了如何輕鬆地訓練一個新的 TensorFlow 模型:
// Define model's pipeline with ImageClassification defaults (simplest way)
var pipeline = mlContext.MulticlassClassification.Trainers
.ImageClassification(featureColumnName: "Image",
labelColumnName: "LabelAsKey",
validationSet: testDataView)
.Append(mlContext.Transforms.Conversion.MapKeyToValue(outputColumnName: "PredictedLabel",
inputColumnName: "PredictedLabel"));
// Train the model
ITransformer trainedModel = pipeline.Fit(trainDataView);
資料庫載入器允許將資料庫中的數據載入到 IDataView 中,因此可以直接針對關係資料庫進行模型培訓。此載入程序支持 .NET Core 或 .NET Framework 中 System.Data 支持的任何關係資料庫提供程序,這意味著可以使用任何 RDBMS,如 SQL Server、Azure SQL、Oracle、SQLite、PostgreSQL、MySQL、Advanced 等。
這個新的 Database Loader 提供更加簡化的代碼實現,因為它從資料庫讀取數據並通過 IDataView 提供數據的方式是由 ML.NET 框架提供的,所以只需要指定資料庫連接字元串、DataSet 列的 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";
string commandText = "SELECT * from SentimentDataset";
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader();
DbProviderFactory providerFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DatabaseSource dbSource = new DatabaseSource(providerFactory, 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;
}
當使用資料庫 ML.NET 進行培訓時也支持數據流,這意味著整個資料庫不需要裝入內存,它將根據需要從資料庫中讀取,從而可以處理非常大的資料庫(即 50 GB、100 GB 或更大的資料庫)。
當將 ML 模型部署到多線程和可伸縮的 .NET Core Web 應用程序和服務(例如 ASP .NET Core Web 應用程序、Web API 或 Azure 函數)中時,推薦使用PredictionEnginePool,不針對每個請求直接創建 PredictionEngine 對象,PredictionEnginePool 是 Microsoft.Extensions.MLNuGet 包的一部分。
現在可以在 Jupyter notebooks 中運行任何 .NET 代碼(C#/F#),因此也可以在其中運行 ML.NET 代碼。
查看 DataView 中載入的類型數據:
繪製數據分佈:
培訓 ML.NET 模型並記錄其培訓時間:
可在 notebook 中看到模型的質量指標,並將其記錄下來供以後審查:
Visual Studio 的 Model Builder Tool 已經更新,使用最新的 ML.NET GA 版本(1.4 GA),此外,它還包括新特性,例如 Visual Studio 中的可視化體驗,用於本地圖像分類模型培訓。
關於 ML.NET 的更多詳情,請見發布說明:
[admin
]