宣布推出 ML.NET 3.0
作者: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。
相关文章:
宣布推出 ML.NET 3.0
作者:Jeff Handley 排版:Alan Wang ML.NET 是面向 .NET 开发人员的开源、跨平台的机器学习框架,可将自定义机器学习模型集成到 .NET 应用程序中。ML.NET 3.0 版本现已发布,其中包含大量新功能和增强功能! 此版本中的深…...
常见的排序算法---快速排序算法
快速排序算法 快排是基于分治的思想来的,快速排序就是在元素序列中选择一个元素作为基准值,每趟总数据元素的两端开始交替排序,将小于基准值的交换的序列前端,大于基准值的交换到序列后端,介于两者之间的位置称为基准值…...
hive企业级调优策略之分组聚合优化
测试用表准备 hive企业级调优策略测试数据 (阿里网盘下载链接):https://www.alipan.com/s/xsqK6971Mrs 订单表(2000w条数据) 表结构 建表语句 drop table if exists order_detail; create table order_detail(id string comment 订单id,user_id …...
英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案
12月13-14日,“凝心聚力,共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动,市场总监李甘来先生现场发表了题为《AI哨兵,为铁路安全运营站好第一道岗》的精彩主题演讲&…...
【openssl】Linux升级openssl-1.0.1到1.1.1
文章目录 前言一、openssl是什么?二、使用步骤1.下载2.编译安装3.一些问题 总结 前言 记录一次openssl的升级,1.0.1升级到1.1.1 一、openssl是什么? OpenSSL是一个开源的加密工具包,广泛用于安全套接层(SSLÿ…...
美国联邦机动车安全标准-FMVSS
FMVSS标准介绍: FMVSS是美国《联邦机动车安全标准》,由美国运输部下属的国家公路交通安全管理局(简称NHTSA)具体负责制定并实施。是美国联邦政府针对机动车制定的安全标准,旨在提高机动车的安全性能,减少交通事故中的人员伤亡。F…...
龙迅LT6211B,HDMI1.4转LVDS,应用于AR/VR市场
产品描述 LT6211B 是一款用于 VR/ 显示应用的高性能 HDMI1.4 至 LVDS 芯片。 对于 LVDS 输出,LT6211B 可配置为单端口、双端口或四端口。对于2D视频流,同一视频流可以映射到两个单独的面板,对于3D视频格式,左侧数据可以发送到一个…...
解决docker拉取镜像错误 missing signature key 问题
核心原因:本地docker版本过低,需要: 1. 彻底卸载本地docker文件 2. 配置yum 镜像文件, 重新安装最新版本 相信教程可参考: CentOS安装Docker(超详细)_centos 安装docker-CSDN博客...
倒计数器:CountDownLatch
CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现, 该计数器初始化为一个正整数,每当一个线程完成了指定操作,计数器就会减一。…...
vue内容渲染
内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点:会覆盖元素内部原有的内容 2.{{}}:插值表达式在实际开发中用的最多,只是内容的占位符,不会覆盖内容 3.v-html:可以把带有标…...
Kafka为什么能高效读写数据
1)Kafka 本身是分布式集群,可以采用分区技术,并行度高(生产消费方并行度高); 2)读数据采用稀疏索引,可以快速定位要消费的数据; 3)顺序写磁盘; …...
Flink系列之:Table API Connectors之Debezium
Flink系列之:Table API Connectors之Debezium 一、Debezium二、依赖三、使用Debezium Format四、可用元数据五、Format参数六、重复的变更事件七、消费 Debezium Postgres Connector 产生的数据八、数据类型映射 一、Debezium Debezium 是一个 CDC(Chan…...
【Python基础】文件读写
文章目录 [toc]打开文件open()函数参数解析示例 文件路径绝对路径示例 相对路径示例 打开文件的模式常用模式 读文件示例 写文件示例 按行读写文件readline()示例 readlines()示例 writelines()示例 关闭文件示例finally语句示例 上下文管理器示例 自定义读写类示例 打开文件 …...
电脑风扇控制软件Macs Fan Control mac支持多个型号
Macs Fan Control mac是一款专门为 Mac 用户设计的软件,它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度,以提高设备的散热效果,减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温…...
clangd:Couldn‘t build compiler instance
在使用vscode clangd 搭建RK3588 5.10版本linux内核代码开发环境时,使用bear生成 compile_commands.json时,clangd生成标签失败代码无法跳转,查看clangd日志,发现标签生成失败,失败原因:Couldnt build comp…...
Springboot启动出现Error to process server push response的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 注意,此篇博客只提供一种bug排查思路,毕竟每个项目引起的依赖包冲突都不一致! 1. 问题所示 启动Springboot的时候,5秒刷一次这个,大致如下: 2023-12-17 13:02:01.166 WARN 20196 --- [ main] o.s.boot.ac…...
P2P网络下分布式文件共享场景的测试
P2P网络介绍 P2P是Peer-to-Peer的缩写,“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,从字面意思来看,P2P可以理解为对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等网络(Peer-to-Pee…...
计算机组成原理综合1
1、完整的计算机系统应包括______。D A. 运算器、存储器和控制器 B. 外部设备和主机 C. 主机和实用程序 D. 配套的硬件设备和软件系统 2、计算机系统中的存储器系统是指______。D A. RAM存储器 B. ROM存储器 C. 主存储器 …...
探秘 AJAX:让网页变得更智能的异步技术(下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
CentOs7.x安装部署SeaTunnelWeb遇到的坑
CentOs7.x安装部署SeaTunnelWeb遇到的坑 文章目录 1. 环境2. SeaTunnel安装部署2.1下载安装包2.2 设置环境变量2.3 安装连接器插件2.4 拷贝jar包到lib下2.5 启动命令2.6 执行官方client提交任务demo 3. SeaTunnel-Web安装部署3.1 下载安装包3.2 初始化数据库脚本或修改配置appl…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
