用于训练深度学习模型的迁移学习
迁移学习是一种深度学习方法,在这种方法中,已经为一项任务训练过的模型被用作执行类似任务的模型的起点。用迁移学习更新和再训练网络通常比从零开始训练网络要快得多,也容易得多。该方法通常用于目标检测、图像识别和语音识别等应用程序。
迁移学习是一种流行的技术,因为:
- 它使您能够通过重用已经在大型数据集上训练过的流行模型来训练带有较少标记数据的模型。
- 它可以减少训练时间和计算资源。在迁移学习中,权重不是从零开始学习的,因为预先训练的模型已经根据之前的学习学习了权重。
- 您可以利用深度学习研究社区开发的模型体系结构,包括流行的体系结构,如GoogLeNet和ResNet。世界杯预选赛小组名单
迁移学习的预训练模型
迁移学习的核心是预训练深度学习模型它是由深度学习研究人员构建的,使用了数千或数百万个样本训练图像进行训练。
有许多经过预先训练的模型可用,每个模型都有其优缺点:
- 大小:模型所需的内存占用是多少?模型大小的重要性取决于您打算在哪里以及如何部署它。它会在嵌入式硬件上运行还是在桌面运行?当部署到低内存系统时,网络的大小特别重要。
- 准确性:模型在再训练前的表现如何?通常,一个对ImageNet(一个包含100万张图片和1000类图片的常用数据集)表现良好的模型也可能在新的类似任务中表现良好。然而,ImageNet上的低准确度评分并不一定意味着模型在所有任务中都表现不佳。
- 预测速度:模型预测新输入的速度有多快?虽然预测速度会根据其他深度学习(如硬件和批处理大小)而变化,但速度也会根据所选模型的架构和模型的大小而变化。
您可以使用MATLAB和深度学习工具箱来访问来自最新研究的预训练网络只需一行代码。工具箱还提供了为迁移学习项目选择正确网络的指导。
哪种模式最适合您的转移学习应用?
与许多迁移学习模型可供选择,记住所涉及的权衡和特定项目的总体目标是很重要的。例如,精确度相对较低的网络可能非常适合于一项新的深度学习任务。一个好的方法是尝试各种模型,以找到最适合您的应用程序的模型。
简单的入门模型。使用简单的模型,如AlexNet、GoogLeNet、VGG-16和VGG-19,您可以快速迭代并试验不同的数据预处理步骤和训练选项。一旦你知道了什么设置效果很好,你可以尝试一个更精确的网络,看看这是否会改善你的结果。
轻量级且计算效率高的模型.当部署环境限制模型大小时,SqueezeNet、mobilenet和ShuffleNet是很好的选择。
你可以用深度网络设计器为了快速评估项目的各种预训练模型,并更好地理解不同模型架构之间的权衡。
迁移学习工作流
虽然迁移学习的架构和应用有很多种,大多数迁移学习工作流程遵循一系列常见的步骤.
- 选择一个预训练的模型。在开始时,选择一个相对简单的模型会有帮助。这个例子使用了GoogLeNet,这是一个流行的22层网络,经过训练可以对1000个对象类别进行分类。
- 更换最后的图层。要重新训练网络来对一组新的图像和类进行分类,您需要替换GoogLeNet模型的最后一层。最后的完全连接层被修改为包含与新类数量相同的节点数量,以及一个新的分类层,该分类层将根据softmax层计算的概率产生输出。
- 修改层后,最终的完全连接层将指定新网络将学习的类的数量,分类层将确定从新输出类别可用。例如,GoogLeNet最初接受1000个类别的训练,但通过替换最后的层,你可以重新训练它,只对你感兴趣的对象的5个(或任何其他数量的)类别进行分类。
- 可选地冻结权重。您可以通过将网络中早期层的学习率设置为零来冻结这些层的权重。在训练过程中,冻结层的参数没有更新,可以显著提高网络训练的速度。如果新数据集很小,那么冻结权值也可以防止网络对新数据集的过拟合。
- 重新训练模型。再培训将更新网络,以学习和识别与新图像和类别相关的特征。在大多数情况下,再训练需要的数据比从头开始训练模型要少。
- 预测和评估网络准确性。在模型被重新训练之后,您可以对新图像进行分类,并评估网络的执行情况。
从头开始训练还是转移学习?
深度学习的两种常用方法是从零开始训练模型和迁移学习。
从零开始开发和训练一个模型对于那些无法使用现有模型的高度特定的任务更有效。这种方法的缺点是它通常需要大量的数据才能产生准确的结果。例如,如果您正在执行文本分析,并且无法访问用于文本分析的预训练模型,但可以访问大量数据样本,那么从头开发一个模型可能是最好的方法。
迁移学习对于以下任务很有用对象识别,为此各种流行pretrained模型存在。例如,如果您需要对花的图像进行分类,而您的花图像数量有限,您可以从AlexNet网络转移权重和层,替换最终的分类层,并使用您拥有的图像重新训练您的模型。
在这种情况下,使用迁移学习可以在更短的时间内实现更高的模型精度。
交互式迁移学习方法
使用深度网络设计器,您可以交互式地完成整个迁移学习工作流-包括导入预训练的模型,修改最终层,并使用新数据重新训练网络-很少或没有编码。