使用ML.NET模型生成器来完成图片性别识别

什么是ML.NET?

ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。借助此功能,可以使用应用程序的可用数据进行自动预测。机器学习应用程序利用数据中的模式来进行预测,而不需要进行显式编程。

ML.NET 的核心是机器学习模型 。该模型指定将输入数据转换为预测所需的步骤。借助 ML.NET,可以通过指定算法来训练自定义模型,也可以导入预训练的 TensorFlow 和 ONNX 模型。

ML.NET 支持在使用 .NET Core 的 Windows、Linux 和 macOS 或使用 .NET Framework 的 Windows 上运行。所有平台均支持 64 位。Windows 支持 32 位,TensorFlow、LightGBM 和 ONNX 相关功能除外。

了解ML.NET模型生成器

ML.NET 模型生成器是一个直观的图形化 Visual Studio 扩展,用于生成、训练和部署自定义机器学习模型。其使用自动化的机器学习 (AutoML) 来探索不同的机器学习算法和设置,以帮助找到最合适的方案。


使用模型生成器不需要具备机器学习的专业知识。只需要一些数据,和确定要解决的问题。模型生成器会生成将模型添加到 .NET 应用程序的代码。

值得注意的是,目前ML.NET 模型生成器是属于预览版,需要先启用此预览功能:

接下来,我们将使用此模型生成器来生成图片性别生成的代码。

生成图片性别识别的代码

主体步骤如下所示:

1、创建控制台项目,然后添加【机器学习】

2、选择方案,这里我们选择【图像分类】

当完成了第一步操作之后,我们将打开ML.NET模型生成器的UI界面。这里我们选择【图像分类】方案:

3、选择训练环境

4、添加数据

在此之前,我们需要先准备好数据。由于是做图片分类,我们需要先准备图片数据,并且以文件夹的形式分类,比如:

准备好图片数据后,我们就可以在【数据】界面添加对应的文件夹了:

添加完成后,就可以看到【数据预览】:

这里笔者准备了5000多张学生图片,由于涉及隐私,这些数据样本不会公开,如需要训练可以去国外很多AI网站下载数据样本。

 

5、训练

训练是一个自动的过程,模型生成器通过该过程教模型如何回答方案相关的问题。训练后,模型可以对其没有见过的输入数据进行预测。例如,在预测房价时,可以预测新上市的房屋销售价。因为模型生成器使用自动机器学习 (AutoML),所以在训练期间不需要任何人工输入或微调操作。

接下来,我们【开始训练】:

一般500M数据需要训练大概半小时以上(具体还需视机器性能而定):

6、评估 

训练结束后,我们就可以开始评估了。评估是衡量模型品质的过程。下面97.08的准确性已经是性能非常好的模型了,高于50%的准确性才是可以接受的模型。

如果模型性能评分不符合预期,可以:

  • 延长训练时间。有了更多时间,自动机器学习引擎可以体验更多算法和设置。

  • 添加更多更精确的数据。有时,数据量不足以训练高质量的机器学习模型。对于包含少量示例的数据集,尤其如此。

  • 均衡分配数据。对于分类任务,请确保在各个类别间均匀分配训练集。例如,若有四个类别和100 个训练示例,前两类(标记 1 和标记 2)包含 90 个记录,而剩下两类(标记 3 和标记 4)只包含 10 个记录,这就存在数据不均衡的问题,可能会导致模型很难正确预测标记 3 或标记 4。

回到刚才的主题,我们可以试用刚训练出的模型。这里笔者找了几张数据样本之外的图片进行测试:

模型的准确性非常之高,我们用一张偏女性化的男性图片进行测试:

从上面的测试结果可以看出,准确性基本上取决于数据样本的数量和质量!

 

7、添加代码

完成评估阶段后,模型生成器可以输出一份模型文件和代码,我们可以使用该代码将模型添加到应用程序。ML.NET 模型保存为 zip 文件。用于加载和使用模型的代码会以新项目的形式添加到解决方案中。模型生成器还会添加一个示例控制台应用,可以运行该应用来查看工作状态下的模型。

 

此外,模型生成器还会输出生成模型的代码,以便你能了解生成模型所使用的步骤。还可以通过模型训练代码使用新的数据重新训练模型。添加代码如下所示:

【添加】之后,在解决方案中我们就可以相关代码了:

 

如上图所示,ML.NET模型的zip文件也包含在解决方案中。

 

执行示例代码

我们将【GenderRecognitionML.ConsoleApp】工程设置为启动项目,打开示例代码如下所示:

using System;
using GenderRecognitionML.Model;namespace GenderRecognitionML.ConsoleApp
{class Program{static void Main(string[] args){// Create single instance of sample data from first line of dataset formodel inputModelInput sampleData = new ModelInput(){ImageSource =@"D:\workspace\AI\GenderRecognition\数据样本\女\20200612180307_xxx.jpg",};// Make a single prediction on the sample data and print resultsvar predictionResult = ConsumeModel.Predict(sampleData);Console.WriteLine("Using model to make single prediction --Comparing actual Label with predicted Label from sample data...\n\n");Console.WriteLine($"ImageSource: {sampleData.ImageSource}");Console.WriteLine($"\n\nPredicted Labelvalue {predictionResult.Prediction} \nPredicted Label scores:[{String.Join(",", predictionResult.Score)}]\n\n");Console.WriteLine("=============== End of process, hit any key tofinish ===============");Console.ReadKey();}}
}

通过上面的示例代码我们非常简单了解了如何来使用模型,仅需传入图片路径,即可使用模型输出对应的图像标签(男、女)和准确性,我们可以运行起来,执行结果如下所示:

至此,整个教程就完成了,是不是非常简单呢?即使我们不具备机器学习的专业知识!

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

QQ群:

编程交流群<85318032> 

产品交流群<897857351>

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

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

相关文章

软件构造学习笔记-第十四周、十五周

课程进入了尾声。本周内容主要是线程安全相关。线程错误比一般的错误更加难以发现和修改&#xff0c;甚至加入一条print语句就能改变时间分片&#xff0c;从而导致错误消失。重点介绍了“锁”的机制&#xff0c;在使用时避免对整个方法进行lock&#xff0c;而是对可能发生线程不…

打爆你的 CPU

通过一段代码打爆你的 CPUIntro这是这个煞笔代码系列的最后一篇——Full CPU&#xff0c;相对来说也比前面三个简单一些&#xff0c;没有那么多的知识点。今天来尝试写一段代码&#xff0c;把 CPU 打满&#xff0c;让所有处理器的 CPU 使用率达到 100%&#xff0c;Lets do it.如…

吴恩达DeepLearningCourse1-神经网络和深度学习

计划在9月4日&#xff08;截止日期&#xff09;之前完成DeepLearning的所有课程学习。每个课程对应一篇博客&#xff0c;根据学习进度随时更新。 参考课程文章目录&#xff08;一&#xff09;深度学习概论结构化数据和非结构化数据提高效果的方法&#xff08;二&#xff09;神经…

吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化

文章目录第一周&#xff1a;深度学习的实用层面训练、开发、测试集偏差、方差机器学习基本步骤L2正则化Dropout&#xff08;随机失活&#xff09;正则化其它正则化方法正则化输入神经网络的权重初始化梯度检验第二周&#xff1a;优化算法Mini-Batch梯度下降法指数加权平均指数加…

面向监狱编程:一伙人植入木马程序至 559 万部手机,盈利 33 万!

2018 年下半年以来&#xff0c;孙某&#xff08;上海宏路数据技术股份有限公司副总经理&#xff09;与苏某&#xff08;北京亿量科技有限公司法定代表人&#xff09;商议合作开展锁屏拉起广告业务&#xff08;通过在用户手机上植入带有木马程序的 SDK&#xff0c;可控制手机在锁…

吴恩达DeepLearningCourse3-结构化机器学习项目

文章目录第一周&#xff1a;机器学习策略1正交化单一数字评估指标满足和优化指标训练/开发/测试集机器学习和人的表现第二周&#xff1a;机器学习策略2进行误差分析修正标注错误的数据使用来自不同分布的数据进行训练和测试数据分布不匹配时的偏差与方差的分析处理数据分布不匹…

程序员过关斩将--搞定秒杀,只需要这几步!!

“灵魂拷问秒杀这种大并发的写场景&#xff0c;直接分库分表开干&#xff1f;应对秒杀活动的流量高峰很难吗&#xff1f;不要拿淘宝级别的秒杀忽悠我秒杀活动特点我敢说凡是做过电商的同学&#xff0c;都会遇到运营展开的秒杀&#xff0c;限时购等“高并发”的活动。市面上也有…

吴恩达DeepLearningCourse4-卷积神经网络

部分内容参考之前的笔记 PyTorch深度学习实践 文章目录第一周&#xff1a;卷积神经网络边缘检测Padding、Stride三维卷积卷积神经网络中的一层池化层第二周&#xff1a;深度卷积网络实例探究残差网络1x1卷积Inception模块和网络卷积神经网络的迁移学习第三周&#xff1a;目标检…

那些鼓吹国内首个.NET 5框架的,该醒醒了!

前两天看过园子里有篇【国内首个 .NET 5 框架 XX 斩获 XXX stars&#xff0c;XXX 发布】&#xff0c;一顿羡慕嫉妒恨啊。我这.net core 3.1才上手没几天,还没用热乎呢&#xff0c;你这.NET 5的框架都出来了。我好难啊&#xff01;不过难归难咱也得跟上啊。于是一个天高云淡的的…

吴恩达DeepLearningCourse5-序列模型

终于在八月末学完了这门课程&#xff0c;这个月虽然为此不停地忙碌&#xff0c;但每天都在进步也是一种乐趣。 吴恩达教授的课程循序渐进&#xff0c;适合初学者&#xff0c;非常感谢他的辛苦付出。 文章目录第一周&#xff1a;循环序列模型循环神经网络&#xff08;RNN&#…

IdentityServer4系列 | 客户端凭证模式

一、前言从上一篇关于 快速搭建简易项目中&#xff0c;通过手动或者官方模板的方式简易的实现了我们的IdentityServer授权服务器搭建&#xff0c;并做了相应的配置和UI配置&#xff0c;实现了获取Token方式。而其中我们也注意到了三点就是&#xff0c;有哪些用户(users)可以通过…

数据结构 - 链表

准备重启尘封一年的博客作为学习笔记&#xff0c;看看自己能坚持多久。 最近会记录做过的算法题&#xff0c;语言描述只用于会意&#xff0c;仅供参考。 文章目录0.从尾到头获取链表的值&#xff08;不是反转链表&#xff09;1.寻找/删除单链表倒数第k个节点3.寻找单链表的中点…

[读书笔记] 《修炼之道:.NET 开发要点精讲》

《修炼之道:.NET 开发要点精讲》目录《修炼之道:.NET 开发要点精讲》第 1 章 另辟蹊径&#xff1a;解读.NET1.7 本章思考 > 位置 465第 2 章 高屋建瓴&#xff1a;梳理编程约定2.2 方法与线程的关系 > 位置 5192.7 线程安全 > 位置 5952.8 调用与回调 > 位置 6612.…

ASP.NET Core 使用 gRPC 初探

&#xff08;RPC通讯示意图&#xff09;为什么突然说到gRPC呢&#xff0c;其实以前就想说一说这个东西&#xff0c;也想尝试使用一下&#xff0c;一直没有机会&#xff0c;一直看我公众号的小伙伴肯定都知道&#xff0c;这几天一直在录制一个《eShopOnContainer微服务架构》系列…

源码都没调试过,怎么能说熟悉 redis 呢?

一&#xff1a;背景 1. 讲故事记得在很久之前给初学的朋友们录制 redis 视频课程&#xff0c;当时结合了不少源码进行解读&#xff0c;自以为讲的还算可以&#xff0c;但还是有一个非常核心的点没被分享到&#xff0c;那就是源码级调试&#xff0c; 对&#xff0c;读源码还远远…

算法 - DFS/BFS

写DFS函数的时候首先确定当前位置是否已经加入路径 DFS函数大概率会传递“位置信息”&#xff0c;根据位置信息获取下一步的选择&#xff0c;&#xff08;大部分是在循环中&#xff09;选择、执行、回退 在哪做选择&#xff0c;就在哪退出选择&#xff0c;参考题9 def DFS()…

你想象中的Task后续,很简单?

【导读】前不久&#xff0c;写过一篇关于Task的简短文章&#xff0c;通过评论和转载得到好评&#xff0c;刚好我昨晚又写了一篇实现简单的消息队列也提到了Task&#xff0c;难道不应该是看具体执行什么操作&#xff0c;再考虑最佳方案&#xff1f;本文我们再次通过简短内容谈谈…

5G在工业互联网应用的机遇与挑战

移动通讯经过十年一代的发展&#xff0c;已经从1G发展到了5G&#xff0c;峰值速率实现十年千倍的增长&#xff0c;1G到4G是面向个人的&#xff0c;而5G是面向产业互联网和智慧城市服务。5G是一个颠覆性的技术&#xff0c;低时延&#xff08;每秒钟下载一部高清电影&#xff09;…

[C#.NET 拾遗补漏]10:理解 volatile 关键字

要理解 C# 中的 volatile 关键字&#xff0c;就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码&#xff1a;public class Example {public int x;public void DoWork(){x 5;var y x 10;Debug.WriteLine("x " x ", y " y);} }在 Releas…

跟我一起学.NetCore之MediatR好像有点火

前言随着微服务的流行&#xff0c;而DDD(领域驱动设计)也光速般兴起&#xff0c;CRQS(Command Query Responsibility Seperation--命令查询职责分离)、领域事件名词是不是经常在耳边环绕&#xff0c;而MediatR组件经常用来对其技术的落地&#xff0c;凭这&#xff0c;小伙伴们说…