在本系列的最后,我们将介绍另一种方法,即利用一个预先训练好的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,我们必须做三件事。首先,我们必须将输入层的形状更改为数据集中图像的维度。其次,我们至少需要更改输出层,以便模型拥有与数据集相同数量的类。第三,我们必须调整模型,让它知道我们对训练预定义模型的层不感兴趣。

完成这些步骤后,我们可以训练或使我们的模型适合于给定的数据集。

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

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

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

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

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

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

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

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

欢迎关注我的公众号,如果你有喜欢的外文技术文章,可以通过公众号留言推荐给我。

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

  1. CNCC2017中的深度学习与跨媒体智能

    CNCC2017中的深度学习与跨媒体智能 转载请注明作者:梦里茶 目录 机器学习与跨媒体智能 传统方法与深度学习 图像分割 小数据集下的深度学习 语音前沿技术 生成模型 基于贝叶斯的视觉信息编解码 珠 ...

  2. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  3. Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 之一

    Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 ABSTRACT: Deep learning algorithms ar ...

  4. 深度学习---1cycle策略:实践中的学习率设定应该是先增再降

    深度学习---1cycle策略:实践中的学习率设定应该是先增再降 本文转载自机器之心Pro,以作为该段时间的学习记录 深度模型中的学习率及其相关参数是最重要也是最难控制的超参数,本文将介绍 Lesli ...

  5. 在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN

    Generative Adversarial Network 是深度学习中非常有趣的一种方法.GAN最早源自Ian Goodfellow的这篇论文.LeCun对GAN给出了极高的评价: “There ...

  6. C#中的深度学习(一):使用OpenCV识别硬币

    在本系列文章中,我们将使用深度神经网络(DNN)来执行硬币识别.具体来说,我们将训练一个DNN识别图像中的硬币. 在本文中,我们将描述一个OpenCV应用程序,它将检测图像中的硬币.硬币检测是硬币完整 ...

  7. C#中的深度学习(三):理解神经网络结构

    在这篇文章中,我们将回顾监督机器学习的基础知识,以及训练和验证阶段包括哪些内容. 在这里,我们将为不了解AI的读者介绍机器学习(ML)的基础知识,并且我们将描述在监督机器学习模型中的训练和验证步骤. ...

  8. ui2code中的深度学习+传统算法应用

    背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意义的结构信息,我们 ...

  9. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

随机推荐

  1. 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?

    作者 | 硬核云顶宫 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 上周,蚂蚁集团迎来IPO,其发行价格将达到68.8元,总市值将突破2万亿元.市场对蚂蚁的成长性有着充分的信心,为了 ...

  2. Spring Cloud 学习 (九) Spring Security, OAuth2

    Spring Security Spring Security 是 Spring Resource 社区的一个安全组件.在安全方面,有两个主要的领域,一是"认证",即你是谁:二是& ...

  3. MySQL慢查询日志(SLOW LOG)

    慢查询日志可以帮助DBA或开发人员定位可能存在问题的SQL语句,从而进行优化. 如何开启 默认情况下,MySQL是不开启慢查询日志的.可以通过以下命令查看是否开启: mysql> SHOW VA ...

  4. zookeeper基础笔记

    一.安装 1.安装jdk 2.安装Zookeeper 3.单机模式(stand-alone):安装目录/conf   复制 zoo_sample.cfg 并粘贴到当前目录下,命名zoo.cfg. 二. ...

  5. java并发编程实战《五》死锁

    一不小心就死锁了,怎么办? 在上一篇文章中,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串行的,性能太差. 向现 ...

  6. Java虚拟机之内存区域

    原创文章,转载请标明出处! 目录 一.背景 二.运行时内存区域概述 1.官方描述 2.中文翻译 3.内存区域简述 4.运行时数据区简图 5.运行时数据区详图 三.JVM线程 JVM数据区域与线程关系 ...

  7. PyQt(Python+Qt)学习随笔:部件的inputMethodHints属性

    inputMethodHints属性只对输入部件有效,输入法使用它来检索有关输入法应如何操作的提示,例如,如果设置了只允许输入数字的标志,则输入法可能会更改其可视组件,以反映只能输入数字.相关取值及含 ...

  8. Pentaho Report Designer 报表系统 - 入门详解

    目录 简介 安装与配置 环境要求 运行方式 使用教学 数据源配置与原始数据获取 报表布局设计与格式化 布局设计 模块结构 控件 示例 报表预览与发布 报表访问与获取 参考材料 简介 ​ Pentaho ...

  9. java课后作业2019.11.04

    一.编写一个程序,指定一个文件夹,能够自动计算出其总容量 1.代码 package HomeWork; import java.io.File; public class getFileDaxiao ...

  10. Error.name 六种值对应的信息

    1 EvalErroe:eval()  的使用与定义不一致 2 RangrError: 数值越界 3 ReferenceError:非法或不能识别的引用数值 4 SyntaxError:发生语法解析错 ...