65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2020年11月9日

CPOL

3分钟阅读

viewsIcon

10327

作为本系列的结尾,我们将介绍另一种方法:调整预训练的 CNN 以解决我们一直在研究的硬币识别问题。

这次我们将使用 ML.NET 而不是 Keras.NET。为什么不使用 Keras.NET 呢?尽管 Keras.NET 非常简单易学,并且确实包含前面提到的预定义模型,但它的简单性阻止我们自定义 CNN 架构以适应我们的问题。

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

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

在迁移学习中,我们不像以前那样从头开始。相反,我们从一个已知的模型开始,该模型具有预定义的架构和计算好的权重,这些权重在第一次请求模型时下载。流行的模型包括 Inception、ResNet 和 VGG16 等。

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

让我们开始吧。在 Visual Studio 中,转到扩展 > 管理扩展并浏览 ML.NET 模型生成器

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

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

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

对于数据集的情况,唯一的要求是它以文件夹的形式组织,这样文件夹名称就是其中所有图像的类或标签。当我们将到目前为止使用的硬币数据集输入到模型生成器中时,AutoML 引擎选择了 ResNet 作为用于我们问题的预训练架构。

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

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

这结束了我们关于使用 C# 进行硬币识别的系列。希望你喜欢它!如果您有任何疑问,请不要忘记留言和发送消息。感谢您的阅读。下次见!

© . All rights reserved.