深度学习净化模型
最近,我一直在写关于深度学习的简短问答专栏。今天我很高兴与大家分享最新的文章:关于预先训练过的模型.在这篇文章中,我将浏览专栏中回答的3个问题中的第一个,并在最后提供更多文章的链接。
背景:选择预先训练的模型
你可以看到最新的预训练模型MATLAB Github页面在那里你会看到有很多型号可供选择。我们在之前的博文中已经讨论过预训练模型:
这些帖子非常擅长描述单独的模型,但他们为什么被选中?更重要的是:如何选择一个起点来训练一个深度学习模型?
我不认为所有的预先训练的模型都是一长串的选项,我喜欢把它们想象成类别代替。
基本模型这些模型具有简单的体系结构,可以让您自信地启动和运行。它们往往有更少的层,并允许快速迭代预处理和训练选项。一旦掌握了如何训练模型,就可以进入下一节,看看是否可以改进结果。 从这里开始:GoogLeNet, VGG-16, VGG-19和AlexNet |
精度高的模型这些模型包括基于图像的工作流程,如图像分类、对象检测和语义分割。大多数网络,包括上面的基本模型,都属于这一类。与基本模型不同的是,高精度模型可能需要更多的训练时间,网络结构也更加复杂。 从这里开始:ResNet-50, Inception-v3, Densenet-201,例外 |
边缘部署模型当转向硬件时,模型大小变得越来越重要。这些型号的设计意图是为树莓派(Raspberry Pi)等嵌入式设备提供低内存占用。 从这里开始:SqueezeNet, MobileNet-v2, ShuffLeNet, NASNetMobile |
我将从第一类开始,并在必要时继续使用更复杂的模型。就我个人而言,我认为使用AlexNet作为起点并没有什么错。这是一个很容易理解的架构五月根据问题适当地执行。
你怎么知道你选择了正确的模式?
对于你的任务可能没有一个正确的选择。当模型精确地执行给定任务时,您就会知道您有了一个可接受的模型。你认为可接受的准确度水平在不同的应用中有很大的不同。想想谷歌在购物时的错误建议和错过的暴风雪警告之间的区别。
为您的应用程序尝试各种预先训练过的网络是确保获得最准确和最健壮模型的关键。当然,网络架构只是众多成功的手段之一。
Q1:在训练网络时,我应该操作数据大小还是模型输入大小?
这个问题是从问题中引出来的如何在预先训练的模型中使用灰度图像?和我如何改变我的预先训练模型的输入大小?
首先简单介绍一下数据输入模型的背景知识。
所有预先训练的模型都有一个输入数据结构的期望,以便重新训练网络或预测新的数据。如果您的数据不符合模型的期望,您会发现自己在问这些问题。
有趣的是:你是操纵数据,还是操纵模型?
最简单的方法是改变的数据。这可能非常简单:可以通过调整数据的大小来操纵数据的输入大小。在MATLAB中,这是一个简单的imresize命令。灰度问题也变得非常简单。
彩色图像通常以RGB格式表示,其中三层代表每个平面的红、绿、蓝颜色。灰度图像只包含一层而不是三层。可以复制灰度图像的单层来创建网络所期望的输入结构,如下图所示。
看一幅色彩非常丰富的图像,注意RGB平面看起来像三个灰度图像结合起来形成一个彩色图像。
不那么简单的方法是更改模型.为什么有人要费这么大劲去操纵模型而不是数据呢?
您可用的输入数据将为您确定这一点。
让我们使用一个夸张的场景,你的图像是1000x1000px,你的模型接受10x10px大小的图像。如果你调整你的图像大小为10x10px,你会留下一个输入图像的噪声。在这种情况下,您希望更改模型的输入层,而不是您的输入。
图像大小:1000 x1000px |
图片尺寸:10 x10px |
在我尝试用MATLAB之前,我认为操纵模型输入是一项复杂的任务,但它并没有那么糟糕。我保证。你要做的就是:
- 开放深度网络设计师app
- 选择一个预先训练过的模型
- 删除当前的输入层,并替换为一个新的。这使您能够更改输入大小
- 导出模型,您就可以将其用于迁移学习应用程序了。我建议用基本迁移学习示例
它真的非常简单,你可以改变预先训练模型的输入大小,而无需手工编码。
这是问答专栏中回答的三个问题中的第一个。要了解更多关于预训练模型的内容,请查看完整的专栏在这里,及其他问答主题机器学习和深度学习.
让我知道你的想法!
- 类别:
- 深度学习
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。