宣布推出 ML.NET 3.0

news2024/11/16 21:51:48

作者:Jeff Handley
排版:Alan Wang

ML.NET 是面向 .NET 开发人员的开源、跨平台的机器学习框架,可将自定义机器学习模型集成到 .NET 应用程序中。ML.NET 3.0 版本现已发布,其中包含大量新功能和增强功能!

此版本中的深度学习场景得到了大幅扩展,新增了对象检测、命名实体识别和问答等新功能。所有这一切都归功于与 TorchSharp 和 ONNX 模型的集成和互操作性。我们还将与 LightGBM 的集成更新到最新版本。

通过对 DataFrame 的大量增强和错误修复以及新的 IDataView 互操作性功能,数据处理场景得到了极大的改善。加载、检查、转换和可视化数据的重要步骤更加强大。

本文重点介绍了 ML.NET 3.0 版本的几个方面,有关完整的更新列表可在发行说明中找到。

深度学习

过去一年,我们都见证了深度学习场景和能力的加速增长。借助 ML.NET 3.0,您可以在 .NET 应用程序中利用其中的许多改进。

对象检测

对象检测是一个计算机视觉问题。虽然与图像分类密切相关,但对象检测以更细粒度的尺度执行图像分类。对象检测对图像中的实体进行定位和分类。当图像包含多个不同类型的对象时,最好使用对象检测功能。

我们在今年早些时候发布了 ML.NET Model Builder 中的对象检测功能。这些功能建立在ML.NET 3.0 ( PR #6605 )中引入的 TorchSharp 驱动的对象检测 API 的基础之上。

在底层,对象检测 API 利用了 Microsoft Research 的一些最新技术,并由使用 TorchSharp 构建的基于 Transformer 的神经网络架构提供支持。有关底层模型的更多详细信息,请参阅搜索 Vision Transformer 空间论文。

对象检测包含在 Microsoft.ML.TorchSharp 3.0.0 包中的 Microsoft.ML.TorchSharp 和 Microsoft.ML.TorchSharp.AutoFormerV2 命名空间中。您可以阅读文章- ML.NET Model Builder 中的对象检测以深入了解。

var chain = new EstimatorChain<ITransformer>();

var filteredPipeline = chain. Append(
        mlContext.Transforms.Text.TokenizeIntoWords(labelColumnName, separators: [',']),
        TransformerScope.Training
    )
    .Append(
        mlContext.Transforms.Conversion.MapValueToKey(labelColumnName),
        TransformerScope.Training
    )
    .Append(
        mlContext.Transforms.Text.TokenizeIntoWords(boundingBoxColumnName, separators: [',']),
        TransformerScope.Training
    )
    .Append(
        mlContext.Transforms.Conversion.ConvertType(boundingBoxColumnName),
        TransformerScope.Training
    )
    .Append(mlContext.Transforms.LoadImages("Image", imageFolder, "ImagePath"))
    .Append(
        mlContext.MulticlassClassification.Trainers.ObjectDetection(
            labelColumnName, predictedLabelColumnName, scoreColumnName,
            boundingBoxColumnName, predictedBoundingBoxColumnName,
            imageColumnName, maxEpoch
        )
    )
    .Append(mlContext.Transforms.Conversion.MapKeyToValue(predictedLabelColumnName));

var options = new ObjectDetectionTrainer.Options()
{
    LabelColumnName = labelColumnName,
    BoundingBoxColumnName = boundingBoxColumnName,
    ScoreThreshold = .5,
    MaxEpoch = maxEpoch,
    LogEveryNStep = 1,
};

var pipeline = mlContext.Transforms.Text.TokenizeIntoWords(labelColumnName, separators: [','])
    .Append(mlContext.Transforms.Conversion.MapValueToKey(labelColumnName))
    .Append(mlContext.Transforms.Text.TokenizeIntoWords(boundingBoxColumnName, separators: [',']))
    .Append(mlContext.Transforms.Conversion.ConvertType(boundingBoxColumnName))
    .Append(mlContext.Transforms.LoadImages("Image", imageFolder, "ImagePath"))
    .Append(mlContext.MulticlassClassification.Trainers.ObjectDetection(options))
    .Append(mlContext.Transforms.Conversion.MapKeyToValue(predictedLabelColumnName));

var model = pipeline.Fit(data);
var idv = model.Transform(data);

var metrics = ML.MulticlassClassification.EvaluateObjectDetection(
    idv, idv.Schema[2], idv.Schema[boundingBoxColumnName], idv.Schema[predictedLabelColumnName],
    idv.Schema[predictedBoundingBoxColumnName], idv.Schema[scoreColumnName]
);

命名实体识别和问答

自然语言处理(Natural Language Processing)是软件中最常见的 ML 需求之一。NLP 最重要的两个进步领域是问答 (QA) 和命名实体识别 (NER)。在 ML.NET 3.0中,这两种场景通过在ML.NET 2.0中引入的现有 TorchSharp RoBERTa 文本分类功能的基础上进行构建,从而得以实现。

NER 和 QA 训练器都包含在 Microsoft.ML.TorchSharp 3.0.0 包和 Microsoft.ML.TorchSharp 命名空间中。

// QA 训练器
var chain = new EstimatorChain<ITransformer>();
var estimatorQA = chain.Append(mlContext.MulticlassClassification.Trainers.QuestionAnswer(
    contextColumnName, questionColumnName, trainingAnswerColumnName,
    answerIndexColumnName, predictedAnswerColumnName, scoreColumnName,
    topK, batchSize, maxEpochs, architecture, validationSet
));

// NER 训练器
var estimatorNER = chain.Append(mlContext.Transforms.Conversion.MapValueToKey("Label", keyData))
    .Append(mlContext.MulticlassClassification.Trainers.NameEntityRecognition(
        labelColumnName, outputColumnName, sentence1ColumnName,
        batchSize, maxEpochs, architecture, validationSet
    ))
    .Append(mlContext.Transforms.Conversion.MapKeyToValue(outputColumn));

Intel oneDAL 训练加速

在我们发布 ML.NET 2.0 后不久,我们宣布了由 Intel oneDAL 支持的训练硬件加速,作为 ML.NET 3.0 首个预览版的一部分。Intel oneDAL(Intel oneAPI 数据分析库)是一个通过为数据分析和机器学习过程的所有阶段提供高度优化的算法构建块,帮助加快数据分析速度的库。Intel oneDAL 在 64 位架构中利用 SIMD 扩展,这是 Intel 和 AMD CPU 中的特色功能。

有关此功能集的更多信息,请参阅文章-使用 Intel oneDAL 加速 ML.NET 培训。

自动机器学习(Automated Machine Learning)(AutoML)

自动机器学习 (AutoML) 实现将机器学习应用于数据的过程自动化。AutoML 增强了Model Builder和 ML.NET CLI 中的体验。

借助 ML.NET 3.0,AutoML 体验获得了多项新功能。AutoML Sweeper 现在支持句子相似性、问答和对象检测。社区成员 Antti “Andy” Törrönen (@torronen) 实现了采样键列名称 (SamplingKeyColumnName),它可以与 SetDataset 一起使用,以便更轻松地设置采样键名称。AutoZero 调谐器现在可用于 BinaryClassification 实验。用于实验的最大模型数量可以通过 ExperimentSettings.MaxModel 指定。

感谢社区成员 Andras Fuchs (@andrasfuchs),通过 AutoML.IMonitor 实现持续资源监控。这允许监视内存需求、虚拟内存使用情况和剩余磁盘空间。使用这种监控,可以通过自定义 IMonitor 实现来控制长时间运行的实验,以避免崩溃和失败的试验。

DataFrame

此版本包括对 DataFrame 的一系列显著更新,其中许多更新是由社区成员 Aleksei Smirnov (@asmirnov82) 完成的。我们非常感谢 Aleksei 的贡献,相信您也会喜欢!

为了实现更多的 IDataView <-> DataFrame 转换,添加了对 String 和 VBuffer 列类型的支持。字符串值作为 ReadOnlyMemory处理,并且 VBufferDataFrameColumn列类型支持所有受支持基元。列现在可以存储超过 2 GB 的数据,之前的限制已被移除。Apache Arrow Date64 列数据现在也可以识别。

ML.NET 3.0 中扩展了 DataFrame 的数据加载场景。感谢社区成员 Andrei Faber (@andrei-faber),现在可以从 SQL 数据库导入和导出数据。这是使用 ADO.NET 完成的,它支持大量与 SQL 兼容的数据库。作为此实现的一部分,还可以从任何 IEnumerable 集合加载数据并将数据导出到 System.Data.DataTable。当列名匹配时,可以将一个 DataFrame 中的数据附加到另一个 DataFrame 中,从而放宽了之前对列排序的限制。通过 DataFrame.LoadCsv 加载的逗号分隔数据现在还可以处理重复的列名称,并可以选择重命名重复的列。

DataFrame 还有许多其他增强和修复功能。在列克隆和二进制比较场景中,算术性能得到了改进。在执行算术运算时,对空值的处理得到了改进,减少了转换和清理数据的步骤。甚至还对调试器进行了改进,为具有长名称的列生成更具可读性的输出。

Tensor Primitives 集成

Tensor Primitives 是 System.Numerics.Tensors.TensorPrimitives 的缩写,是一组新的 API,引入了对 tensor 运算的支持。作为 .NET 8 的一部分,我们的团队发布了一个新的 System.Numerics.Tensors 包,其中引入了 Tensor Primitives。Tensor Primitives API 是 .NET 中 AI 数值演进的下一步,它建立在硬件内在函数和通用数学的基础上。

虽然与 Tensor Primitives 的集成纯粹是一个细节实现,并不会影响 ML.NET 的公共接口,但它带来了一些显着的性能改进。以下基准测试结果说明了针对 .NET 8 时的收益。
在这里插入图片描述

更多详细信息和 .NET Framework 基准测试结果都包含在 dotnet/machinelearning#6875 中。

除了提升这些性能之外,我们还利用这次集成机会来测试 TensorPrimitives API 的 API 形状、可用性、功能和正确性。证明 API 可以满足 ML.NET 场景是将 System.Numerics.Tensors 包从预览版过渡到稳定版本 8.0.0 的重要一步。

下一步计划

随着 .NET 8 和 ML.NET 3.0 版本的完成,我们开始制定.NET 9 和 ML.NET 4.0 的计划。不过在那之前,您可以期待 Model Builder 和 ML.NET CLI 将会更新以使用 ML.NET 3.0 版本。

我们将继续扩展深度学习场景和集成、增强 DataFrame,以及扩展 System.Numerics.Tensors 中可用的 API,并将它们集成到 ML.NET 中。请继续关注更详细的 ML.NET 4.0 计划。

入门和资源

您可以在 Microsoft Learn 中了解有关 ML.NET、Model Builder 和 ML.NET CLI 的更多信息。

如果您遇到任何问题、功能请求或反馈,请在 ML.NET 存储库中提出问题。

您可以加入 ML.NET Community Discord 或 .NET Development Discord 上的 #machine-learning 频道。

您可以在每周三上午 10 点(太平洋时间)收看 Machine Learning .NET Community Standup。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比 style gan 更好的 style gan2

上一篇博客介绍了style gan 原理&#xff0c;但是 style gan 的结果会有水珠伪影&#xff0c;作者实验后发现是 Adain 导致的&#xff0c;AdaIN对每一个feature map的通道进行归一化&#xff0c;这样可能破坏掉feature之间的信息。当然实验证明发现&#xff0c;去除AdaIN的归一…

轻量级购物小程序H5产品设计经典样例

主要是看到这个产品设计的不错值得借鉴特记录如下&#xff1a; 不过大多数购物app都大致相同&#xff0c;这个算是经典样例&#xff0c;几乎都可以复制&#xff0c;我第一次使用&#xff0c;感觉和顺畅。看上去产品是经过打磨的&#xff0c;布局非常好。内容也很丰富。支持异业…

SpringCloud 分布式事务

一.介绍 首先我们看一个项目中的下单业务整体流程&#xff1a; 由于订单、购物车、商品分别在三个不同的微服务&#xff0c;而每个微服务都有自己独立的数据库&#xff0c;因此下单过程中就会跨多个数据库完成业务。而每个微服务都会执行自己的本地事务&#xff1a; 交易服务&…

uniapp-安卓APP开发时使用手机调试

调试 1. 手机打开开发者模式: 华为手机举列-->设置-->关于手机-->版本号&#xff0c;多次连续点击“版本号”&#xff0c;就会提示已打开开发者模式 2. 华为手机举列-->设置-->系统和更新-->开发人员选项-->打开 USB调试&#xff0c;进入调试模式 3. 先…

路由器设置代理IP教程,http代理怎么固定IP地址?

路由器设置代理IP教程 一、确定代理IP地址 首先&#xff0c;你需要确定你要使用的代理IP地址。你可以从代理服务提供商处获取代理IP地址和端口号。 二、登录路由器管理界面 在浏览器中输入路由器的IP地址&#xff0c;输入账号和密码&#xff0c;进入路由器的管理界面。 三、设置…

k8s集群1.23.0版本部署说明

1.部署 k8s1.23.0版本与1.26.0版本的部署基本差不多&#xff0c;只不过k8s 1.23版本不需要部署cri-docker&#xff0c;所以只需要在1.26.0版本部署的基础上不要cri-docker的部署即可 参考&#xff1a;kubeadm部署k8s 1.26.0版本高可用集群_kubeadm 高可用集群-CSDN博客 搭建…

xcode无线真机调试详细图文步骤

步骤一、 步骤二&#xff1a; 步骤三&#xff1a; 配置完到这里&#xff0c;点击真机右键&#xff0c;菜单栏并未出现connect via ip address 选项&#xff0c;也没出现无线连接的小地球图标&#xff0c;别慌&#xff0c;接着进行下一步操作即可。 步骤四&#xff1a; 1.打开…

【C++】对象特性:无参有参构造函数,拷贝构造函数,析构函数

目录 对象的初始化和清理1.1 构造函数和析构函数1.2 构造函数的分类及调用1.3 拷贝构造函数调用时机1.4 构造函数调用规则1.5 深拷贝与浅拷贝 对象的初始化和清理 生活中我们买的电子产品都基本会有出厂设置&#xff0c;在某一天我们不用时候也会删除一些自己信息数据保证安全。…

个人用户的数据之美:数据可视化助力解读

数据可视化是一种强大的工具&#xff0c;不仅可以为企业和专业人士提供见解&#xff0c;也对个人用户带来了许多实际的帮助。下面我就以一个数据可视化从业者的视角&#xff0c;来谈谈数据可视化对个人用户的益处&#xff1a; 首先对于个人用户来说&#xff0c;数据可视化可以让…

代码规范-代码注释,及注释辅助工具

文章目录 代码规范-代码注释&#xff0c;及注释辅助工具1.常见代码块注释提示标签2.JSDoc3.注释格式 参考&#xff1a;https://knightyun.github.io/2020/03/13/js-comment-format 代码规范-代码注释&#xff0c;及注释辅助工具 1.常见代码块注释提示标签 descfileauthorpara…

【python与机器学习2】激活函数

目录 1 什么是激活函数&#xff1f; activation function 1.1 阈值 1.2 激活函数a(x) &#xff0c;包含偏置值θ 1.3 激活函数a(x) &#xff0c;包含偏置值b 2 激活函数1: 单位阶跃函数 2.1 函数形式 2.2 函数图形 2.3 函数特点 2.4 代码实现这个 单位阶跃函数 3 激活…

GaussDB数据库表创建行访问控制策略

目录 一、前言 二、GaussDB中的行访问控制 1、CREATE ROW LEVEL SECURITY POLICY语法 2、ALTER ROW LEVEL SECURITY POLICY语法 3、ROW LEVEL SECURITY策略与适配SQL语法关系 三、GaussDB中的行访问控制策略示例 1、实现GaussDB行访问控制的一般步骤 2、行访问控制策略…

使用深度学习的微光图像和视频增强:综述

1INTRODUCTION 微光图像增强&#xff08;LLIE&#xff09;旨在提高在光照较差的环境中捕获的图像的感知或可解释性。该领域的最新进展主要是基于深度学习的解决方案&#xff0c;其中采用了许多学习策略、网络结构、损失函数、训练数据等。在本文中&#xff0c;我们提供了一个全…

用 SpringBoot+Redis 解决海量重复提交问题

1 前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求&#xff0c;我们来解释一下幂等的概念&#xff1a;**任意多次执行所产生的影响均与一次执行的影响相同 。**按照这个含义&#xff0c;最终的含义就是 对数据库的影响只能是一次性的&#xff0c;不能重复处理…

智能优化算法应用:基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.寄生捕食算法4.实验参数设定5.算法结果6.…

(自适应手机版)全屏滚动装修装潢公司网站模板

(自适应手机版)全屏滚动装修装潢公司网站模板 PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修公司网站、装潢公司网站类等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; 自适应手机版&#xff0c;同一个后台&a…

企业微信无法给Gmail发邮件问题

问题说明 在使用企业微信给国外客户的Gmail邮箱发信件的时候&#xff0c;邮件一直被退信&#xff0c;退信内容如下&#xff1a; 发件人&#xff08;*******.cn&#xff09;域名的DNS记录未设置或设置错误导致对方拒收此邮件。 host gmail-smtp-in.l.google.com[142.251.175.2…

Qt Q_DECL_OVERRIDE

Q_DECL_OVERRIDE也就是C的override&#xff08;重写函数&#xff09;&#xff0c;其目的就是为了防止写错虚函数,在重写虚函数时需要用到。 /* 鼠标按下事件 */ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; 参考: Qt Q_DECL_OVERRIDE - 一杯清酒邀明月 - 博客…

CentOS:Docker容器中安装vim

在使用docker容器时&#xff0c;里边没有安装vim时&#xff0c;敲vim命令时提示说&#xff1a;vim: command not found 这个时候就须要安装vim&#xff0c;安装命令&#xff1a; apt-get install vim 出现以下错误&#xff1a; 解决方法&#xff1a; apt-get update 这个命令的…

RabbitMQ 高级

1.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。消息从发送者发送消息&#xff0c;到消费者处理消息&#xff0c;需要经过的流程是这样的&#xff1a; 消息从生产者到消费者的每一步都可能导致消息丢失&#xff1a; 发送消息时丢失&#xff1a; 生…