深圳幻海软件技术有限公司 欢迎您!

C#中的深度学习:ML.NET中具有预训练模型的硬币识别

2023-03-22

在这里,我们看一下转移学习,调整预定义的CNN以及使用模型生成器扩展来训练我们的模型以解决硬币识别问题。这次我们将使用ML.NET而不是Keras.NET。为什么不使用Keras.NET?尽管Keras.NET非常简单易学,并且虽然确实包含了前面提到的预定义模型,但其简单性仍使我们无法自定义CNN体

在这里,我们看一下转移学习,调整预定义的CNN以及使用模型生成器扩展来训练我们的模型以解决硬币识别问题。

这次我们将使用ML.NET而不是Keras.NET。为什么不使用Keras.NET?尽管Keras.NET非常简单易学,并且虽然确实包含了前面提到的预定义模型,但其简单性仍使我们无法自定义CNN体系结构以适应我们的问题。

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

为什么预先训练的CNN如此有价值?因为有人花费大量时间和资源来训练他们,所以我们可以利用这一点。我们可以重用嵌入在为网络计算的权重中的知识,并将其重新应用于类似的问题。也就是说,它们不仅可以应用于CNN最初要解决的问题,而且还可以应用于更多问题。此技术称为转移学习。它可以为我们节省大量的训练时间,并且可以大大改善获得的结果。

在转移学习中,我们不像以前那样从头开始。取而代之的是,我们从具有预定义体系结构的已知模型开始,并在首次请求模型时下载计算出的权重。流行的模型包括InceptionResNetVGG16等。

要针对我们的问题调整预定义的CNN,我们必须做三件事。首先,我们必须将输入层的形状更改为数据集中图像的尺寸。其次,我们需要至少更改输出层,以便模型具有与数据集相同数量的类。第三,我们必须调整模型以使其知道我们对训练预定义模型的层次不感兴趣。完成这些步骤后,我们可以将模型训练或拟合到给定的数据集。

让我们开始吧。在Visual Studio中,转到扩展 >“管理扩展然后浏览ML.NET Model Builder

我们还需要安装Nuget软件包ML.NET

为了训练硬币识别问题的模型,我们将使用模型构建器扩展。

使用此工具,我们可以轻松地设置数据集并训练模型,顺便说一下,添加到模型构建器的Auto ML功能将自动选择该数据集。自动化机器学习(Auto ML)是自动化耗时的机器学习模型开发任务。因此,模型构建器将为我们简化准备数据集的过程,以及选择预训练模型和所有相关参数的过程。关于选择的预训练模型的一件事是,仅最后一层将被重新训练;所有其他人保持权重。

对于数据集,唯一的要求是将其组织在文件夹中,使得文件夹名称是其中所有图像的类或标签。当我们到目前为止使用的硬币数据集输入到模型构建器中时,AutoML引擎选择ResNet作为经过预训练的体系结构来解决我们的问题。

训练完成后,我们可以预测新的输入数据,甚至可以获取与用于预测的模型相对应的代码。

只需要很少的工作,我们就可以在几乎没有该领域任何先验知识的情况下进行ML,只需通过UI进行所有操作,最后选择,单击并获取代码即可。

至此,我们完成了使用C#进行硬币识别的系列文章。我希望你喜欢它!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览255853 人正在系统学习中