ML.NET 1.4 发布,跨平台机器学习框架

afterer
 afterer
发布于 2019年11月08日
收藏 13

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 培训中实现这些新特性的:

DNN stack

图像分类功能最初是在 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)

Database Loader diagram

数据库加载器允许将数据库中的数据加载到 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 and MLNET logos

现在可以在 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/

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:ML.NET 1.4 发布,跨平台机器学习框架
加载中

精彩评论

久永
久永
欢迎各位捧场#TensorFlow.NET#👏🙏
个人观点:py的ai更适合研究,而不是投产。
真正的ai生产型,还是需要一个强类型语言做支撑。
比较看好 C#F# 和 Rust 。

最新评论(3

久永
久永
欢迎各位捧场#TensorFlow.NET#👏🙏
个人观点:py的ai更适合研究,而不是投产。
真正的ai生产型,还是需要一个强类型语言做支撑。
比较看好 C#F# 和 Rust 。
怎一个强字了得
有公司用过吗?效果怎么样
egmkang
egmkang
我用这个做了一个聊天广告的分类器, 用来识别聊天内容中的广告
返回顶部
顶部