深度学习

理解和使用深度学习网络

MATLAB的最佳模型:深度学习基础

本文来自MATLAB产品营销部门的Heather Gorr。你可以在社交媒体上关注她: @heather.codes @heather.codes @HeatherGorr , @heather-gorr-phd .这篇博客关注的是YouTube上精彩的现场模特比赛, MATLAB的最佳模型:深度学习基础 指导你如何选择最好的模型 .对于深度学习模型,有不同的方法来评估什么是“最佳”模型。它可以是a)比较不同的网络(问题1)或b)为特定的网络找到正确的参数(问题2)。 如何才能高效、快速地进行管理?使用MATLAB中的低代码工具,实现了实验管理app

方法

我们创建了两个问题用于图像分类和时间序列回归。基于数据集,我们考虑了两种类型的模型:卷积(CNN)和长短期记忆(LSTM)网络。下图显示了用于不同数据类型的一些常见网络。
图1:常见数据集和网络
为了可重复性,我们使用了文档示例(以及用于直播的合理大小的数据集!),并使用MATLAB中的应用程序来快速探索、训练和比较模型。当我们进入细节时,我们会讨论更多!

问题1:图像分类

对于我们的第一个问题,我们比较了CNN模型来分类花的类型。cnn非常常见,因为它们涉及一系列操作,我们通常可以理解:卷积、数学运算和聚合。
图2:卷积神经网络(CNN)图
你可能还记得之前的帖子,我们在这个领域有一些很好的起点!我们使用转移学习,在那里你可以用你的数据更新一个预先训练好的网络。

选择网络

我们开始探索预先训练的模型使用深度网络设计器应用程序它提供了一个整体网络架构的感觉,以帮助我们在调查细节之前进行选择。
图3:Deep Network Designer中预训练的模型
我们希望我们的竞争具有不同的复杂程度,所以我们决定squeezenetgooglenet,inceptionv3

比较网络

接下来,我们需要训练和验证所有3个网络,并比较结果!的实验管理app对保持这部分的组织性和自动化非常有帮助。
这个文档示例介绍了如何设置和运行实验:
cd (setupExample (' nnet / ExpMgrTransferLearningExample ')); setupExpMgr(“FlowerTransferLearningProject”);
图4:在实验管理器App中设置网络参数
正如你可能知道的,培训网络需要一些时间!这里我们正在训练其中的3个-所以你要在击球前考虑你的硬件和问题运行.您可以通过应用程序轻松地调整设置以使用gpu和并行运行实验。
我提前开始了实验,以确保我们有时间进行比较,并在我的Linux机器上运行多gpu操作!

评委评分

我们的模型表现如何?以下是我们用来评估的一些标准:
  • 精度
  • 速度
  • 整体质量
  • Explainability
大多数这些措施可以很快在应用程序中找到-更多的解释在下面,因为它更微妙!
图5:实验管理器App分类结果
我们发现在本例中,执行了inceptionv3最好的在准确性方面(91.9%),但需要与其他的相比,它是一个更复杂的架构。看看接下来的亚军,googlenet可能是一个更好的折衷方案,因为它更快,并且仍然有同样好的验证准确率(91%)。squeezenet模型训练速度最快,但准确率更差,尽管我不排除这种可能性!当涉及到什么是最重要的时候,每个问题都是不同的!最后,我们检查了看起来非常相似和平衡的混淆矩阵。这是一个非常重要的视觉效果,可以帮助确保你在类之间没有不平衡的准确性。这就引出了最后一个标准。

Explainability

能够解释模型越来越重要,而且模型explainability是深度学习领域的一个活跃研究领域。这一节我们将保持简短,因为关于这些主题还有很多内容。基本上,你知道发生了什么,特别是如果出现了错误(开发人员、团队,甚至用户都需要了解)。有一些很好的技巧,比如网络激活和可视化,以及其他策略。
最后的几个小技巧——一定要做好记录,如果你使用了预训练的模型,要确保训练数据和模型信息是透明和公正的。

调优

深度学习的很大一部分是在你对方法满意后调整网络。在层结构、求解器和数据表示方面有许多参数需要调整。同样,应用程序将有助于这一点,因为您可以在深度网络设计器中轻松地检查和调整参数,然后使用实验管理器执行参数扫描。
我们跟着医生的例子其中显示了使用googlenet和一个简单的“默认”网络尝试三个求解器:
cd (setupExample (' nnet / ExperimentManagerClassificationExample ')); setupExpMgr(“MerchandiseClassificationProject”);
我们不会在这篇文章中讨论可用求解器的细节,但如果你忘记了动量随机梯度下降(sgdm)和均方根传播(RMSProp)之间的区别,这是一个很好的探索方法!还有很多医生包括可调优的所有参数的快速概述。
图6:在实验管理器App中探索结果
我们进行了实验,googlenet在这里表现得更好(尽管显然需要更长的训练时间)。有趣的是,在比较求解器时,在精度上没有明显的差异——更多的数据可能有助于检验这一点。然而,求解器在最小层的默认算法中产生了很大的差异(70 vs 80%)。如果你看到这样的变化,这是一种值得检查的情况!

问题2:时间序列回归

接下来我们关注时间序列回归问题。首先,让我们考虑一下整体架构。
cnn对许多问题都有广泛的用处,但有时模型需要从以前的时间步骤中了解信息。这是递归神经网络(RNN)派上用场,因为它们通过系统保留内存,这使得它们非常适合时间序列、视频、文本和其他顺序问题。在深度学习术语中,cnn是前馈,而RNN是向后馈,通过层的输入和输出携带一些内存。
在这个例子中,我们专门研究了LSTM这是一个带有额外输入和输出门的RNN。这有助于保留数据中的长期趋势,这对时间序列问题很重要。下图比较了这两种网络。
图7 RNN(左)和LSTM网络(右)的比较
对于lstm,您通常不需要像cnn那样多的层-艺术在于选择参数来最好地表示数据和趋势。虽然我遇到过非常深的lstm,但大多数情况下,网络用很少的层就能很好地学习。例如,Deep Network Designer有一个包含6层的模板:input、lstm、dropout、fullyConnected、softmax和一个分类或回归层。这是一个简单的架构,其中数据准备和层参数有很大的影响。
图8:深度网络设计器6层模板
我们使用与上面相同的方法来比较不同的网络参数,使用实验管理器和a医生的例子预测发动机剩余使用寿命(RUL)
cd (setupExample (' nnet / ExperimentManagerSequenceRegressionExample ')); setupExpMgr(“TurbofanSequenceRegressionProject”);

选择参数

我们比较了两个主要的网络参数:阈值而且LSTM深度.阈值表示响应数据的截止值,LSTMDepth是层数。
图9:比较主要网络参数
使用了一个自定义度量MeanMaxAbsoluteError,这很有帮助,因为您可以包括任何您喜欢的方法来判断拟合优度。我们检查了设置功能,运行了实验,并焦急地等待结果!
图10:运行实验和比较结果

评委评分

在回归问题中,预测一个数值,常见的精度测量是已知数据和预测数据之间的RMSE(均方根误差)。理想情况下,RMSE尽可能接近于零。
图11 RMSE结果
最好的模型(RMSE最小)是具有最小阈值(150)和最小深度(1)的网络。在这种情况下,基于网络深度的结果没有任何改善,所以在设置LSTMs时再次考虑简单性,这将有助于如上所述的可解释性。
文档中有很好的例子,可以更详细地展示针对视频、音频和文本等问题的LSTM训练和评估。遗憾的是,我们不能在一个小时内做更多的比较,但也许下次我们可以讨论更复杂的问题,因为我们已经涵盖了基础知识!查看更多示例在这里

总结

我们能够训练、比较和评估这些漂亮的模型(不到一个小时!)希望这能让你了解如何为你的数据选择网络,以及如何设置实验来调整和比较网络。在这个过程中,使用应用程序并仔细考虑标准是非常有用的。如果你想了解更多关于建立自己的实验的知识,请访问这些网站2个视频教程从乔希克林
我们将再次回来我们的建模比赛系列-订阅@matlab YouTube频道请继续关注,并在社交媒体和评论中保持联系。让我们知道你接下来想看什么!
|
  • 打印
  • 发送电子邮件

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。