迁移学习是一种机器学习方法,其中为一项任务开发的模型被重用,作为第二个任务的模型起点。
在深度学习中,这是一种流行的方法,其中预训练模型被用作计算机视觉和自然语言处理任务的起点,因为在这些问题上开发神经网络模型需要大量的计算和时间资源,并且它们在相关问题上提供了巨大的技能提升。
在本文中,您将了解如何使用迁移学习来加速训练并提高深度学习模型的性能。
阅读本文后,你将了解:
- 什么是迁移学习及其使用方法。
- 深度学习中迁移学习的常见示例。
- 何时在您自己的预测建模问题中使用迁移学习。
立即开始您的项目,阅读我的新书《深度学习用于计算机视觉》,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。
有关在计算机视觉中使用迁移学习的示例,请参阅博文

深度学习迁移学习入门指南
照片作者:Mike’s Birds,保留部分权利。
什么是迁移学习?
迁移学习是一种机器学习技术,其中在一项任务上训练的模型被重新用于相关的第二项任务。
迁移学习和领域适应是指在一种环境中学习到的知识……被用来提高另一种环境中的泛化能力。
—— 第 526 页,《深度学习》,2016。
迁移学习是一种优化,可以快速进步或在对第二项任务进行建模时提高性能。
迁移学习是通过从已学会的相关任务转移知识来提高新任务的学习能力。
—— 《第 11 章:迁移学习》,《机器学习应用研究手册》,2009。
迁移学习与多任务学习和概念漂移等问题相关,并且并非仅限于深度学习的研究领域。
尽管如此,由于训练深度学习模型所需的巨大资源,或者深度学习模型所训练的大型且具有挑战性的数据集,迁移学习在深度学习中仍然很受欢迎。
迁移学习在深度学习中仅当从第一项任务中学到的模型特征是通用的时才有效。
在迁移学习中,我们首先在一个基本数据集和任务上训练一个基本网络,然后我们将学习到的特征重新用于或转移到第二个目标网络,以在目标数据集和任务上进行训练。如果这些特征是通用的,即适合基本任务和目标任务,而不是特定于基本任务,那么这个过程就会奏效。
—— 《深度神经网络中的特征有多可迁移?》
在深度学习中使用的这种形式的迁移学习称为归纳迁移。这是通过使用在不同但相关的任务上拟合的模型来有益地缩小可能模型的范围(模型偏差)。

归纳迁移的示意图
摘自“迁移学习”
想要通过深度学习获得更好的结果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
如何使用迁移学习?
您可以在自己的预测建模问题上使用迁移学习。
两种常见的方法如下:
- 开发模型方法
- 预训练模型方法
开发模型方法
- 选择源任务。您必须选择一个相关且数据充足的预测建模问题,其中输入数据、输出数据和/或在从输入到输出数据的映射过程中学到的概念存在某种关系。
- 开发源模型。接下来,您必须为第一个任务开发一个熟练的模型。该模型必须优于朴素模型,以确保已执行一些特征学习。
- 重用模型。然后,可以在目标任务上使用在源任务上拟合的模型作为起点。根据所使用的建模技术,这可能涉及使用模型的所有部分或部分。
- 调整模型。可以选择性地在可用任务的输入-输出对数据上调整或完善模型。
预训练模型方法
- 选择源模型。从可用模型中选择一个预训练的源模型。许多研究机构在大型且具有挑战性的数据集上发布模型,这些模型可能包含在可供选择的候选模型池中。
- 重用模型。然后,可以在目标任务上使用预训练模型作为起点。根据所使用的建模技术,这可能涉及使用模型的所有部分或部分。
- 调整模型。可以选择性地在可用任务的输入-输出对数据上调整或完善模型。
这种第二种迁移学习在深度学习领域很常见。
深度学习迁移学习示例
让我们通过深度学习模型的两个常见迁移学习示例来具体说明。
图像数据的迁移学习
在使用图像数据作为输入的预测建模问题中进行迁移学习是很常见的。
这可能是一个以照片或视频数据作为输入的预测任务。
对于这类问题,通常会使用为大型且具有挑战性的图像分类任务(如ImageNet 1000类照片分类竞赛)预训练的深度学习模型。
开发此竞赛模型并表现出色的研究组织,通常会在宽松的许可下发布其最终模型以供重用。这些模型在现代硬件上可能需要数天或数周才能训练完成。
这些模型可以下载并直接集成到需要图像数据作为输入的新模型中。
此类模型的三个示例包括:
更多示例,请参阅Caffe Model Zoo,其中共享了更多预训练模型。
这种方法之所以有效,是因为图像是在大型照片语料库上训练的,并且要求模型对相当多的类别进行预测,反过来,这也要求模型有效地学习从照片中提取特征,以便在该问题上表现良好。
在他们关于“用于视觉识别的卷积神经网络”的斯坦福课程中,作者们建议仔细选择在您的新模型中使用预训练模型的多少。
[卷积神经网络] 的特征在早期层更通用,在后期层更特定于原始数据集
—— 迁移学习,《CS231n 视觉识别卷积神经网络》
语言数据的迁移学习
在处理以文本作为输入或输出的自然语言处理问题时,进行迁移学习是很常见的。
对于这类问题,会使用词嵌入,即将词映射到高维连续向量空间,其中含义相似的不同词具有相似的向量表示。
存在有效的算法来学习这些分布式词表示,并且研究机构通常会以宽松的许可发布在非常大的文本语料库上训练的预训练模型。
此类模型的两个示例包括:
这些分布式词表示模型可以下载并集成到深度学习语言模型中,用于解释输入中的单词或生成模型输出中的单词。
Yoav Goldberg 在其关于“深度学习用于自然语言处理”的书中谨慎地指出:
……可以下载在大量文本上训练的预训练词向量 […] 训练方案和底层语料库的差异对所得表示有很强的影响,并且可用的预训练表示可能不是[您]特定用例的最佳选择。
—— 第 135 页,《神经 网络 方法 在 自然 语言 处理》,2017。
何时使用迁移学习?
迁移学习是一种优化,是一种节省时间或获得更好性能的捷径。
一般来说,在模型开发和评估之后,才会明显知道在某个领域使用迁移学习会带来好处。
Lisa Torrey 和 Jude Shavlik 在他们的迁移学习章节中描述了在使用迁移学习时可以寻找的三个潜在好处。
- 更高的起点。源模型在改进模型之前的初始技能比其他情况更高。
- 更高的斜率。源模型训练期间技能的提高率比其他情况更陡峭。
- 更高的渐近线。训练模型的收敛技能比其他情况更好。

迁移可能改善学习的三种方式。
摘自“迁移学习”。
理想情况下,您会从成功的迁移学习应用中看到这三个好处。
如果您能够识别一个相关且数据充足的任务,并且您有资源为该任务开发模型并在您自己的问题上重用它,或者有一个可用的预训练模型可以作为您自己模型的起点,那么这是一种值得尝试的方法。
在某些数据量很少的问题上,迁移学习可以帮助您开发在没有迁移学习的情况下根本无法开发的熟练模型。
源数据或源模型的选择是一个开放性问题,可能需要领域专业知识和/或通过经验获得的直觉。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
教程
书籍
- 深度学习, 2016.
- 自然语言处理中的神经网络方法, 2017.
论文
- 迁移学习调查, 2010.
- 第 11 章:迁移学习,《机器学习应用研究手册》,2009。
- 深度神经网络中的特征有多可迁移?
预训练模型
文章
总结
在本文中,您了解了如何使用迁移学习来加速训练并提高深度学习模型的性能。
具体来说,你学到了:
- 什么是迁移学习以及它在深度学习中的应用。
- 何时使用迁移学习。
- 迁移学习在计算机视觉和自然语言处理任务中的应用示例。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
一如既往,文章写得很好,很有见地。您提供的有关此主题的额外资源也非常有帮助!谢谢。
谢谢。
先生,我想知道如何为 IDS 创建预训练网络。您会在这方面帮助我吗?将不胜感激。
抱歉,我对 IDS 的预训练模型不了解。
您重复了文章开头的一句话。
“迁移学习在深度学习中仅当从第一项任务中学到的模型特征是通用的时才有效。”
谢谢,已修复!
您好,Jason 博士。非常感谢您清晰且简洁地分享您在机器学习和深度学习方面的知识和见解。
回顾预训练模型参考,谷歌 Inception 模型似乎不再可用。我还在 https://github.com/tensorflow/models/tree/master/inception 上查看过,但也不可用。
您知道它是否已移至其他位置?谢谢!
Keras 在这里有它。
https://keras.org.cn/applications/
你好 Jason,
我是您作品的忠实粉丝。我想问一下如何为我的具体问题选择预训练模型?例如,什么是一个好的预训练模型,适用于手写阿拉伯字母分类?
也许是训练过的其他字符数据的模型?
是的。因为所有 keras 预训练模型都需要输入尺寸 (244, 244, 3),而我的数据尺寸为 (64, 64, 1)。此外,imagenet 和字符分类是非常不同的问题。大多数 imagenet 特征对于我的问题来说是冗余的。
我相信这些模型可以被调整,并且仍然可以增加价值。
非常感谢您的精彩解释……我可以问一下您对图像超分辨率最合适的预训练模型有什么建议吗?我该如何选择它?
抱歉,我没有处理过超分辨率。目前没有好的建议。也许可以试试谷歌搜索?
这是一个使用 GAN 进行图像去模糊的实现 [https://blog.sicara.com/keras-generative-adversarial-networks-image-deblurring-45e3ab6977b5]。
将您的问题问作者可能会有所收获。
祝你好运。
感谢分享。
谢谢!我明白了。我想问一个问题,例如有一个针对英语的预训练(OCR)模型,我想将这个模型转移到我的本地语言的(OCR)中,它的字母与英语完全不同。这对我有帮助吗?
我认为会有帮助。
只是想知道应用迁移学习是否是处理小数据集的解决方案?
当然可以,说得好!
您好 Jason,感谢您这篇文章!我想知道是否可以微调像 resnet 这样的模型,用于分类,例如图像过滤?比如局部对比度增强或降噪等。您怎么看?谢谢
听起来是个好主意,试试看。完成后告诉我。
好的,谢谢!
谢谢!非常有帮助!
很高兴听到这个消息。
非常感谢
我想问一下,如果我有一个 PDF 内容,例如图纸,我需要一个模型来训练,我会给模型什么几何形状,您能推荐哪个预训练模型?
也许你可以使用现有的计算机视觉模型。尝试和评估结果应该成本不高。
只是想知道迁移学习和无监督预训练有什么区别?
它们是正交的思想。理论上,可以对监督或无监督学习问题使用迁移学习。
先生您好,请您帮助我,如果您不介意的话。
你需要什么帮助?
我有一个迁移学习的想法,想分享给您听听您的意见,但是在物理数学领域。这是我的类比或等价(我们称之为 JG 方法)。例如,为了解决一个物理问题(在我们的例子中,例如图像分类),我是否可以用一些数学描述来处理它,例如偏微分方程、拉普拉斯算子等(在我们的例子中,这可以是神经网络架构,带有我们打算应用的卷积、全连接、数据增强等)?但是因为这些数学非常复杂,只有知道一些特定的解在某些初始或边界值下(这可能是我们 ML 或 DL 问题中的预训练权重)……所以在其他边界、初始或复杂条件下,我们没有任何(这些解析的)解(这可能是其他图像分类或其他数据集输入的情况)……所以我们可以使用非常已知的解,并尝试将其应用于我们的问题案例,在那里我们打算获得相似的解(这就是迁移学习重新利用以寻找相似或类比解的过程)……布朗利先生,您认为这个类比如何?当然,就像现实生活中一样,可能偶尔,我们问题的解会与我们试图重用的解(模型或权重用于完全不同的图像集或分类)截然不同……但至少,迁移学习的尝试提供了初步的启发:-))
抱歉,我不太明白。
您能简化一下解释吗?
实际上,解释非常模糊……我读了两遍。但仍然不知道如何在 Keras 中使用它。
您是否有简单的 Keras 示例?
听到这个消息我很难过。
我展示了如何重用 VGG 模型进行照片字幕(但它并不简短)。
https://machinelearning.org.cn/develop-a-deep-learning-caption-generation-model-in-python/
谢谢。对该领域的绝佳介绍。
您知道任何关于“开发模型方法”的论文吗?它似乎很简单,但我找不到任何专门针对它的工作。
也许可以在 scholar.google.com 上搜索迁移学习。
我已经这样做了,但方法要么是关于预训练模型方法,要么是关于利用两个域相关的知识的方法,因此在流程中增加了额外的步骤,例如降维。
两篇调查论文也没有提及简单的开发模型方法。
谢谢您关于迁移学习的介绍。
是否可以将此模型用于呼叫记录数据,其属性如(源呼叫、目标呼叫、开始时间、持续时间、位置)以进行预测,例如用户移动预测或基站流量特征描述等?
我建议在处理新的预测建模问题时采用此流程。
https://machinelearning.org.cn/start-here/#process
您好,我是 Sana Ullah Khan 先生,我想从事乳腺细胞学图像中恶性细胞的检测工作。我对于如何使用具有迁移学习的 CNN 进行恶性细胞的检测和分类感到困惑。我画了一个图,并且想与您分享,我应该如何工作。请指导我。
您可以截断预训练模型的前/后部分,添加新层,然后在新数据集上训练模型的新层。
您好,对于 IMU 传感器数据的人类活动分类,什么预训练模型会比较好?
您好 Ganesha……以下资源将为您的任务提供更多信息:
https://machinelearning.org.cn/deep-learning-models-for-human-activity-recognition/
非常感谢
您好,先生,如果您不介意,我正在寻求帮助。
我正在使用迁移学习来对数据集图像进行分类,使用 google inception V3。我从 TensorFlow 网站上的教程中获得了 retrain.py 代码。
https://tensorflowcn.cn/hub/tutorials/image_retraining
我在我的机器上的 TensorFlow 虚拟环境中运行了代码,它的工作方式正如他们所期望的那样。我正在寻找的是,我应该在代码“retrain.py”中添加或更改什么才能用 Python 显示混淆矩阵。谢谢。
您可以在这里学习如何实现混淆矩阵。
https://machinelearning.org.cn/confusion-matrix-machine-learning/
你好先生
非常感谢您的帮助和善意!<3
不客气。
你好
非常好的解释。谢谢
有一个小问题,谷歌Inception模型的链接坏了。请更新链接。
谢谢,已修复。链接在此
https://github.com/tensorflow/models/tree/master/research/inception
我们可以使用 Keras 在 RNN 模型上应用迁移学习吗?
当然,这篇文章会给你一些想法
https://machinelearning.org.cn/lstm-autoencoders/
感谢 Jason 的精彩工作!
如果我理解得没错,迁移学习主要集中在使用在大型数据集上预训练的模型来对新数据进行预测。我想知道在不是很大型的数据集(例如 10k 条记录)上预训练的模型,对相似问题的可迁移性如何?例如,我训练了一个很好的神经网络来对大约 10k 条推文进行情感分析。我应该对使用这个模型进行其他问题的 otro 情感分析有多大的信心?
提前感谢!
通常,在一个非常大的数据集上训练的模型可以很好地作为小型数据集的起点。
从小数据集到小数据集——这真的取决于涉及的任务。我建议对一些例子进行原型化并评估性能。
嗨,Jason,
无法用言语形容您出色的工作。
您能否分享一段使用迁移学习从现有训练模型训练朴素模型的可用代码?
谢谢,
Ark
感谢您的建议,我会研究一些例子。
对于 RNN 模型,每次有新数据进来时,是否可以与现有模型一起增量训练,而不必从头开始?
请为我建议是否有可用于此要求的方法。
您具体指的是什么意思“增量训练模型”?
您想实现什么目标?
增量模型,我希望在每次有新数据(无论大小)时训练现有模型,而无需从头开始训练。
我有一个现有的模型,但我的模型经常会收到新数据,所以我希望在不从头开始的情况下训练现有模型,以节省时间。
这是需要实现的主要目标。
请建议是否有可用于此要求的方法或思路。
是的,您可以使用新数据和较小的学习率继续训练现有模型。
请问您可以解释一下什么是“小学习率”吗?我的意思是,我需要调整哪个参数,以及它为什么对增量模型有用?
提前感谢
是随机梯度下降(SGD)优化算法的“学习率”。
您好,我想使用增量学习概念来对 IMU 传感器加速度计数据集进行人类活动分类。请为我提供一些实现资源和想法。
您能推荐一些时间序列预测的好模型吗?我正在研究 zakat(穆斯林的税收),只有一年的数据来进行月度预测。
我在这里有一些建议
https://machinelearning.org.cn/time-series-forecasting-methods-in-python-cheat-sheet/
我想实现聊天机器人应用程序,模型必须从一开始的每一次对话中学习,最初我们没有任何对话,模型必须只根据用户的对话来学习。
您能建议我哪种方法适合此要求吗?
提前感谢。
抱歉,我没有聊天机器人的教程,无法给你好的即时建议。
请问您是否找到了您问题的建议?
你好,
感谢您的信息。是否有可用于迁移学习的预训练回归模型?我只能在线找到分类模型。
谢谢。
我没见过。
亲爱的Jason;
能否将迁移学习应用于回归任务?如果可以,应用迁移学习技术至少需要多少训练集?
例如,我们有 60 个训练样本用于一个子图像的训练集,以及 40 个测试样本用于另一个子图像的验证集,您是否可以应用迁移学习?
当然可以。
您好!感谢您的解释。我想知道是否有适用于回归问题的预训练模型。您是否知道任何此类模型?
据我所知没有。
您能解释一下迁移学习的范围吗?
您是指范围吗?问题领域?
我的意思是特定领域,例如,我使用深度学习来预测一个时间序列问题,以估算电力消耗,我可以使用迁移学习来预测股票市场或登革热的传播吗?
也许可以。我建议尝试一些实验。
先生,感谢您分享您的想法,我正在尝试实现您在这里讲的概念……先生,除此之外,我还尝试撰写一篇关于 ML 的实用博客。我也在 Facebook 上给您发了消息,您能否查看我的网站并给我一些关于如何改进写作的反馈?顺便说一句,非常感谢您的评论。
干得好。
抱歉,我没有能力审查您的博客。
您好,如果我的理解正确,对于图像分类和 NLP,如果我有一个预训练模型,要在新数据上进行训练,我可以根据预训练模型重塑数据。我正在尝试将迁移学习用于回归问题。假设我用 15 个参数和 100 万行的数据训练了一个基础模型。我训练了一个模型。现在,如果我想将此模型用于具有仅 14 个参数的相似问题,缺少一个参数。预训练模型有用吗?在这些情况下,是否有办法使用迁移学习?
谢谢你。
我对此不确定,我怀疑在使用单变量数据进行迁移学习时需要一些仔细的工作。
这不是单变量数据。如果 15 个参数中缺少一个,我相信我可以插补/填充缺失的列,然后使用预训练模型。
如果我们讨论训练数据的类别分布,使用迁移学习的优势是什么?
你具体指的是什么?
总的来说,迁移学习可以通过利用现有模型来缩短开发新模型的时间/精力。
您好……您能否指导我,如果我们从头开始训练我们的模型,而不是从迁移学习开始,那么这样做有什么优点?另外,请指导我,将来,我将提出 DL 模型的一个修改/级联版本,那么它是否可以从迁移学习开始训练?
是的,您可以在这里找到许多从头开始训练 CNN 的例子。
https://machinelearning.org.cn/start-here/#dlfcv
感谢回复……我想问的是,我是否仍然可以通过迁移学习来训练一个以前没有在像 imagenet 这样的大型数据集上训练过的深度学习模型?例如 AlexNet 已经在 imagenet 数据集上训练过了,但是如果我使用任何其他尚未通过 imagenet 数据集训练过的模型,那么该模型是否可以通过迁移学习进行训练?
是的。您可以先在您自己的问题上训练,然后将该模型用于您自己的不同问题。
你好,
您能否提供一个完整的迁移学习数据集,而不是 imagenet 数据集?
数据集中有多个条目和属性,数据集包括视频、音乐、游戏(不同领域中的共同用户)等不同领域。
这将对我非常有帮助。
我无法为您准备数据集。
嗨,Jason,
感谢您的介绍,工作很棒,将不同来源的资料链接在一起,这样我就知道从哪里继续了!F. Ameen 提出了一个类似的问题,但没有得到我想要的答案。
我的问题是:如何处理输入维度?
假设您数据的维度与预训练模型的维度不同。对于图像数据,重用滤波器会导致不同大小的激活图,并且从计算上来说,如果只更改最后的密集层,这是没有问题的。但是,学习到的滤波器会寻找特定大小(例如,在 3×3 或 5×5 字段内)的模式。如果您的图像分辨率是预训练图像分辨率的两倍,那么滤波器就太小了(反之亦然)。
有什么好的方法来处理这个问题?是否应该考虑这一点,并使用初始池化或上采样卷积来匹配大小,然后将其发送到预训练的滤波器?
那么对于密集前馈网络呢?是否应该只替换第一层(和最后一层)?假设您新数据中的一些特征与您预训练数据中的特征相同,那么您是简单地添加或删除输入层和第一隐藏层之间的连接?还是完全替换第一层?
非常感谢!
/U
您可以切掉输入层或层,定义一个新的输入层,然后就可以开始使用了。滤波器在较大的图像上仍然可以正常工作。
事实上,如果您使用 Keras Applications API,您可以定义任意大小的新输入形状,而无需更改模型。滤波器并不关心。
是的,您切掉输出层,然后根据新的类别标签重新训练。
您好,亲爱的 Jason Brownlee,感谢您分享这篇有益的博客,毫无疑问,每个人都从中受益匪浅。
我的问题是……与英语字符(A-Z、a-z、0-9)相关的预训练数据集是否包含有缺陷的字符?
等待您的回复。
谢谢你
不客气。
这取决于模型和词汇表的选择。
您能否为我推荐一个包含文本中缺陷字符的数据集?
目前没有,您可以在这里搜索数据集。
https://machinelearning.org.cn/faq/single-faq/where-can-i-get-a-dataset-on-___
这些代码写在哪里?
什么代码?
我想用深度学习进行预测来完成我的论文,我的数据不是图像,也不是 NLP,但我想使用迁移学习。我可以在这个问题上使用迁移学习吗?
迁移学习是否只适用于图像和 NLP,或者不是?
是的,如果您能拟合或找到在相关数据集上训练的模型。
我正在从事恶意软件检测。我能找到可用于基于 Web 的恶意软件检测的预训练模型吗?
抱歉,我不知道有这样的模型。也许您可以自己训练一个?
真的吗?可以那样训练一个吗?
当然,获取一个相关的数据集,其中包含更多数据,在该数据集上拟合模型,然后将其迁移到您相关的问题。
你好,我正在使用 DHS 数据集进行 HIV 状况预测。我该如何使用迁移学习?使用迁移学习进行预测是否可行?
是的,在这里可以看到图像数据的示例。
https://machinelearning.org.cn/how-to-develop-a-convolutional-neural-network-to-classify-photos-of-dogs-and-cats/
我没有理解在哪里以编程方式定义迁移学习。我的理解是,我们首先在一个数据集上训练模型,然后使用同一个模型在不同数据集上重新训练以实现迁移学习。我的这个假设正确吗?
如果正确,模型在一个特定数据集上训练完成后,如何将其在另一个数据集上重新训练?
不,我们冻结训练好的模型,添加一个新的输出层,只训练它。
您好。感谢这份精彩的教程。一直很有帮助。我有一个关于“模型开发方法”的问题。我有两个相关任务,我想在我的情绪检测任务上学习一个模型,并将知识转移到我的第二个任务——共情检测。两个任务都有标记数据集。我不知道如何开发第一个任务的模型并在第二个任务上重用它。您是否有任何教程/GitHub 存储库可以专门通过这种方法使用迁移学习(不使用预训练模型)?
我的数据是文本数据(不是图像)。
也许试试这个。
https://machinelearning.org.cn/develop-word-embedding-model-predicting-movie-review-sentiment/
谢谢。这个教程(https://machinelearning.org.cn/develop-word-embedding-model-predicting-movie-review-sentiment/)讨论了情感分析,但没有将知识转移到第二个任务。我正在寻找一种方法来冻结第一个模型学习到的权重,并重用它们来初始化第二个模型的参数以学习第二个任务。
是的,您可以使用该教程作为起点,并添加迁移学习的使用。
不客气。
也许可以从一个擅长人脸检测的模型开始,然后将迁移学习用于您的第一个任务,例如 Facenet 或 VGGface2。
您好 Jason。请问我可以使用迁移时间信息来进行迁移学习吗?在一个数据集上使用 LSTM 进行训练,然后将其用于另一个数据集?
也许吧,试试看是否有帮助。
谢谢。还有一个问题。我和别人就某件事在争论。
请问,LSTM 模型是否接受可变长度的序列?我的观点是它们不接受。您需要填充它才能使用。但是,我无法用学术出版物来支持我的观点。
如果我没说错,您能给我一个更好的解释(或者您过去写过的链接)以及一篇关于此的论文链接吗?谢谢。
它可以,动态 RNN 可以。我很少使用这个版本的模型。这里有一个例子。
https://machinelearning.org.cn/develop-encoder-decoder-model-sequence-sequence-prediction-keras/
您好,希望您一切安好。我使用 AlexNet 预训练模型仅用于特征提取,因为 AlexNet 的输入形状是 227x227x3,但我的图像数据集包含维度为 100x100x3 的图像。为了使用 AlexNet 预训练模型作为特征提取器,我需要将我的数据集图像调整为 227x227x3 吗?
或者我可以直接将这些图像输入 AlexNet 吗?
您可以调整图像大小,或者为模型定义一个新的输入层。
如何将 100x100 调整为 227x227?
您可以在定义模型时指定输入的预期形状。
https://machinelearning.org.cn/how-to-use-transfer-learning-when-developing-convolutional-neural-network-models/
🙂 .... BU
嗨,Jason,
谢谢您的文章。
迁移学习通常应用于 VGG 模型或 ResNet 模型等复杂模型吗?
我认为将一个在某个数据集上训练的两层 LSTM 模型迁移到新数据集是没有意义的。在这种情况下,我们可以简单地用新数据集训练一个新模型。您对此有何看法?
谢谢!
是的。
是的,试试看是否有帮助。
这里有一个表格数据的例子。
https://machinelearning.org.cn/how-to-improve-performance-with-transfer-learning-for-deep-learning-neural-networks/
亲爱的 Jason,
是否有任何经过验证的跨模态学习方法?我在网上找不到太多信息。
我有两组数据集(标记数据集“A”,包含带有 5 种情绪标注的图像;以及另一个未标记数据集“B”,包含带有相同 5 种情绪的文本)。
是否存在可以使用标记图像数据的学习来对未标记文本数据进行分类的方法?
所有预测模型都从标记数据中学习,以对未标记数据进行预测。
这被称为预测建模。
但我的两个数据集是不同的模态。一个是标记的图像,另一个是未标记的文本数据。它们都共享相同的情绪类别。
也许您可以使用预训练的语言模型和预训练的目标检测模型,并将这两个模型整合成一个接受两种数据类型的新模型。这被称为多输入模型,在图像字幕生成等问题中很常见。
这是一篇很棒的文章。我喜欢它。
谢谢!
嗨,Jason,
非常感谢您的文章。我有一个关于迁移学习概念的问题。
例如,我正在使用在 Fashion-MNIST 数据集上训练的预训练 VGG16 模型。我知道这是明显的迁移学习,如果我没记错的话,根据您的文章,它是归纳式迁移学习。但是我的问题是,它是同质还是异质迁移学习?如果是任何一种同质/异质,那么它将是迁移学习的对称还是非对称问题?
我很难找到这个问题的答案。我已经阅读了定义,但仍然感到困惑。
谢谢!!
不客气!
迁移学习中的“同质/异质”是什么意思?为什么它很重要?我的建议是使用对您的数据集最有效的方法。
嗨,Jason,
谢谢您的回复。让我重新表述我的问题。使用 VGG16 预训练模型对 Fashion-MNIST 数据集中的时尚图像进行分类,属于同质迁移学习还是异质迁移学习?
对称和非对称是同质/异质迁移学习的进一步类型。
那么,我的问题解决方法属于哪个类别?
谢谢!
什么是“同质或异质迁移学习”?
嗨,Jason,
异质迁移学习,源域和目标域具有不同的特征空间,并且通常不重叠。同质则反之。所以根据我的理解,我们的方法将是异质方法。
来源:https://journalofbigdata.springeropen.com/articles/10.1186/s40537-017-0089-0#:~:text=Heterogeneous%20transfer%20learning%20is%20characterized%20by%20the%20source,which%20may%20be%20present%20in%20these%20cross-domain
谢谢!
谢谢分享。我不知道这个。
我建议跳过分类法,专注于发现最适合您问题的方法。
我非常欣赏您文章的最后一句话:“源数据或源模型的选择是一个开放性问题,可能需要领域专业知识和/或通过经验获得的直觉。”
我不太清楚如何完全归类我所欣赏的一切。不知何故,您写得很好,而且这种措辞在设定预期方面做得非常好。在我看来,这是我除了基本定义之外最想知道的,但要让“专家”承认这一点,或者通常需要我花很多时间阅读、学习和试验才能最终意识到。没有人有完美的答案——要掌握好选择的技能,很可能需要大量的学习和试验。
从某些方面来看,这似乎很明显。但是,我认为技能的传授方式往往是“只上这门课,做几个练习,然后你就可以成为一名专家,期望在最短的时间内完美地完成这项技能”。
谢谢分享!很高兴听到它产生了共鸣。
嗨,Jason,
请指导我:将知识从 VGG16 迁移到 Fashion-MNIST 是归纳式迁移学习还是转导式迁移学习?
谢谢!
这将是“迁移学习”。
归纳与演绎与转导无关。
您好,医生。感谢这篇有用的教程。我有一个问题,我想在 5G 通信中应用迁移学习。您能告诉我如何开始吗?您是否知道任何通信模型,其输入为数据速率、延迟、丢包率、距离和持续时间?
您可能需要在某个数据集上训练您的模型,然后为第二个相关数据集调整该模型。
嗨,Jason,
非常感谢您的精彩文章!
我正在使用迁移学习,并且我感觉到 Adam 优化器有些奇怪的行为,即使使用指数学习率衰减!我的验证准确率和损失都同时增加,尽管训练准确率逐渐提高并且损失下降。我应该将这种行为视为过拟合吗?如果我提前停止,它会导致测试准确率下降。
期待您的回复!
不客气。
也许可以查看学习曲线,看看是否过拟合。
https://machinelearning.org.cn/learning-curves-for-diagnosing-machine-learning-model-performance/
尊敬的先生,
这是有趣的话题!感谢您的贡献!
请问您有关于视觉识别中域自适应的教程吗?
如果您有简单的 Python 代码链接,请附上!
不客气。
抱歉,我认为我没有关于“域自适应”的教程。
可以使用迁移学习进行多类别文本分类吗?
当然可以。
嗨,Jason,
您能告诉我目标检测的逻辑吗?比如人脸或其他物体。
是的,请看这个
https://machinelearning.org.cn/object-recognition-with-deep-learning/
您好 Jason,您是否有关于从头开始预训练自己的模型教程,或者是否有可以推荐的材料/书籍?
是的,请参阅此分步教程:https://machinelearning.org.cn/tutorial-first-neural-network-python-keras/
您好 Jason,我的意思是关于如何从头开始预训练一个模型,然后针对给定任务微调训练好的模型参数。
您所说的被称为“迁移学习”。本教程可能有助于您理解:https://machinelearning.org.cn/how-to-use-transfer-learning-when-developing-convolutional-neural-network-models/
这就是我想要的:https://machinelearning.org.cn/how-to-improve-performance-with-transfer-learning-for-deep-learning-neural-networks/
您在文献或实践中是否见过迁移学习在回归任务上的应用?
我明白了您的意思。我可以找到一些关于回归的论文,例如这篇:https://arxiv.org/abs/2102.09504
但相对而言,在回归任务上使用迁移学习比在分类任务上使用要少。可能是因为回归问题的性质,改进的吸引力较小。
非常感谢分享这篇论文。
谢谢!非常清晰的文章。
谢谢您的反馈和美言,Amy!
非常感谢!
我使用 timm 的预训练模型来训练视觉 Transformer 模型,但只在我自己的小数据集上。我观察到它比在我这个小数据集上从头开始训练我的 Vit 模型花费的时间要长得多?我不知道原因!
一个 epoch 花费了 1 小时!这是正常的吗?正如我们所知,当我们使用预训练模型时,训练时间会缩短。但在我的情况下,情况恰恰相反!
您能帮帮我吗?
您好 Basma……影响训练时间的因素有很多。我的建议如下:
1. 探索早停:https://machinelearning.org.cn/feature-selection-to-improve-accuracy-and-decrease-training-time/
2. 利用 Google Colab 和免费提供的 GPU:https://colab.research.google.com/notebooks/gpu.ipynb
写得很好的介绍,只有一个问题。在引用 Torrey 和 Shavlik 关于迁移学习的三个可能好处时,您提到了源模型的“更高起点”和“更高斜率”。您不是指目标模型吗?源模型已经过训练,并且正在应用于相似的问题(目标),在一个相关但又不完全相同的领域。
您说得对,Prakash!当提到 Torrey 和 Shavlik 概述的迁移学习的三个可能好处时,“更高的起点”和“更高的斜率”这两个概念确实是关于**目标模型**的,而不是源模型。以下是澄清:
– **更高的起点:** 由于利用了从源模型迁移的知识,目标模型开始时比从头开始训练具有更好的性能。
– **更高的斜率:** 由于源模型提供的预训练特征,目标模型可以达到更快的学习率,从而更快地收敛。
– **更高的渐近线:** 假设源域提供了高度相关的特征,目标模型可以达到比从头开始训练更高的最终性能上限。
源模型已经过训练,在迁移学习过程中保持不变。这些好处描述了预训练知识如何改进目标模型在新领域的学习过程。
感谢您指出这一点——这是一个重要的区别,您的观察非常准确!