C#中的深度学习(五):在ML.NET中使用预训练模型进行硬币识别

在本系列的最后,咱们将介绍另外一种方法,即利用一个预先训练好的CNN来解决咱们一直在研究的硬币识别问题。网络

在这里,咱们看一下转移学习,调整预约义的CNN,并使用Model Builder训练咱们的硬币识别模型。架构

咱们将使用ML.NET代替Keras.NET。为何不使用Keras.NET呢?尽管Keras.NET很是简单,易于学习,虽然它包含前面提到的预约义模型,但它的简单性使咱们没法自定义CNN架构来适应咱们的问题。框架

ML.NET是一个微软的免费机器学习框架,旨在使用C#和F#进行开发。最重要的是,咱们能够将ML.NET与Azure结合使用,这意味着咱们可使用基于云的基础设施来训练咱们的模型。让多个虚拟机以分布式方式运行咱们的代码可使训练更快、更准确。机器学习

为何预训练的CNN如此有价值?由于有人花了不少时间和资源培训他们,咱们能够利用这一点。咱们能够重用嵌入在为网络计算的权值,咱们能够将它们从新应用到相似的问题中。也就是说,它们不只能够应用于CNN最初训练解决的问题。这种方法就被称为迁移学习。它能够为咱们节省大量的培训时间,并大大提升所得到的结果。分布式

在迁移学习中,咱们不像之前那样从零开始。相反,咱们从一个已知的模型开始,该模型具备预约义的体系结构和在第一次请求模型时下载的计算权重。流行的模型包括Inception、ResNet和VGG16等。工具

要针对咱们的问题调整预约义的CNN,咱们必须作三件事。首先,咱们必须将输入层的形状更改成数据集中图像的维度。其次,咱们至少须要更改输出层,以便模型拥有与数据集相同数量的类。第三,咱们必须调整模型,让它知道咱们对训练预约义模型的层不感兴趣。学习

完成这些步骤后,咱们能够训练或使咱们的模型适合于给定的数据集。ui

让咱们开始吧。在Visual Studio中,转到Extensions > Manage Extensions,浏览ML.NET Model Builder3d

咱们还须要安装Nuget包ML.NET。code

为了训练咱们的模型来解决硬币识别问题,咱们将使用 Model Builder 扩展。

使用这个工具,咱们能够轻松地设置数据集并训练模型,它经过 Model Builder中添加的Auto ML特性自动选择模型。自动机器学习(automatic Machine Learning, Auto ML)是一种自动化机器学习模型开发中的耗时任务。因此Model Builder将为咱们简化准备数据集的过程,以及选择预先训练好的模型和全部涉及的参数。关于所选的预训练模型,有一点是只有最后一层会被从新训练;其余全部人都保持权重。

对于数据集的状况,惟一的要求是将其组织在文件夹中,这样文件夹名就是其中全部图像的类或标签。

当咱们到目前为止使用的硬币数据集被输入到模型构建器中时,AutoML引擎选择ResNet做为预先训练好的架构来用于咱们的问题。

一旦训练结束,咱们就能够预测新的输入数据,甚至能够获得与为预测而生成的模型相对应的代码。只需这么少的工做,咱们就能够在几乎没有任何相关知识的状况下使用ML,经过UI简单地完成全部工做,选择、单击并在最后得到代码。

关于使用C#进行硬币识别的系列文章到此结束。但愿你喜欢!若是有任何问题,不要忘记留言或发信息。感谢你的阅读。

欢迎关注个人公众号,若是你有喜欢的外文技术文章,能够经过公众号留言推荐给我。

 

原文连接:https://www.codeproject.com/Articles/5284231/Deep-Learning-in-Csharp-Coin-Recognition-with-a-Pr

相关文章
相关标签/搜索