ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架。 ML.NET 还包括Model Builder (一个简单的UI工具)和 CLI ,使用自动机器学习(AutoML)构建自定义机器学习(ML)模型变得非常容易。
.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的更新。
这次更新有如下亮点:
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预览版中,我们还发布了一些令人兴奋的新功能
数据库加载器(预览)
这项功能引入了数据库加载器,可以直接针对关系数据库数据进行训练。这个装载器支持 .NET Core 或.NET框架下System.Data 支持的
任何关系型数据库,这意味着你可以使用任何关系数据库,例如SQL Server,SQL Azure Server,Oracle,SQLite的和PostgreSQL,MySQL和IBM DB2等。
在之前的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";
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 v3或Resnet。
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(单谱分析)的销售预测方案
模型可解释性和特征重要性
数据库加载器(关系数据库的本机数据库加载器)
深度学习培训:图像分类DNN重新培训(迁移学习)
ASP.NET Core Razor Web应用程序(C#)上的可扩展ML.NET模型
Azure函数(C#)上的可扩展ML.NET模型
YouTube上的新ML.NET视频播放列表
我们在.NET基础频道创建了一个ML.NET Youtube播放列表,其中包含一个由选定视频组成的列表,每个视频都集中在一个特定的ML.NET特性上,因此非常适合学习目的。
在这里访问ML.NET Youtube播放列表。