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,我们必须做三件事。首先,我们必须将输入层的形状更改为数据集中图像的维度。其次,我们至少需要更改输出层,以便模型拥有与数据集相同数量的类。第三,我们必须调整模型,让它知道我们对训练预定义模型的层不感兴趣。
完成这些步骤后,我们可以训练或使我们的模型适合于给定的数据集。
让我们开始吧。在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中使用预训练模型进行硬币识别的更多相关文章
- CNCC2017中的深度学习与跨媒体智能
CNCC2017中的深度学习与跨媒体智能 转载请注明作者:梦里茶 目录 机器学习与跨媒体智能 传统方法与深度学习 图像分割 小数据集下的深度学习 语音前沿技术 生成模型 基于贝叶斯的视觉信息编解码 珠 ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】
[吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [ ]AI为我们的家庭和办公室的个人设备供电 ...
- Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 之一
Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 ABSTRACT: Deep learning algorithms ar ...
- 深度学习---1cycle策略:实践中的学习率设定应该是先增再降
深度学习---1cycle策略:实践中的学习率设定应该是先增再降 本文转载自机器之心Pro,以作为该段时间的学习记录 深度模型中的学习率及其相关参数是最重要也是最难控制的超参数,本文将介绍 Lesli ...
- 在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN
Generative Adversarial Network 是深度学习中非常有趣的一种方法.GAN最早源自Ian Goodfellow的这篇论文.LeCun对GAN给出了极高的评价: “There ...
- C#中的深度学习(一):使用OpenCV识别硬币
在本系列文章中,我们将使用深度神经网络(DNN)来执行硬币识别.具体来说,我们将训练一个DNN识别图像中的硬币. 在本文中,我们将描述一个OpenCV应用程序,它将检测图像中的硬币.硬币检测是硬币完整 ...
- C#中的深度学习(三):理解神经网络结构
在这篇文章中,我们将回顾监督机器学习的基础知识,以及训练和验证阶段包括哪些内容. 在这里,我们将为不了解AI的读者介绍机器学习(ML)的基础知识,并且我们将描述在监督机器学习模型中的训练和验证步骤. ...
- ui2code中的深度学习+传统算法应用
背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意义的结构信息,我们 ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
随机推荐
- miniconda安装及使用
conda环境配置 安装conda [清华源下载地址](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/) 官网或百度云网盘下载对应版本 ...
- sentinel降级误解
public void initDegradeRule(){ List<DegradeRule> rules=new ArrayList<>(); DegradeRule ru ...
- 公平lock和非公平lock的区别
可以看到区别在于,在lock时和tryAquire时,非公平锁不会去管队列中有没有线程在排队,直接尝试去获取锁,失败之后就和公平锁一样,乖乖去排队. 也就是说发生竞争的场景在于,尚未入队的线程之间和刚 ...
- 真香,理解记忆法学习Python基础语法
这篇文章很难写!我最开始学 Python,和大多数人一样,是看的菜鸟教程: 在写完这篇文章的第一遍后,我发现并没有写出新意,很可能读者看到后,会和我当初一样,很快就忘了.我现在已经不是读者而是作者了, ...
- 死磕以太坊源码分析之Fetcher同步
死磕以太坊源码分析之Fetcher同步 Fetcher 功能概述 区块数据同步分为被动同步和主动同步: 被动同步是指本地节点收到其他节点的一些广播的消息,然后请求区块信息. 主动同步是指节点主动向其他 ...
- C++里面this关键字的用法和功能
1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...
- js实现视频截图,视频批量截图,canvas实现
截取视频的某一时间的图像并保存 利用canvas的绘画能力画出视频某一帧的视频画面, 获得到图像之后转换成base64图像, 再利用a标签的实现自动保存到本地 html代码 <!DOCTYPE ...
- Codeforces Round #688(Div 2) D. Checkpoints
思路 第一步,先推导1,0,0,--,0,就是1后面跟了n-1个0的时候 所需要的期望步数 封闭式推导 \(f_n\)代表从n关开始直接通关需要的步数的期望 n为1的情况,即就只有一个1 \(f_1= ...
- 第8章 Python类中常用的特殊变量和方法目录
第8章 Python类中常用的特殊变量和方法 第8.1节 Python类的构造方法__init__深入剖析:语法释义 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解 第8. ...
- windows server2012无法安装.Net FrameWork 3.5功能
问题描述: 现象1:安装完服务器系统,在安装SQL Server 2012,安装到中间提示安装SQL Server 2012过程中出现"启用windows功能NetFx3时出错"以 ...