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