使用卷积神经网络进行迁移学习2025年3月17日 | 阅读 8 分钟 人工智能神经网络(ANNs)是数据科学中最先进的机器学习模型。它们的性能令人难以置信地惊人,即使只有一个隐藏层,它们也可以以任何所需的精度逼近任何函数。 鉴于它们惊人的性能和广泛的适用性,为什么还要选择其他模型呢? 在超越竞争模型之前,ANNs 需要大量数据和计算能力。对于人们通常使用的数据集和技术来说,使用 ANNs 就像用宇宙飞船来日常通勤一样。 那么,有人可能会问,有没有一种方法可以在没有缺点的情况下受益于 ANNs 呢? 自适应学习迁移学习是指使用一个为某个目的创建的模型并将其应用于另一个目的的过程。使用无监督机器学习的结果,例如 K-means 聚类,作为监督机器学习模型的输入,是一个常见的例子。迁移学习也可用于改编先前训练过的 ANN 以执行新任务,这就是本文的重点。 在讨论 ANNs 的迁移学习之前,我们需要对其基本结构进行概述。 全连接前馈神经网络![]() 在其最基本的形式中,ANN 只是堆叠的逻辑回归层,其中每个观测值的特征值由输入层中的一个节点表示,该节点随后乘以权重并经过激活函数 5 处理,以告知后续层(称为隐藏层)中的每个节点。此过程一直重复到输出层,即预测。这是前向传播阶段。然后,在比较预测值和实际值以优化某个可微目标函数时,逐层向后修改权重。 在 ANNs 的学习阶段,所有数据和处理能力都是必需的,因为(数百万个)6 权重中的每一个都必须使用梯度下降在损失函数上进行调整。这相当于一千万个微积分问题,即使对计算机来说也很困难。相比之下,前向传播只是将值乘以权重,应用一个简单的激活函数,然后将它们相加。这相当于几千万个数学问题,对机器来说很容易解决。 卷积神经网络卷积神经网络是一种专门的 ANNs,用于计算机视觉应用,如对象检测、对象定位和图像分类。它们的设计与上面讨论的简单 ANNs 相同,只是它们以卷积基开始,用于识别图像中的独特模式。 ![]() 接连的卷积层会发展出更高级别的模式(例如,从边缘到角到形状)。全连接层位于卷积基之后,它们学习这些模式与标签之间的关系,这些关系构成了它们预测的基础。 只需几个简单的步骤,我们就可以改编一个经过充分训练以实现广泛目标(例如,在一千种不同标签中进行分类)的复杂 CNN。 首先,移除为模型原始功能设置的全连接层,然后用适合我们特定目标的全连接层替换它们(需要注意的是,输出层的形状、激活函数和损失函数可能需要修改)。然后,我们冻结卷积块中的层,以便在模型针对我们的任务进行训练时,预先学习的模式只是被重新解释以适应新环境,而不是被覆盖。 瞧!由于只需要训练全连接层,我们可以用训练原始模型所需数据和处理能力的很小一部分来完成。现在我们拥有一个包含数千万到数亿个已学习参数的模型,可以针对我们的任务进行拟合。即使整个模型从头开始为 特定任务创建的模型性能可能会更好,但迁移学习对于没有超级计算机或数百万张标记图像的人来说是一种方便的小方法。
将从一项活动中获得的知识用于另一项活动称为迁移学习。许多视觉特征,特别是对于卷积神经网络(CNN),在多个数据集之间共享(例如,直线和边缘几乎出现在所有图像中)。因此,特别是对于大型模型, 由于缺乏大型数据集和强大的计算资源,CNN 很少从头开始训练。 拥有 120 万张图像的 ImageNet 数据集是一个典型的预训练图像集。使用的具体模型取决于目标(通常,用户选择在 ImageNet 挑战中表现最好的模型);但是,本文使用 ResNet50 模型。预训练模型通常可以通过所使用的库(在此示例中为 Keras)访问。 介绍 ResNet梯度消失问题是 ResNet 最初设计的灵感来源。这个问题限制了神经网络的大小,因为反向传播的梯度在反复相乘时会变得非常小。通过使用跳跃连接——添加让数据跳过层的快捷方式——ResNet 架构试图解决这个问题。 模型由一组带有跳跃连接的卷积层、平均池化和输出全连接(密集)层组成。 导入模型时,我们应该排除卷积层,因为它们是唯一包含我们对迁移学习感兴趣的特征的层。由于我们将它们移除,因此必须用我们的层替换输出层。 问题陈述为了演示迁移学习过程,我将使用 Caltech-101 图像数据集,该数据集包含 101 个类别,每个类别约有 40-800 张图像。 数据处理首先下载数据集,然后解压。解压后,请务必删除“BACKGROUND Google”文件夹。 代码:为了准确评估,我们必须将数据划分为训练集和测试集。为了确保在测试集中具有适当的代表性,我们必须在每个类别内部进行划分。 输出 ![]() 训练图像在第一个文件夹中,测试图像在第二个文件夹中。每个子文件夹中的图像都按类别组织。我们将使用 Keras 的 ImageDataGenerator 类来输入数据。ImageDataGenerator 提供了图像数据增强和简单图像数据处理的解决方案。 上面的代码使用图像目录的文件路径构建了一个用于创建数据的数据对象。 模型构建标准:包含基本的预训练模型。 由于大多数类别少于 50 张 ImageNet 图像,此数据集在拆分后只有大约 5628 张图像,因此微调卷积层可能会导致过拟合。由于我们的新数据集和 ImageNet 数据集相似,我们确信许多预训练权重也使用了好的特征。为了在训练分类器的其余部分时不对它们进行更改,我们可以冻结那些训练过的卷积层。如果数据集较小且与原始数据集差异很大,微调仍可能导致过拟合,但后面的层可能没有正确的特征。为了在训练分类器的其余部分时不对它们进行更改,我们可以冻结那些训练过的卷积层。如果数据集较小且与原始数据集差异很大,微调仍可能导致过拟合,但后面的层可能没有正确的特征。因此,您可以再次冻结卷积层,但这次,只使用早期层的结果,因为它们具有更通用的特征。如果您拥有大型数据集,您通常可以对整个网络进行微调,而无需担心过拟合。 现在我们可以包含其余的分类器。因此,一个在新闻数据集上训练的不同分类器被馈送了先前训练过的卷积层的输出。 模型训练代码 输出 ![]() 使用代码来评估测试集。 输出 ![]() 在仅进行了五个 epoch 后,我们获得了 101 类数据集 92.8% 的准确率。作为参考,原始 ResNet 在大约 100 万张图像的数据集上进行了 120 个 epoch 的训练。 有几个方面可以改进。最近一个 epoch 中验证损失和训练损失之间的差异表明模型开始过拟合。图像增强是一种解决此问题的方法。ImageDataGenerator 类使得实现简单的图像增强变得容易。 |
许多网站会提供关于任何技术的最新新闻,而文章可以通过其收到的评论数量来评估。如果新闻是关于加密货币的,并且文章取自 cointelegraph.com,我们可以轻松地计算并存储每条新闻...
阅读 6 分钟
Python 编程中最重要的和广泛使用的数据结构之一是字典。在使用 Python 编程时,通常会想要合并两个或多个字典。在本文中,我们将研究合并的各种方法、示例和结果...
阅读 4 分钟
Python 是一种流行的编程语言,用于数据分析、Web 开发和机器学习等各种任务。其受欢迎的原因之一是可用于扩展其功能的库数量众多。这些库,也称为模块,是预先编写的代码,...
阅读 4 分钟
在深入探讨这个主题之前,我们需要了解 Python 中的错误和异常,以及这两个词之间的区别。首先,有两种类型的错误——语法错误和逻辑错误。当程序员没有遵循……时会发生语法错误。
阅读 6 分钟
将您的产品与第三方程序集成是增加产品功能的一种极好的方法。我们不控制托管外部库的服务器、构成其逻辑的代码,或它与您之间交换的信息...
阅读 19 分钟
本教程将展示查找给定字符串中第一个唯一字符的各种方法。例如,如果给定字符串是“stringstutorial”,则结果应为“n”,如果给定字符串是“StringsTutorial”,则结果应为“S”。解释 输入:“stringstutorial” 解释:步骤 1:创建字符的频率列表……
7 分钟阅读
Google Scan 是一个全自动搜索引擎,它使用称为网络爬虫的软件持续搜索互联网,以将网站添加到我们的索引中。实际上,我们结果中出现的大部分页面都不是手动添加的;相反,它们是被发现并添加的...
18 分钟阅读
Python 中的 JSON Schema JSON Schema 是一种用于验证 JSON 文档的 Python 语言。它包含键/值对,其中每个键用于指定特定 JSON 数据的结构。使用 JSON Schema 可以提供易于理解、高质量的数据和文档。JSON Schema 是...
5 分钟阅读
什么是单向链表?线性数据结构,其中数据元素可以存储为有序集合,位于非连续的内存位置,称为单向链表。它包含两部分:数据部分和地址部分。数据部分...
5 分钟阅读
以下教程基于数据分析;我们将详细讨论方差分析(ANOVA),以及在Python编程语言中执行该过程。ANOVA通常用于心理学研究。在以下教程中,我们将理解如何……
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India