ML.NET 是一个面向 .NET 开发人员的开源和跨平台机器学习框架,它包括 Model Builder 和 CLI(命令行接口),让使用自动机器学习(AutoML)构建自定义机器学习模型变得更容易。1.4 版本已经发布了,以下是本次更新的一些亮点:
基于 GPU 支持的深度神经网络图像分类(GA)
在 .NET 中实现完整的 DNN 模型重新训练和传输学习。例如,你可以通过使用自己的图像从 ML.NET API 中本地培训 TensorFlow 模型来创建自己的自定义图像分类模型。ML.NET 的优点是使用了一个非常简单的高级 API,只需使用几行 C# 代码就可以定义和训练图像分类模型。而在使用低级别 Tensorflow.NET 库时,相同的操作则需要数百行代码。
Tensorflow.NET 库是一个开源的低级别 API 库,该库是开源 SciSharp 堆栈库的一部分,它为 TensorFlow 提供 .NET 标准绑定。下面的堆栈图显示了 ML.NET 是如何在 DNN 培训中实现这些新特性的:
图像分类功能最初是在 v1.4 预览版中引入的,在 GA 版本中添加了一下新功能:
在 Windows 和 Linux 上支持 GPU,GPU 支持是基于 NVIDIA CUDA
内存图像预测:用内存中的图像而不是文件路径来做预测
当达到最佳精度时,它将停止训练,并且不会随着更多的训练周期(EIPCHS)而进一步提高
在图像分类器中添加其他支持的 DNN 体系结构:Inception V3、ResNet V2 101、Resnet V2 50 和 Mobilenet V2
下面的 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);
Database Loader(GA)
数据库加载器允许将数据库中的数据加载到 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 或更大的数据库)。
可伸缩部署的预测引擎库(GA)
当将 ML 模型部署到多线程和可伸缩的 .NET Core Web 应用程序和服务(例如 ASP .NET Core Web 应用程序、Web API 或 Azure 函数)中时,推荐使用PredictionEnginePool,不针对每个请求直接创建 PredictionEngine 对象,PredictionEnginePool 是 Microsoft.Extensions.MLNuGet 包的一部分。
增强 .NET Core 3.0(GA)
在 Jupyter notebooks 中使用 ML.NET
现在可以在 Jupyter notebooks 中运行任何 .NET 代码(C#/F#),因此也可以在其中运行 ML.NET 代码。
查看 DataView 中加载的类型数据:
绘制数据分布:
培训 ML.NET 模型并记录其培训时间:
可在 notebook 中看到模型的质量指标,并将其记录下来供以后审查:
Visua lStudio 中 Model Builder 的更新
Visual Studio 的 Model Builder Tool 已经更新,使用最新的 ML.NET GA 版本(1.4 GA),此外,它还包括新特性,例如 Visual Studio 中的可视化体验,用于本地图像分类模型训练。
关于 ML.NET 的更多详情,请见发布说明:
https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-4-global-availability-machine-learning-for-net/