.NET机器学习 ML.NET 1.4预览版和模型生成器更新

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 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 本地化的支持

这解决了许多经常报告的问题,开发人员希望使用他们自己的本地化操作系统设置来训练模型生成器中的模型。请阅读此 问题 以获取更多详细信息。

针对模型构建器的客户反馈

此版本中修复了许多问题。在 发行说明中 了解更多信息  。

新的示例应用

与此新版本一致,我们还宣布了涵盖其他方案的新的有趣示例应用程序:

YouTube上的新ML.NET视频播放列表

我们在 .NET基础频道 创建了一个 ML.NET Youtube播放列表 ,其中包含一个由选定视频组成的列表,每个视频都集中在一个特定的 ML.NET 特性上,因此非常适合学习目的。

在这里访问 ML.NET Youtube播放列表